OpenCV - 均衡直方图、Log变换、伽马变换3种图像增强方法

所谓图像增强就是把对比度低,看不清楚的图片处理成为对比度高,比较清楚的图片。

下面有三种增强方式,其中log和gamma变换是要自己实现的,效果的好与坏是需要自己调整参数的!!!!


1、均衡直方图

上图中图像灰度集中在100-200的区域内,显得灰蒙蒙的,在在经过均衡直方图的处理后,图像灰度均匀分布在0-255的区域内,变得清晰很多。均衡直方图在opencv种直接有接口,效果如下:

equalizeHist(input, output);

 

void equalHist(Mat& m_img)
{
	Mat m_rgb[3];
	split(m_img, m_rgb);
	for (int i = 0; i < 3; i++)
	{
		equalizeHist(m_rgb[i], m_rgb[i]);
		
	}
	merge(m_rgb, 3, m_img);
}

2、log变换

输入值为r,v和c都是参数,可以看出随着v值的增大,低灰度的地方被扩展,细节突出,高灰度的部分被压缩,细节被隐藏。应用在rgb图像中,需要将3通道图像分开,分别变换然后再融合起来。

void logTrans(Mat& m_img, int n_v, int n_c)
{
	Mat m_imgLog(m_img.size(), CV_32FC3);
	for (int i = 0; i < m_img.rows; i++)
		for (int j = 0; j < m_img.cols; j++)
		{
			m_imgLog.at<Vec3f>(i, j)[0] = n_c * log(1 + n_v * m_img.at<Vec3b>(i, j)[0]) / log(n_v + 1);
			m_imgLog.at<Vec3f>(i, j)[1] = n_c * log(1 + n_v * m_img.at<Vec3b>(i, j)[1]) / log(n_v + 1);
			m_imgLog.at<Vec3f>(i, j)[2] = n_c * log(1 + n_v * m_img.at<Vec3b>(i, j)[2]) / log(n_v + 1);
		}
	//归一化到0-255
	normalize(m_imgLog, m_imgLog, 0, 255, CV_MINMAX);
	//转换成8bit图像显示
	convertScaleAbs(m_imgLog, m_img);
}

3、gamma变换

gamma变换和log变换很像,c和gamma为参数,r为输入值,gamma值很小的时候和log变换基本相同,gamma值很大的时候就和log变换效果相反了。

void gammaTrans(Mat& m_img, double gamma, int n_c)
{
	Mat m_imgGamma(m_img.size(), CV_32FC3);
	for (int i = 0; i < m_img.rows; i++)
		for (int j = 0; j < m_img.cols; j++)
		{
			m_imgGamma.at<Vec3f>(i, j)[0] = n_c * pow(m_img.at<Vec3b>(i, j)[0], gamma);
			m_imgGamma.at<Vec3f>(i, j)[1] = n_c * pow(m_img.at<Vec3b>(i, j)[1], gamma);
			m_imgGamma.at<Vec3f>(i, j)[2] = n_c * pow(m_img.at<Vec3b>(i, j)[2], gamma);
		}
	normalize(m_imgGamma, m_imgGamma, 0, 255, CV_MINMAX);
	convertScaleAbs(m_imgGamma, m_img);
}

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山渺渺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值