数字图像处理与机器视觉-4-直方图均衡化

上一篇:数字图像处理与机器视觉-3-图像灰度变换(2)

以前做项目的时候碰到直方图均衡化,都是直接调用opencv里面的函数。但是主要是为了实现功能,再检查功能实现后图像的变化就完事了。

之前的微积分和概率论都忘的一干二净,所以在啃直方图均衡化这一节的时候略费劲。其实MATLAB自带直方图均衡化函数histeq,如果不关系过程的话,几行命令就可以实现并观看效果。为了加深理解,打算把推导过程走一遍。

必备技能!概率论和微积分,如果微积分和概率论基础不扎实的话建议简单复习下(下载地址)

为了推导直方图均衡化函数,先了解下什么是直方图均衡化:

直方图均衡化又叫灰度均衡化,直方图前面介绍过,来回忆一样,就是每一灰度级所出现的像素点的频率或次数。均衡化,我根据字面理解就是通过某种处理(灰度映射关系),将本来在每一灰度级分布不均匀的像素点,尽可能均匀地分布。比如某些比较暗的图片,通过直方图均衡化,使得图像具有较高的对比度和较大的动态范围。


参考图片来理解推导过程(国外一篇博文 histogram equalization)



假设原始灰度概率函数为p(i)(用x,y感觉怪别扭的),均衡化之后的概率密度函数为q(j),对于任意一个原始图中的灰度值i,有对应的函数j = f(i);

转换前后像素个数保持不变:p(i)di = q(j)dj;

由于灰度直方图被均衡化,所以,q(j) = 1;

有p(i)di = dj;两边积分


j = f(i) = q(i) - q(0);

j = f(i) = Q(i);

这个就很熟悉了, Q(i)为累计分布函数.所以,直方图均衡化,实际上是求其灰度累计分布函数。搞清楚这个过程后就发现其实用到的微积分和概率论知识都很基础,稍微复习下就OK了。这也方便后续自己编程实现直方图均衡化这个功能。看一下直方图均衡化前后的对比:

数字图像处理与机器视觉-4-直方图均衡化_第1张图片

再使用MATLAB自带直方图均衡化函数histeq,简单地测试下效果:

数字图像处理与机器视觉-4-直方图均衡化_第2张图片
然后手动修改图片亮度,对比度后,直方图均衡化效果:

数字图像处理与机器视觉-4-直方图均衡化_第3张图片

===2017-1-17更新===

直方图规定化(匹配)

直方图规定化就是给定一幅参考图S,按照S的直方图来重新映射原图的像素点,这就大概就是为什么又叫做直方图匹配的原因。

直方图规定化的好处就是,人为指定一幅我们想要的直方图分布曲线,然后将待规定化的图片按照我们想要的分布曲线来重新映射,相对于直方图均衡化,自由度更高,得到我们想要的结果。

具体推导过程可以参考:灰度图像直方图的规定化的原理及代码实现和MATLAB实现直方图规定化,这两篇文章结合起来看,原理就差不多了。

第一篇博文着重讲了规定化的原理,步骤总结的很精炼:

1.分别计算原图像与目标图像的累计概率分布;
2.分别对原图像与目标图像进行直方图均衡化操作;
3.利用组映射关系使原图像直方图按照规定进行变换;

映射图一定要自己过一遍,这样理解更深刻

数字图像处理与机器视觉-4-直方图均衡化_第4张图片

然后两篇博文分别介绍了C++和MATLAB编程实现,放一下具体效果图:

数字图像处理与机器视觉-4-直方图均衡化_第5张图片

下一篇:数字图像处理与机器视觉-5-图像几何变换(1)

你可能感兴趣的:(图像处理,图像处理,机器视觉,直方图均衡化,直方图规定化,匹配)