直方图的学习(2)
直方图的学习(2)——灰度直方图均衡化
摘要:直方图均衡化主要应用于灰度的变换,均匀概率密度的图像,扩展像素的取值动态范围,是图像增强处理的重要方法。
直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的方法,经过直方图均衡化的图像对二值化阈值选取十分有
利。简单地说,直方图均衡化就是把一个图中密集的区域均衡到其他区域。
关键字:cvEqualizeHist
函数功能:直方图均衡化,该函数能归一化图像亮度和增强对比度
函数原型:
/* equalizes histogram of 8-bit single-channel image */
CVAPI(void) cvEqualizeHist( const CvArr* src, CvArr* dst );
函数说明:
该函数采用如下法则对输入图像进行直方图均衡化:
其方法步骤和部分代码如下:
方法步骤为: 画出源图像和目标图像→计算直方图→绘制srcImg直方图→绘制dstImg直方图
部分代码:
//画源图像和目标图像
equalizeHist(srcImg, dstImg);
//计算直方图
calcHist(&srcImg, nimages, &channels, mask, histImg_src, dims, &histSize, ranges);//srcImg直方图
calcHist(&dstImg, nimages, &channels, mask, histImg_dst, dims, &histSize, ranges);//dstImg直方图
//计算出的直方图中的最小值和最大值
minMaxLoc(histImg_src, &minValue, &maxValue);
//绘制dstImg直方图
for (int i = 0; i < histSize; i++)//遍历histImg
{
float binValue = histImg_src.at<float>(i);//得到histImg中每一分组的值
cout << "i: " << i << " ,binValue: " << binValue << endl;
float realValue = (binValue / maxValue)*height;//归一化数据,缩放到图像的height之内
cout << "i: " << i << " ,realValue: " << realValue << endl;
//用直线方法绘制直方图
line(histShow_src, Point(i, height - 1), Point(i, height - 1 - realValue), Scalar(255, 0, 0), 1);
}
运行结果如下:
注:图一是原图,第二张图由于运行结果中图片太大,右边的截图不完整。
参考文献: cvEqualizeHist-百度百科