python 简单图像处理(8) 直方图均衡化

来源:互联网 发布:navicat 编写sql语句 编辑:程序博客网 时间:2024/04/30 20:25

原文地址:http://www.cnblogs.com/xianglan/archive/2010/12/28/1918694.html

直方图均衡化就是把一已知灰度概率分布的图像经过一种变换使之演变成一幅具有均匀灰度概率分布的新图像

它是以累积分布函数变换法为基础的直方图修正法

我们来看看直方图的含义

还是以上次我们讲的例子为例

 

我们看到R通道的直方图主要集中在亮部,所以R通道灰度图看起来较白

而B通道的直方图主要集中在暗部,而对应的B通道灰度图看起来很暗

G通道分布比较均匀,但有点偏暗

好了,这就是直观的理解

而清晰柔和的图像的直方图灰度分布比较均匀

 

什么是累积分布函数呢,我们先看看直方图的画法,每一个横坐标上纵坐标的高度对应于灰度值为该值的像素点的个数

若我们定义一个横坐标对应纵坐标高度是所有小于该灰度值的像素点的个数

这就是我们说的累积分布

灰度值为1处对应灰度值为1的点

灰度值为2处对应灰度值为1和2的点

灰度值为3处对应灰度值为1、2、3的点

·······

灰度值为255处对应所有的点

好啦

我们来看看累积分布直方图的效果吧

 

直方图均衡化的方法如下:

vola在这里加一些自己的理解,对于上面这幅图,应该是按照横轴从左到右从小到大进行上图的过程,因为横轴上的坐标x会和红线(原累计直方图)和黑线(理想直方图)相交产生两个交点,分别表示x实际值和理想值,这个理想值与x轴的平行线会合红线再次发生相交,并且由于两条直线都单调,所以这交点只有一个,比如:60位置的红线低于黑线,说明小于60灰度值的个数少于理想个数,但这时80灰度值处满足60灰度值的个数,也就是说60~80之间的灰度值个数全都变换到60则60位置恰好与黑线相交达到理想值,并且此时60~80之间的任意位置的值都是60处的值,因为60~80之间已经没有灰度值了。

红色部分是原图累积分布函数轮廓线

而理想的均衡化累积分布函数轮廓线应该是一条斜线

对于原图中灰度值为80的点,按图中的方法我们把它转换为灰度值为60

对每个灰度值,我们建立一个转换表,再对原图进行转换,就可以得到均衡化后的图了

我们来看看具体程序

复制代码
0 1
原创粉丝点击