前言
在图像直方图详解中详细讲解了图像直方图,这章来讲解一下直方图的均衡化。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
先看下图未经过均衡化的图像,可以看到像素似乎聚集灰度值范围的中间。
直方图均衡化所做的就是扩大这个范围。在应用均衡化后
一、原理
均衡化意味着将一个分布(给定的直方图)映射到另一个分布(灰度值更宽、更均匀的分布),因此灰度值分布在整个范围内。
为了达到均衡效果,重映射应该是累积分布。对于直方图H(i),其累积分布H ’ (i)为:
为了使用它作为重映射函数,我们必须对H ’ (i)进行归一化,使其最大值为255(或图像灰度的最大值)。累积分布计算结果是:
最后,我们使用一个简单的重映射过程来获得均衡后图像的灰度值:
opencv 函数支持equalizeHist()
函数原型:
CV_EXPORTS_W void equalizeHist( InputArray src, OutputArray dst );
参数说明:
src:源8位单通道图像。
dst:目标图像的大小和类型与src相同
代码示例:
cv::Mat image = cv::imread("D:\\QtProject\\Opencv_Example\\Hist\\Hist.png", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
cout << "Cannot load image" << endl;
return;
}
imshow("image",image);
Mat dst;
equalizeHist(image, dst);
imshow( "Equalized", dst);