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

直方图的均衡化是什么呢?

举个简单的例子:在一个圆中有很多石头,都集中在圆心附近,对其均衡化就是让这些石头尽可能的均匀分布在圆这个区域内。
并且还有一个原则:如果石头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)=(L1)r0pr(w)dw2

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

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

dsdr=dT(r)dr=(L1)ddr[r0pr(w)dw]=(L1)pr(r)3

把(3)带入(1)中

ps(s)=pr(r)|drds|=pr(r)|1(L1)pr(r)|=1L1,0sL14

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

效果图:
未均衡化
数字图像处理之直方图均衡化(Octave)_第1张图片

数字图像处理之直方图均衡化(Octave)_第2张图片

你可能感兴趣的:(Octave,图像处理)