OPencv 灰度直方图、直方图规定化

本文主要介绍了灰度直方图相关的处理,包括以下几个方面的内容:

  • 利用OpenCV计算图像的灰度直方图,并绘制直方图曲线
  • 直方图均衡化的原理及实现
  • 直方图规定化(匹配)的原理及实现

图像的灰度直方图

直方图规定化的实现


直方图规定化的实现可以分为一下三步:
- 计算原图像的累积直方图
- 计算规定直方图的累积直方图
- 计算两累积直方图的差值的绝对值
- 根据累积直方图差值建立灰度级的映射

void HistSpecify(const Mat& src, const Mat& ref, Mat& result)
	{
		Histogram1D hist1D;
		Mat src_hist = hist1D.getHistogram(src);
		Mat dst_hist = hist1D.getHistogram(ref);

		float src_cdf[256] = { 0 };
		float dst_cdf[256] = { 0 };

		// 直方图进行归一化处理
		src_hist /= (src.rows * src.cols);
		dst_hist /= (ref.rows * ref.cols);

		// 计算原始直方图和规定直方图的累积概率
		for (int i = 0; i < 256; i++)
		{
			if (i == 0)
			{
				src_cdf[i] = src_hist.at<float>(i);
				dst_cdf[i] = dst_hist.at<float>(i);
			}
			else
			{
				src_cdf[i] = src_cdf[i - 1] + src_hist.at<float>(i);
				dst_cdf[i] = dst_cdf[i - 1] + dst_hist.at<float>(i);
			}
		}

		// 累积概率的差值
		float diff_cdf[256][256];
		for (int i = 0; i < 256; i++)
			for (int j = 0; j < 256; j++)
				diff_cdf[i][j] = fabs(src_cdf[i] - dst_cdf[j]);

		// 构建灰度级映射表
		Mat lut(1, 256, CV_8U);
		for (int i = 0; i < 256; i++)
		{
			// 查找源灰度级为i的映射灰度
			// 和i的累积概率差值最小的规定化灰度
			float min = diff_cdf[i][0];
			int index = 0;
			for (int j = 1; j < 256; j++)
			{
				if (min > diff_cdf[i][j])
				{
					min = diff_cdf[i][j];
					index = j;
				}
			}
			lut.at<uchar>(i) = static_cast<uchar>(index);
		}

		// 应用查找表,做直方图规定化
		LUT(src, lut, result);
	}

 

总结

 图像的灰度直方图能够很直观的展示图像中灰度级的整体分布情况,对图像的后续处理有很好的指导作用。- 直方图的均衡化的是将一幅图像的直方图变平,使各个灰度级的趋于均匀分布,这样能够很好的增强图像对比度。直方图均衡化是一种自动化的变换,仅需要输入图像,就能够确定图像的变换函数。但是直方图的均衡化操作也有一定的确定,在均衡化的过程中对图像中的数据不加选择,这样有可能会增强图像的背景;变换后图像的灰度级减少,有可能造成某些细节的消失;会压缩图像直方图中的高峰,造成处理后图像对比度的不自然等。- 直方图规定化,也称为直方图匹配,经过规定化处理将原图像的直方图变换为特定形状的直方图(上面中的示例,就是将图像的直方图变换为另一幅图像的直方图)。它可以按照预先设定的某个形状来调整图像的直方图,运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状它可以按照预先设定的某个形状来调整图像的直方图。直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状,从而弥补直方图均衡化的一些缺点.

图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配) - Brook_icv - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值