您的位置:首页 > 其它

直方图均衡化原理

2015-07-22 16:41 225 查看
        一幅图像是由不同颜色值(不同灰度级)的像素组成的。像素值在图像中的分布情况是这幅图像 的一个重要特征。直方图即可以用来修改图像的外观,也可以用来描述图像的内容,或者还可以用来检测图像中特定的对象或者纹理。

1.直方图的概念

        直方图是个简单的表,他给出了一幅图像或一组图像中拥有给定数值的像素数量。因此对于灰度图像的直方图有256个条目(或称为容器)。0号容器给出值为0的像素个数,1号容器给出值为1的橡树个数,以此类推。如下表所示:(第一行代表像素级(值),可以用数值下标表示,第二行代表该像素值在图像中存在的个数,即该图像中像素值为128的像素点有62个)

0
...
128
....
254
255
5
...
62
...
41
20

2.查找表

        查找表是一个简单的一对一(或者多对一)的函数,定义了如何将原有像素值转换为新的值。它本质上是个一维数组,对于常规的灰度图像而言有256个条目。表的第i项表示相对应的灰度的新值,即:

newIntensity = lookup[oldIntensity];

例如实现像素反转的一个查找表如下表所示:

查找表
01..128129...255
255254...127126...0

3.直方图均衡化

        直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。如何使直方图均衡在直方图均衡化过程中需要用到累计分布函数

有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。

第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是



其中,n是图像中像素的总和,

是当前灰度级的像素个数,L是图像中可能的灰度级总数。

来看看通过上述公式怎样实现的拉伸。假设有如下图像:

25512820050
5020025550
255200128128
20020025550
得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:



根据统计信息完成灰度映射后即可得到相应的查找表:

0...50...128...200...180...255
0...64...11201910180...255
根据查找表,就可以得到映射后的图像,映射后的图像如下所示:

25511219164
6419125564
255191112112
19119125564
一般而言,直方图均衡化能够大幅改善图像的外观。然而,最终结果的质量依赖于图像本身的内容,有好有坏!

参考:
http://blog.csdn.net/rushkid02/article/details/9178117             直方图均衡化原理

openCV2计算机视觉编程手册   张静

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