参考文章:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.html
图像的直方图
图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。
直方图均衡化
直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。说得更清楚一些,以上面的直方图为例,可以看到像素主要集中在中间的一些强度值上,直方图均衡化要做的就是 拉伸 这个范围.。见下面左图:绿wwdyf出了 少有像素分布其上的 强度值。对其应用均衡化后,得到了中间图所示的直方图。实现原理
均衡化指的是把一个分布 (给定的直方图) 映射 到另一个分布 (一个更宽更统一的强度值分布), 所以强度值分布会在整个范围内展开.要想实现均衡化的效果, 映射函数应该是一个 累积分布函数 (cdf) (更多细节, 参考学习OpenCV). 对于直方图 H(i), 它的 累积分布 H^{’}(i) 是:要使用其作为映射函数, 我们必须对最大值为255 (或者用图像的最大强度值) 的累积分布 H^{’}(i) 进行归一化. 同上例, 累积分布函数为:
最后, 我们使用一个简单的映射过程来获得均衡化后像素的强度值:
API说明
equalizeHist (InputArray src, // 输入图像,必须是 8-bit 单通道图像
OutputArray dst // 输出图像
)
完整代码示例
int main(){ Mat src, dst, gray; //加载源图像src = imread("E:/Image/wz.jpg");if (src.empty()){cout << "could not load image..." << endl;return 0;}imshow("src image", src); //转为灰度图像cvtColor(src, gray, CV_BGR2GRAY);imshow("gray", gray); //应用直方图均衡化equalizeHist(gray, dst);imshow("dst", dst);waitKey(0);return 0;}运行结果: