原理:
通过改变图像的直方图来改变图像中各像素的灰度值,即将直方图变换为均匀分布的模式,将像素个数多的灰度值进行展宽,像素个数少的灰度值进行归并,从而增大对比度,进而使得图像清晰。
作用:
用于增强动态范围偏小的图像的对比度,从而提升对目标对象检测的准确率。
用途:
人脸检测,医学影像图像,卫星遥感图像。
API:
equalizeHist(src, dst)
src // 输入的灰度图像
dst //输出
官方解释:
均衡化解释:
将变化前后的像素值分别记为r、s,对于r、s来说,必有:
记r、s的概率密度为、
,则有:
又由于s是服从均匀分布的,则对于其分布函数有:
对求导,有:
再结合归一化区间为[0, 1], 因此p(s) = 1,ds = p(r)dr,对其积分后有:
对其离散化即可得到如下公式
为对应像素值等于
的像素点的数量,n为总像素点数。
上图解释:
当k = 1时,对第二个级别的像素进行均衡化,对应相同像素值为1/7的像素点有1023个,将其加上790,除以总数4096得到对应的概率密度值为0.44,该值近似等于原像素值等级中的3/7,因此将像素值为1/7的像素点的像素值全部修改为3/7.
代码:
void QuickDemo::histogram_eq_demo(Mat& image)
{
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
Mat dst;
equalizeHist(gray, dst);
imshow("灰度图", gray);
imshow("直方图均衡化", dst);
}
结果: