【OpenCV基础】第二十一课:直方图均衡化

图像直方图,直方图均衡化,cv::equalizeHist

Posted by x-jeff on July 19, 2021

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.图像直方图

假设有图像数据$8\times 8$,像素值范围0~14共15个灰度等级:

统计得到各个等级出现次数及直方图:

2.直方图均衡化

直方图均衡化(Histogram Equalization)是一种增强图像对比度的方法。其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。均衡化前后的图像直方图:

举例说明下直方图均衡化的过程,假设现在有一个8位的$8\times 8$灰度图像:

该灰度图像的灰度值出现次数如下表所示,为了简化表格,出现次数为0的值已经被省略:

累积分布函数(cdf)如下所示,与上一表格类似,为了简化,累积分布函数值为0的灰度值已经被省略:

如表格所示,灰度值最小值为52,最大值为154。通常,直方图均衡化算式如下:

\[h(v)=round \left( \frac{cdf(v) - cdf_{min}}{cdf_{max}-cdf_{min}} \times (L-1) \right)\]

累积分布函数最小值$cdf_{min}$在本例中为1,最大值$cdf_{max}$在本例中为64,而$L$则是灰度级数(如本例中,图像为8位深度,则灰度级数共有$2^8=256$级数,这也是最常见的灰度级数)。则对于本例的直方图均衡化算式为:

\[h(v)=round \left( \frac{cdf(v)-1}{63} \times 255 \right)\]

例如,灰度为78的像素的累积分布函数为46,均衡化后,灰度值变化为:

\[h(78)=round \left( \frac{46-1}{63} \times 255 \right) = round (0.714286 \times 255)=182\]

直方图均衡化后,图像的灰度值变化如下表所示:

全尺寸图像效果:

3.API

1
void equalizeHist( InputArray src, OutputArray dst );

⚠️输入图像必须是8位的单通道图像。

4.代码地址

  1. 直方图均衡化

5.参考资料

  1. 直方图均衡化(wiki百科)