您的位置:首页 > 其它

数字图像处理之直方图均衡化(Octave)

2016-11-22 00:30 162 查看
直方图的均衡化是什么呢?

举个简单的例子:在一个圆中有很多石头,都集中在圆心附近,对其均衡化就是让这些石头尽可能的均匀分布在圆这个区域内。

并且还有一个原则:如果石头A在原来状态下距离圆心的距离在所有石头是第4位,那么均衡化后仍然是第4位,相对顺序不能变。(大概就是一个拉的更宽了)。

那么要做一个怎么样的映射才能达到这种效果呢?

接下来要补充点概率论的知识了。

首先,一幅图像的灰度值可以看成[0,L-1]之间的随机变量。

然后,既然是随机变量,我们就可以计算每个变量的概率。

最后,有了每个变量的概率,我们就能计算出其概率密度函数(PDF probability denisty function)。

令Ps(s)和Pr(r)分标识随机变量r和s的概率密度函数,其中P的下标用于标识Ps(s)和Pr(r)是不同的函数。由基本概率论得到的一个基本结果是,如果Pr(r)和T(r)已知,且值在T(r)上市连续可微的,则变化后的变量s的PDF可由下面的简单公式得到:

ps(s)=pr(r)|drds|(1)

在图像处理中特别重要的变换函数有

s=T(r)=(L−1)∫r0pr(w)dw(2)

w为积分的假变量,公式右边是随机变量r的累积分布函数(CDF).因为PDF总为正,且总是随着r增加而增加,当r达到上限(L−1)时,则积分等于1.

为了寻找刚才讨论的相应变换的ps(s),我们使用(1)式,由积分学中的莱布尼茨准则知道,关于上限的定积分的导数是被积函数在该上限的值

dsdr=dT(r)dr=(L−1)ddr[∫r0pr(w)dw]=(L−1)pr(r)(3)

把(3)带入(1)中

ps(s)=pr(r)|drds|=pr(r)|1(L−1)pr(r)|=1L−1,0≤s≤L−1(4)

由此可以看出$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


效果图:

未均衡化



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息