直方图的均衡化是什么呢?
举个简单的例子:在一个圆中有很多石头,都集中在圆心附近,对其均衡化就是让这些石头尽可能的均匀分布在圆这个区域内。
并且还有一个原则:如果石头A在原来状态下距离圆心的距离在所有石头是第4位,那么均衡化后仍然是第4位,相对顺序不能变。(大概就是一个拉的更宽了)。
那么要做一个怎么样的映射才能达到这种效果呢?
接下来要补充点概率论的知识了。
首先,一幅图像的灰度值可以看成[0,L-1]之间的随机变量。
然后,既然是随机变量,我们就可以计算每个变量的概率。
最后,有了每个变量的概率,我们就能计算出其概率密度函数(PDF probability denisty function)。
令
在图像处理中特别重要的变换函数有
w为积分的假变量,公式右边是随机变量
为了寻找刚才讨论的相应变换的
把(3)带入(1)中
由此可以看出$p_是一个均匀概率密度函数。达到了我们均衡化的目的的。
实现代码:
equalize.m
function [Image] = equalize (pImage,probability)
[x,y] = size(pImage);
Image = zeros(x,y);
Image = equalizeFunction(pImage,probability);
endfunction
equalizeFunction.m
function [retgray] = equalizeFunction (gray, probability)
%the shift function depends on PDF(probability density function)
%a very import function s = L * (0-r)sum(p(r));
L = 256;
P = zeros(256,1);
p = zeros(size(gray));
[x,y] = size(gray);
for k=1:256
for m=1:k
P(k,1) = P(k,1)+probability(m,1);
end;
end;
for i=1:x
for j=1:y
p(i,j) = P(gray(i,j)+1,1);
end;
end;
retgray = (L-1)*p;
endfunction
效果图:
未均衡化