【數字影象處理】作業一 直方圖均衡化
阿新 • • 發佈:2018-12-10
作業一 直方圖均衡化
吳政億 151220129 [email protected]
(南京大學 電腦科學與技術系, 南京 210093)
實現細節
單通道直方圖均衡化
function [output2] = hist_equal(input_channel)
%you should complete this sub-function
input_channel=im2double(input_channel);
[M,N]=size(input_channel);
[counts,x]=imhist(input_channel);
location=find (counts~=0);
MinCDF=min(counts(location));
for j=1:length(location)
CDF=sum(counts(location(1:j)));
P=input_channel==x(location(j));
input_channel(P)=(CDF-MinCDF)/(M*N-MinCDF);
% input_channel(P) = CDF/(M*N);
end
[output2] = input_channel;
end
- 先將其轉化為double型別
- 得到畫素的大小為M*N
- 統計灰度值x有多少個count
- location得到灰度值個數不為0的x的下標
- 得到location中最小值為MinCDF
- 計算各個灰度級在直方圖均衡化後的灰度級並修改
優化: 相比老師之間給出的公式
input_channel(P) = CDF/(M*N);
進一步優化為
input_channel(P)=(CDF-MinCDF)/(M*N-MinCDF)
,
可以優化影象對比度不會因為最小值而過高
RGB影象直方圖均衡化
方法一 HSI影象
直接獲得r,v,b三個通道,並對他們各自進行單通道直方圖均衡化, 然後再將他們拼合成RGB影象。發現效果非常的差,會產生嚴重的失真。
方法二 HSI影象
將RGB影象轉換為HSI影象,然後單獨對I通道進行處理,效果與預計有偏差。 在瞭解中,HSI優化效果與HSV應該是差不多的,但是在實驗中產生了圖片的破碎感, 具體體現為:部分割槽域沒有優化,從而與優化後的區域產生鮮明的對比。 懷疑是hsi2rgb與rgb2hsi的實現有bug。
方法三 HSV影象
將RGB影象轉換為HSV影象,然後單獨對V通道進行處理,發現效果非常好。
function [output4] = hist_HSV_equal(input_HSV_image)
hv=rgb2hsv(input_HSV_image);
% 可以通過下面的程式看一幅圖的HSV三個通道
H=hv(:,:,1);
S=hv(:,:,2);
V=hv(:,:,3);
V1 = hist_equal(V);
output4 = cat(3,H,S,V1);
output4 = hsv2rgb(output4);
end
結果
實驗設定
matlab window10環境,工作目錄為code下。