参考链接:
https://www.cnblogs.com/qiqibaby/p/5321509.html
blog.163.com/sunhuan315@126/blog/static/38117190200992531224611/
一、基本介绍
图像均衡化得目的是为了提高图像的对比度。对于灰度分布比较集中的图(整体太暗或者太亮),可以起到均衡作用(有明有暗)。
看两张来自网上的灰度分布图,对比一下。
图1.1 图片链接(http://blog.csdn.net/xiajun07061225/article/details/6910129)
右上和右下就是灰度的分布变化结果。灰度分布直方图的横轴表示灰度等级,
纵轴表示该灰度等级下的像素点数。这个要理解好。
二、数学解释
0. 前提:常见的灰度像素范围是 [0, 255],在这里需要先归一化到 [0, 1]。
1. 假设原图的灰度为 r [归一化到0-1],直方图均衡化后的结果是 s [结果是0-1],直方图均衡化操作 T(),得到数学表达式:2. 当然不是任意的变换T都可以拿来做 直方图均衡化。
需要满足两个要求(直观上就可以理解)
#1 在 r 的区间上,T需要是一个单调递增函数。因为这可以保证,变换后的结果,像素之间的明暗关系不会错(原来比我暗的还比我暗,原来比我亮的还比我亮);
#2 s 的取值范围要和 r 相同。因为,要是超过了,255以上就存不了了,那就麻烦了。
所以,T的选择之一,就是“累加概率密度函数”。大家的选择,群众的眼睛。
解释一下:p是概率密度,这个公式可以参考《概率统计》
但是,总所周知,像素是离散的,怎么可以积分嗯呢?那就求和咯。于是,得
解释一下:P是每级灰度的概率(见下一个公式),这里的 k 就是 r
解释一下:n 是像素总和;nk 是第 k 级灰度范围捏的像素点数;
L 就是划分的级数;
综合以上各式,得
解释一下:(公式有问题)公式中的 k 就是 r ,
P的下角标r忽略之,P(r) 表示灰度为 r 的概率。
3. 算法的大致过程
#1 计算灰度图像的直方图分布,得到每个级别灰度的概率。
#2 根据公式计算每个像素的新值。
三、代码
OpenCV的实现
cv::equalizeHist(src, dst);
自己造轮子
https://www.cnblogs.com/qiqibaby/p/5321509.html