直方图规定化

直方图

直方图的观看规则就是“左黑右白”,左边代表暗部,右边代表亮部,而中间则代表中间调。
纵向上的高度代表像素密集程度,越高,代表的就是分布在这个亮度上的像素很多。
对于一张“正常”的照片来说,直方图应该是中间高两边低。

直方图
这张照片就是如此。
hua
这张照片的直方图显示的信息可以这样分析:照片的最左侧有高度,但是很少。这说明这张照片有阴影,但不多。最右边也有高度,说明有高光,同样很少。这就是一张最正常不过的照片了,它的直方图就是这样的,可以称之为“对比度正常的中间调”。

直方图规定化

直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。
这时可以采用比较灵活的直方图规定化。一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果.
所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。所以,直方图修正的关键就是灰度映像函数。

例如:Pr (r)为原图像的灰度密度函数, Pz (z)为希望得到的增强图像的灰度密度函数,二者的直方图如下:
tu

直方图规定化增强处理的步骤如下:

  1. 其增强原理是先对原始的直方图均衡化:S = T(r)
  2. 同时对规定的直方图均衡化:v = G(z)
  3. 由于都是均衡化,故令 S = v,则:z = G-1(v) = G-1[T(r)]

原理:







在Matlab中没有直接实现灰度规定化的函数。
但是我们可以通过imhist和histeq两个函数的结合使用来实现。
直方图规定化首先也得求灰度图像的灰度级数的概率密度和累计分布函数,得到原始图像和模板图像的灰度累计分布函数直方图后(这里的模板的灰度级数N和原始图像的灰度级数M我们只讨论M>=N的情况),有两种方式将模板灰度分布特征映射到原始图像中。一是单映射规则(SML),二是组映射规则(GML)。

  1. 单映射规则(SML)

单映射规则具体操作步骤如下:对一原始图像的每个灰度级数i的灰度累计分布函数(nor_I_hist(i))与模板图像灰度级数灰度累计分布函数值(nor_M_hist(i))作差值后取绝对值运算,比较运算得到的结果,差值绝对值的最小值对应的最小位置便是原始图像映射到模板图像的灰度值。

2.组映射规则(GML)

组映射也是先求出原始图像和模板图像的累计分布函数直方图。在此基础上,与单映射相反,组映射是用模板图像中每个灰度级的累计分布函数(灰度直方图概率密度为0的灰度级除外)依次与原始图像的所有累计分布函数值作差,在所有差值中找出绝对值最小值所对应的原始图像灰度级,将该灰度级与上一次映射灰度级之间的原始图像灰度级都映射为模板图像中与之差值绝对值最小的灰度级。

阐述完上述原理后,我们通过基于Matlab的编程来进一步验证我们方法的正确性。
SML结果:

GML结果:

谢谢你请我吃糖果!