直方图的学习(2)

                                                                          直方图的学习(2)——灰度直方图均衡化


       摘要直方图均衡化主要应用于灰度的变换,均匀概率密度的图像,扩展像素的取值动态范围,是图像增强处理的重要方法。

直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的方法,经过直方图均衡化的图像对二值化阈值选取十分有

利。简单地说,直方图均衡化就是把一个图中密集的区域均衡到其他区域。


关键字:cvEqualizeHist

函数功能:直方图均衡化,该函数能归一化图像亮度和增强对比度

函数原型:

/* equalizes histogram of 8-bit single-channel image */

CVAPI(void)  cvEqualizeHistconst CvArrsrcCvArrdst );

函数说明:

该函数采用如下法则对输入图像进行直方图均衡化:

src输入的 8-比特 单信道图像
dst输出的图像与输入图像大小与数据类型相同
函数 cvEqualizeHist 采用如下法则对输入图像进行直方图均衡化
1:计算输入图像的直方图 H
2:直方图归一化,因此直方块和为255
3:计算直方图积分
4:采用H'作为查询表:dst(x,y)=H'(src(x,y))进行图像变换

   

      其方法步骤和部分代码如下:


      方法步骤为:   画出源图像和目标图像→计算直方图→绘制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);
}



运行结果如下:



直方图的学习(2)



直方图的学习(2)




             注:图一是原图,第二张图由于运行结果中图片太大,右边的截图不完整。



             参考文献: cvEqualizeHist-百度百科