图像处理之直方图处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35732969/article/details/82820464

灰度级范围为[0,L-1]的数字图像的直方图是离散函数:

h(r_{k}) = n_{k}

其中r_{k}是第k级灰度值(r_{k}=k),n_{k}是图像中灰度值为r_{k}的像素个数。

通常用MN表示的图像像素的总数除它的每个分量n_{k}归一化直方图,即:

p(r_{k}) = n_{k}/MN

M和N分别是图像的行和列维数,k = 0,1,...,L-1。归一化直方图的所有分量和为1。

若一幅图像的像素倾向于占据整个可能的灰度级并且均匀分布,则该图像会有高对比度的外观和灰度细节丰富的特点。如下图:

直方图均衡

用变量r表示待处理的图像的灰度,灰度变换函数通常需要满足两个条件:

  • (a) T(r)在空间0\leqslant r\leqslant L-1上为单调递增函数
  • (b) 当0\leqslant r\leqslant L-1时,0\leqslant T(r)\leqslant L-1

当考虑反函数r = T^{-1}(s),0\leqslant s\leqslant L-1时,条件(a)改为:

  • (a') T(r)在空间0\leqslant r\leqslant L-1上是严格单调递增函数

条件(a)保证输出灰度值不少于相应的输入值,防止灰度反变换时产生人为的缺陷;条件(b)保证输出灰度的范围与输入灰度的范围相同;条件(a')保证从s到r的反映射是单值的,即一对一的,防止出现二义性。如下图:

扫描二维码关注公众号,回复: 3391554 查看本文章

 为了产生均衡的直方图,使用如下的灰度变换函数:

s = T(r) = (L-1)\int_{0}^{r}p_{r}(w)dw....................................(1)

容易看出,该变换满足条件a和b。

下面解释为什么经过(1)式的灰度变换能产生均衡直方图。

p_{r}(r)p_{s}(s)分别表示随机变量r和s的概率密度函数(PDF)。若p_{r}(r)和T(r)已知,则变换后的变量s的PDF为:

p_{s}(s) = p_{r}(r)|dr/ds|  ......................................................(2)

使用(1)式的变换函数,得:

\frac{ds}{dr} = \frac{dT(r)}{dr} = (L-1)\frac{d}{dr}[\int_{0}^{r}p_{r}(w)dw] = (L-1)p_{r}(r)

将dr/ds代入(2)式,得:

p_{s}(s) = p_{r}(r)|dr/ds| = p_{r}(r)\left | \frac{1}{(L-1)p_{r}(r)} \right | = \frac{1}{L-1},0\leqslant s\leqslant L-1

可知,p_{s}(s)始终是一个均匀概率密度函数,与p_{r}(r)的形式无关。所以,经过(1)式灰度变换的图像能产生均衡直方图。

(1)式的积分形式针对的是连续灰度值,而对于离散值,用求和的形式处理。一幅图像中灰度级r_{k}出现的概率为:

p(r_{k}) = n_{k}/MN,k = 0,1,2,...,L-1

(1)式中变换的离散形式为:

s_{k} = T(r_{k}) = (L-1)\sum_{j=0}^{k}p_{r}(r_{j}) = \frac{(L-1)}{MN}\sum_{j=0}^{k}n_{j},k = 0,1,2,...,L-1

注:在实际使用中,需要将灰度值取近似为最接近的整数。

直方图匹配(规定化)

直方图匹配直方图规定化,是指处理后的图像具有规定的直方图形状。

具体说来就是,要找到一个灰度变换函数,使图像在该灰度变换函数的作用下,产生一个我们指定形状的直方图,所谓指定形状的直方图形状,其实就是一个指定的概率密度函数。

假设r和z分别表示输入图像和输出图像的灰度级,p_{r}(r)是输入图像的概率密度函数,p_{z}(z)是我们希望输出图像所具有的指定概率密度函数。

令:

s = T(r) = (L-1)\int_{0}^{r}p_{r}(w)dw

可以看出,这就是直方图均衡中的变换函数。知道p_{r}(r),就能得到T(r)。

定义随机变量z:

G(z) = (L-1)\int_{0}^{z}p_{z}(t)dt = s

同样,知道p_{z}(z),就能得到G(z),而p_{z}(z)就是我们指定的概率密度函数。

可得:

z = G^{-1}[T(r)] = G^{-1}(s)

上式就是我们要求的直方图匹配的灰度变换函数。

对于离散形式,类似的我们令:

s_{k} = T(r_{k}) = (L-1)\sum_{j=0}^{k}p_{r}(r_{j}) = \frac{(L-1)}{MN}\sum_{j=0}^{k}n_{j},k = 0,1,2,...,L-1

G(z_{q}) = (L-1)\sum_{i=0}^{q}p_{z}(z_{i})=s_{k},q=0,1,2,...,L-1

其中,p_{z}(z_{i})规定的直方图的第i个值,z_{q}是规定的直方图对应的图像的第q级灰度值(z_{q}=q),利用反变换找到期望的z_{q}

z_{q} = G^{-1}(s_{k})

实践中,并不需要反变换。因为我们处理的灰度级是整数(如8比特图像的灰度级是从0到255),我们常用下面的直方图规定化过程:

  1. 计算给定图像的p_{r}(r)及其直方图均衡变换s_{k},把s_{k}四舍五入为范围[0,L-1]内的整数;
  2. 对q=0,1,2,...,L-1计算G(z_{q}),其中p_{z}(z_{i})规定的直方图的值,把G四舍五入为范围[0,L-1]内的整数,将G存在一个表中;
  3. 对每一个s_{k},k=0,1,2,...,L-1,从步骤2中存储的G值表中寻找G(z_{q})使G(z_{q})最接近s_{k}。例如表中第64个G(z_{q})最接近s_{k},则根据G(z_{q})的定义,此时q=63,也就是z_{q}=63。当满足给定s_{k}z_{q}值多于一个时,按惯例选择最小的值。

参考资料:冈萨雷斯《数字图像处理》

猜你喜欢

转载自blog.csdn.net/weixin_35732969/article/details/82820464