影象處理(1)直方圖均衡
阿新 • • 發佈:2018-11-25
為了增強影象對比度,通常需要調整影象的灰度級分佈,使得亮暗更加分明。如果一幅影象中某些灰度級分佈概率過小,就會導致這部分影象不清晰,因此灰度級分佈的越平均影象對比度越好。表現在空間上,如果減小分佈較大的灰度級的面積,而增加分佈較小的灰度級面積,就會突出原來顯示不清晰的部分。
調整影象對比度可以看作一個灰度級變換的過程,通過灰度級變換來改變直方圖分佈。假設原來影象函式為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. 《數字影象處理》,Rafael. C. Gonzalez, Richard. E. woods.
2. 《image processing using matlab》, Rafael. C. Gonzalez.