【Opencv】光照不均匀图像处理-基于Retinex理论

原理介绍

近期在处理样本的过程中,在对样本的处理的过程中,总是收到样本拍摄过程中光照的影响,查阅了一些资料,决定采取Retinex的方式对图像光照信息进行处理。

图像机理

本次处理过程主要针对单通道的灰度图像(0-255),由二维元素组成,每个元素包含一个坐标 (x,y)和一个响应值 f ( x , y ) f(x,y) f(x,y),每个元素为数字图像的一个像素。本次处理的样本直接通过固定角度的相机采集而来,经一定处理之后得到待处理的样本图像,我们基于此图像进行一系列的处理。其大致流程如下图所示
光照示意图
得到的图像分量 F ( x , y ) F(x,y) F(x,y)与光照分量 I ( x , y ) I(x,y) I(x,y)和反射分量 R ( x , y ) R(x,y) R(x,y),他们满足公式: F ( x , y ) = I ( x , y ) ∗ R ( x , y ) F(x,y)=I(x,y)*R(x,y) F(x,y)=I(x,y)R(x,y)。其中反射分量反应了所照图像的本质,因此我们的目的是从图像分量中还原出反射分量,反映出图像的本质信息。

方法介绍

首先我们需要明确,我们所需要的信息即反射分量 R ( x , y ) R(x,y) R(x,y),我们可以将指数域转化为对数域,通过估计光照分量,计算得到反射分量。 l o g [ F ( x , y ) ] = l o g [ I ( x , y ) ] + l o g [ R ( x , y ) ] log[F(x,y)]=log[I(x,y)]+log[R(x,y)] log[F(x,y)]=log[I(x,y)]+log[R(x,y)]
而在估计光照分量时,我们考虑到光照分量属于低频分量,可以利用高斯大核模糊的方式得到估计的光照分量,再用估计出的光照分量转换至对数域最终得到反射分量。

功能实现

主要涉及两部分的内容

  • 高斯模糊估计光照分量
  • 对数域图像处理以及灰度变换还原图像

程序设计

void Get_Reflect(const Mat& src, Mat& dst, int sigma)
{
	Mat doubleImage, gaussianImage, logIImage, logGImage, logRImage,End_My, End_My_log, dst_My;
	//转换范围,所有图像元素增加1.0保证log操作正常,防止溢出
	src.convertTo(doubleImage, CV_64FC1, 1.0, 1.0);
	
	//高斯模糊,当size为零时将通过sigma自动进行计算
	GaussianBlur(doubleImage, gaussianImage, Size(0, 0), sigma);
	
	//OpenCV的log函数可以计算出对数值。logIImage和logGImage就是对数计算的结果。
	log(doubleImage, logIImage);
	log(gaussianImage, logGImage);
	
	logRImage = logIImage - logGImage;
	
	normalize(logRImage, dst, 0, 255, NORM_MINMAX, CV_8UC1);
}

dst即为需要的反射分量图像

结果展示

原图像:
原图像
提取后图像
提取后的反射分量

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 光照均匀是指图像中的光源分布不均匀,导致图像的亮度在不同区域存在差异。光照均匀常出现在拍照、摄影等场景中,会影响图像的质量和视觉效果。 在opencv中,我们可以采用以下方法来处理光照均匀的问题: 1. 直方图均衡化:直方图均衡化是一种常见的图像增强技术,通过将图像的像素值映射到更平均的直方图上来均衡化图像的亮度。在opencv中,可以使用`cv2.equalizeHist()`函数来实现直方图均衡化。 2. 伽马校正:伽马校正是一种通过改变图像的亮度曲线来调整图像亮度的方法。在opencv中,可以使用`cv2.LUT()`函数来实现伽马校正。 3. 颜色校正:光照均匀问题往往伴随着色彩偏差,可以通过颜色校正来调整图像的颜色分布。我们可以使用`cv2.xphoto.createSimpleWB()`函数来实现简单的白平衡操作,进一步提升图像的色彩质量。 4. 图像分割和局部增强:可以采用图像分割的方法将图像分成多个区域,然后对每个区域进行局部增强处理,使得每个区域的光照均匀。在opencv中,可以使用基于图像梯度的分割算法,例如`cv2.grabCut()`和`cv2.watershed()`。 通过组合以上方法,我们可以在opencv中实现光照均匀图像处理。根据具体情况选择合适的方法,并根据需求调整参数,可以得到更好的处理效果。 ### 回答2: 光照均匀是指图像中不同区域的光照强度不一致。处理光照均匀的方法有很多种,下面介绍一个基于OpenCV的方法。 首先,我们可以使用OpenCV的cv2.imread函数将图像读入,并将其转换为灰度图像,以便于后续处理。接下来,可以使用OpenCV的cv2.medianBlur函数对图像进行中值滤波,以去除一些图像噪声。 然后,我们可以使用OpenCV的cv2.threshold函数将图像中的亮度区分为背景和前景。可以尝试不同的阈值来获取最佳的效果。阈值化后,可以使用OpenCV的cv2.distanceTransform函数计算图像中每个像素到最近背景像素的距离。 接着,我们可以对距离图像进行归一化,使所有像素值都在0到255之间。然后,我们可以对归一化的距离图像进行高斯滤波,以减少噪声。 最后,我们可以使用OpenCV的cv2.multiply函数将原始图像与归一化的距离图像相乘,以增强图像的低灰度区域,并使光照更加均匀。 最后,我们可以使用OpenCV的cv2.imshow函数显示处理后的图像,并使用cv2.waitKey函数等待用户按键以关闭窗口。 通过上述步骤,我们可以使用OpenCV对图像的光照均匀进行处理,使图像的光照更加均匀,细节更加清晰。当然,具体的处理方法可能因图像的不同而有所差异,可以根据具体情况进行调整和优化。 ### 回答3: 在图像处理中,光照均匀是指图像中不同区域的光照强度不同,导致图像中部分区域的明暗度明显不同。光照均匀的问题常常会导致图像细节的丢失或者重要信息的隐藏,因此需要进行光照均匀化处理。 OpenCV是一种经常被使用的图像处理库,提供了丰富的函数和工具来处理光照均匀问题。其中常用的方法是基于图像的直方图来进行调整。 一种简单的方法是使用直方图均衡化。该方法可以将图像的直方图调整为均匀分布,从而提高图像整体的对比度,使得光照均匀的问题得到一定程度的改善。OpenCV中提供了equalizeHist函数来实现直方图均衡化操作。 另外,OpenCV还提供了一些更加高级的光照均匀化方法,如adaptiveEqualizeHist函数。该方法在直方图均衡化的基础上,根据图像的局部特征进行自适应调整,从而更好地保留图像的细节信息。 除了直方图均衡化,还可以使用其他的方法来解决光照均匀问题,比如基于图像分割的方法、利用光照模型进行估计和调整等。具体的方法选择可以根据实际情况和需求来决定。 总之,OpenCV提供的丰富功能和方法可以帮助我们有效地处理光照均匀的问题。通过选择合适的方法和参数,我们可以实现对图像光照均匀化的需求,从而改善图像的质量和视觉效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱神的箭呵呵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值