图像处理中的直方图应用(通过直方图均衡化增强图像对比度)

本文深入探讨图像直方图均衡化原理及其在OpenCV中的实现,阐述了直方图均衡化如何改善图像对比度,并通过代码示例展示了其应用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin(直方图中的柱子)中。bin中的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。无论如何,直方图获得的是数据分布的统计图。

灰度图像的直方图的性质:

(1) 直方图是一幅图像中各像素灰度出现频次的统计结果,它只反映图像中不同灰度值出现的次数,而没反映某一灰度所在的位置。也就是说,它只包含了该图像的某一灰度像素出现的概率,而丢失了其所在的位置信息。

(2) 任一幅图像,都有惟一确定一幅与它对应的直方图,但不同的图像可能有相同的直方图。即图像与直方图之间是多对一的映射关系。

(3) 由于直方图是对具有相同灰度值的像素统计得到的,因此,一幅图像各子区的直方图之和就等于该图像全图的直方图。

通过直方图均衡化进行图像增强

       直方图均衡化是灰度变换的一个重要应用,广泛应用在图像增强处理中,它是以累计分布函数变换为基础的直方图修正法,可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素的取值动态范围。许多图像的灰度值是非均匀分布的,其中灰度值集中在一个小区间内的图像是很常见的,直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的方法,经过直方图均衡化的图像对二值化阈值选取十分有利。一般来说,直方图修正能提高图像的主观质量,因此在处理艺术图像时非常有用。直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。

OpenCV中提供了现成的直方图均衡化函数:void cvEqualizeHist( const CvArr* src, CvArr* dst );

实现如下:

  IplImage * pImage = cvLoadImage("长虹大厦20120810.jpg", 1);//原始图像
	IplImage * pMergeImage = cvCreateImage(cvGetSize(pImage),pImage->depth,pImage->nChannels);//处理后的图像
	IplImage * pImageChannel[4] = {0,0,0,0};//分别保存4个通道的灰度图像
	//创建各个灰度图像
	for(int i=0; i<pImage->nChannels; i++)
		pImageChannel[i] = cvCreateImage(cvGetSize(pImage),pImage->depth,1);
	//分割通道
	cvSplit(pImage,pImageChannel[0],pImageChannel[1],pImageChannel[2],pImageChannel[3]);
	//对每个信道分别做直方图均衡化
	for(i=0; i<pImage->nChannels; i++)
		cvEqualizeHist(pImageChannel[i],pImageChannel[i]);
	//合并通道
	cvMerge(pImageChannel[0],pImageChannel[1],pImageChannel[2],pImageChannel[3],pMergeImage);


	cvNamedWindow("原始图像",1);
	cvNamedWindow("处理后的图像",1);
	cvShowImage("原始图像",pImage);
	cvShowImage("处理后的图像",pMergeImage);

处理前:

处理前图像的直方图:

处理后:

处理后图像的直方图:

 

可以看到处理后图像的直方图分布扩散了,说明色彩分布更宽广了,不集中在一起了。

 

源码下载:

http://download.youkuaiyun.com/detail/masikkk/4499482

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值