轉載請注明出處。
Histogram Equalization 也就是直方圖均衡化, 是一種常用的通過直方圖處理來增強圖像的方法。
對於一副灰度圖像,其像素范圍一般在0~255之間,我們記nk(0<=k<=255)為灰度級為k的像素出現的頻率,M,N分別為圖像的行與列,則P(rk)=nk/MN我們得到歸一化的灰度直方圖。對於歸一化的概率直方圖ΣP(rk) =1
下面左邊幾幅圖像分別為暗圖像,亮圖像,低對比圖像已經高度比圖像 右邊為其所對應的歸一化灰度分布直方圖
可以看出對於強對比的圖像,其灰度直方圖分布比較均勻,因此我們想通過一種傳遞函數實現其他三種情況下直方圖的均勻分布。
所以給出一個任意分布的直方圖如下左,我們怎樣才能得到它的均衡分布如下右圖呢
這里我們就需要找到一種從左到右的transform表達式把一副圖像中的每個像素通過表達式得到其均衡化的值
為了實現這種映射,我們這里規定T(r) 必須為增函數,所以說映射后的像素值一定不小於原值。采用增函數映射的原因是為了防止灰度反變換是出現人為缺陷。如下為單調遞增函數,左圖為非嚴格增函數,所以會出現多個值映射到一個值的現象,右圖為嚴格單增函數,其映射為一一對應關系。
下面推導如何通過單增函數映射實現均衡分布
一副灰度圖像的灰度級可以看成是0~255區間內的隨機變量,用Pr(r)和Ps(s)分別表示其映射前后的概率密度函數,T(r)為映射函數,那么在P(r),T(r)已知的條件下,且T(r)連續可微,那么其對應關系可以用下式表示:
所以輸出灰度的PDF就又輸入灰度的PDF以及傳遞函數決定,我們又有
其中T(r) 我們用下式表示也就是輸入灰度的CDF(累積分布函數)
根據CDF性質我們知道其一定為單增函數並且積分上限為L-1時積分為1,所以符合變換函數的要求。對其求導得到如下
據此dr/ds我們也可以輕易得到,然后帶人前式我們有
到此我們可以證明輸出灰度的PDF是均勻分布!
下面是MATLAB實現
function [I2,H] = histeq(I,bin) I2 = zeros(size(I)); [row,col] = size(I); cdf = zeros(bin,1); h = zeros(bin,1); hist = imhist(I,bin); % calculate cdf for g = 1:bin cdf(g) = 0; for i=1:1:g cdf(g) = cdf(g) + hist(i); end end %nomorlize for k = 1:bin h(k) = (cdf(k)-1)/((row*col)-1) * 255; end for k = 1:bin h(k) = round(h(k)) + 1; end % remap to the new image for r = 1:row for c = 1:col idx = (I(r,c)/(256/bin)) + 1; I2(r,c) = h(idx); end end I2 = uint8(I2); H = imhist(I2);
效果如下圖