《OpenCV图像处理》——2.7 直方图

本节书摘来自华章计算机《OpenCV图像处理》一书中的第2章,第2.7节,作者:[西]葛罗瑞亚·布埃诺·加西亚(Gloria Bueno García)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.7 直方图

一旦图像被定义为一种数据类型,并能够访问该图像的灰度值(即像素),我们可能想得到一个不同灰度的概率密度函数,称为该图像的直方图(histogram)。图像直方图表示图像中各种灰度出现的频率。可以对直方图建模,使图像可以改变其对比度,被称为直方图均衡化(histogram equalization)。直方图建模对于以对比度变化的方式进行图像增强是一种非常有用的技术。直方图均衡化允许低对比度的图像区域获取更高的对比度。图2-5向您展示了一幅均衡化后的图像及其直方图的一个示例:
screenshot

在OpenCV中,使用函数void calcHist可以计算图像直方图,使用函数void equalizeHist可进行直方图均衡化。
图像直方图的计算用十个参数来定义:
void calcHist(const Mat images, int nimages, const int channels, InputArray mask, OutputArray hist, int dims, const int histSize, const f?loat* ranges, bool uniform=true, and bool accumulate=false).
const Mat* images:第一个参数是集合中第一幅图像的地址,可用于处理一批图像。
int nimages:第二个参数是原图像的数量。
const int* channels:第三个参数是用来计算直方图的通道列表,通道数从0到2。
InputArray mask:这个参数是一个可选项mask,用来指示直方图中图像像素的个数。
OutputArray hist:第五个参数是输出直方图。
int dims:这个参数用于指示直方图的维数。
const int* histSize:这个参数是每一维度上直方图大小的数组。
const f?loat** ranges:这个参数是每一维度上直方图bin边界维度数组的数组。
bool uniform=true:默认情况下,该布尔值为true。表示直方图是均匀分布的。
bool accumulate=false:默认情况下,Boolean值为false。表示直方图是不累加的。
直方图均衡化只需要两个参数:void equalizeHist(InputArray src, OutputArray dst)。其中,第一个参数是输入图像,第二个参数是输出直方图均衡化后的图像。
还可以计算多幅输入图像的直方图,使您可以比较这些图像直方图和计算多幅图像的联合直方图。可以使用函数void compareHist(InputArray histImage1, InputArray histImage2, method)进行两个图像直方图histImage1和histImage2的比较。方法metric用于计算两个直方图之间的匹配情况。在OpenCV中实现了四个metric方法:correlation (CV_COMP_CORREL)、chi-square (CV_COMP_CHISQR),intersection distance或者minimum distance (CV_COMP_INTERSECT)和Bhattacharyya distance (CV_COMP_BHATTACHARYYA)。
也可以计算同一幅彩色图像的多个通道的直方图,因为有第三个参数使其成为
可能。
下面的小节将向您展示两个示例的代码,用于彩色直方图计算(ColourImage-EqualizeHist)和比较(ColourImageComparison)。在ColourImageEqualizeHist示例中,还说明了如何计算直方图均衡化以及有两个通道的二维直方图,也即ColourImage-Comparison示例中的色度(H)和饱和度(S)。
2.7.1 ColourImageEqualizeHist示例代码
下面的ColourImageEqualizeHist示例向您展示如何均衡化一幅彩色图像以及同时显示每个通道的直方图。使用函数histogramcalculation(InputArray Imagesrc, OutputArray histoImage)计算RGB图像中每个颜色通道的直方图。为此,将彩色图像划分成R、G和B通道。直方图均衡化还可以应用于每个通道,进而将它们合并形成均衡化的彩色图像:

screenshot
screenshot
screenshot
screenshot
screenshot
screenshot

该示例创建了如下四个窗口:
原图像:显示在下图中的左上角。
均衡化的彩色图像:显示在下图中的右上角。
三个通道的直方图:这里对于原图像,R=Read、G=Green和B=Blue,显示在下图中的左下角。
均衡化图像的RGB通道的直方图:显示在下图的右下角。该图向您展示,在均衡化处理中如何对R、G和B最高频的强度值进行拉伸。
图2-6展示了该算法的结果:
screenshot

2.7.2 ColourImageComparison示例代码
下面的ColourImageComparison示例向您展示,如何计算由同一幅彩色图像的两个通道构成一个二维直方图。通过直方图匹配,该示例代码还执行了一个原图像与均衡化后的图像之间的比较。前面已经介绍过,用于匹配度量的方法有四种:Correlation、Chi-Square、Minimum distance和Bhattacharyya distance。使用函数histogram2Dcalculation(InputArray Imagesrc, OutputArray histo2D)进行H和S颜色通道的二维直方图计算。为了进行直方图的比较,需要对RGB图像计算归一化的一维直方图。为了比较直方图,已经对这些直方图进行了归一化处理,用到的函数是histogramRGcal culation(InputArray Imagesrc, OutputArray histo)。

screenshot
screenshot
screenshot
screenshot
screenshot
screenshot

该示例创建了四个窗口:原图像、均衡化的彩色图像、原始图像的H通道和S通道的二维直方图以及均衡化图像的H通道和S通道的二维直方图。算法还显示了由原始的RGB图像直方图与其自身以及均衡化后的RGB图像比较得到的四个数值匹配参数。对于correlation方法和intersection方法,度量值越高,匹配越精确。对于chi-square方法和Bhattacharyya distance方法,结果越小,匹配越好。图2-7展示了ColourImageComparison算法的输出:

screenshot

最后,可以参考第3章以及涵盖这一广泛主题基本方面的一些示例,如通过直方图模型实现图像增强等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值