1. 程式人生 > >影象處理(1)直方圖均衡

影象處理(1)直方圖均衡

為了增強影象對比度,通常需要調整影象的灰度級分佈,使得亮暗更加分明。如果一幅影象中某些灰度級分佈概率過小,就會導致這部分影象不清晰,因此灰度級分佈的越平均影象對比度越好。表現在空間上,如果減小分佈較大的灰度級的面積,而增加分佈較小的灰度級面積,就會突出原來顯示不清晰的部分。
調整影象對比度可以看作一個灰度級變換的過程,通過灰度級變換來改變直方圖分佈。假設原來影象函式為f(r),分佈概率密度為p(r)。
現在變換灰度級r,如下:
s=g(r)
直方圖均衡要求,每個灰度級概率密度平均,即:
這裡寫圖片描述
其中L-1為灰度級數。
根據總概率為1可以求出變換函式g(r)。
這裡寫圖片描述
均衡的灰度級是原有灰度級概率密度的積分,用離散量表示為累加:
這裡寫圖片描述


接下來看直方圖均衡的處理效果,MATLAB程式包含統計灰度分佈的grayLevel_ statistic.m和均衡化函式histogram_equal.m。

function f=grayLevel_statistic(gray, level)


[row, col]=size(gray);

f=linspace(0,0,level);
f=double(f);

for i=1:1:row
    for j=1:1:col
        f(gray(i,j)+1)=f(gray(i,j)+1)+1;
    end
end

f=f./(row*col);
function T
=histogram_equal(gray, level)
[row,col]=size(gray); T=zeros(row, col); p=grayLevel_statistic(gray, level);%get the probability of gray level p_sum=linspace(0,0,level); p_sum=double(p_sum); for k=1:1:level if k==1 p_sum(k)=p(k); else p_sum(k)=p_sum(k-1)+p(k); end end for
i=1:1:row for j=1:1:col if p_sum(gray(i,j)+1)*(level-1) >= level-1 T(i,j)=level-1; else T(i,j)=round(p_sum(gray(i,j)+1)*(level-1)); end end end
function histogram_image%filter image function
image=imread('timg.jpeg');

[d1,d2,d3]=size(image);
if d3==3
    R=image(:,:,1);
    G=image(:,:,2);
    B=image(:,:,3);
    gray=round((1/3)*(R+G+B));
elseif d3==2
    R=image(:,:,1);
    G=image(:,:,2);
    gray=round((1/2)*(R+G));
else
    gray=image;
end


T=histogram_equal(gray,256);

imshow(T, [0, 255]);

經過直方圖處理後圖像具有較好清晰度,增強了明暗對比。但是全域性直方圖均衡可能會模糊掉一些原來不突出的地方,掩蓋掉細節。採用區域性直方圖均衡可以讓細節更加清晰,通過在一個區域性區域使用直方圖均衡,然後移動到相鄰區域繼續進行直方圖均衡,替換原來變換的灰度值。MATLAB中增加的區域性直方圖均衡程式碼為:

function T=histogram_local_equal(gray,level)
[row,col]=size(gray);
T=zeros(row,col);

%move the 3X3 template
for i=2:1:row-1
    for j=2:1:col-1
        template=gray(i-1:i+1,j-1:j+1);
        %update the gray data using the local histogram data
        T(i-1:i+1,j-1:j+1)=histogram_equal(template,level);

    end
end

圖1 (a)灰度圖(b)全域性直方圖均衡處理(c)區域性直方圖均衡處理,採用3x3模板
圖1 (a)灰度圖(b)全域性直方圖均衡處理(c)區域性直方圖均衡處理,採用3x3模板

參考文獻:
1. 《數字影象處理》,Rafael. C. Gonzalez, Richard. E. woods.
2. 《image processing using matlab》, Rafael. C. Gonzalez.