OpenCv(C++)学习笔记七:光照不均处理

光照不均介绍

光照不均在图像处理中常常遇到,在工业检测中,一般要求平面上的灰度差不大于20(灰度区间:0-255)。正常情况下,通过光学(相机光源等设备)调整即可达到能检测要求。也有一些情况下光学调整无法满足或者对整体灰度差异变化敏感时需要考虑算法校正(光照不均)。
这也是浓淡补正方法中比较重要的一步。

光照不均算法处理原理

光照不均的处理方式就是把光照分布特征提取出来,再根据这个“分布”来逐点补偿原图灰度值即可。具体步骤如下:

  1. 使用模糊化 消除图像细节,一般用高斯模糊(比较费时),在核(Size)较大情况下效果差不多,不用纠结;
  2. 将模糊化后的图片作为阴影模式(光照分布特征),它近似代表了图片上的光照分布,用原图减去阴影模式得到几乎没有光照分布的图像(但是有之前模糊掉的细节);
  3. 对此时暗淡的图像进行归一化将灰度值拉伸到整个灰度区间(0-255);
  4. 进一步地,可以继续使用对比度增强等方法来调整图像效果;

代码实现

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
	// 读取灰度图像
	Mat src = imread("C:\\Users\\Administrator\\Desktop\\result.jpg", IMREAD_GRAYSCALE);
	if (src.empty()) {
		cout << "图像加载失败!" << endl;
		return -1;
	}
	// 使用高斯模糊估算阴影(光照)模式
	Mat shadow;
	GaussianBlur(src, shadow, Size(71, 71), 0);

	// 用原图减去阴影模式
	Mat result;
	subtract(src, shadow, result);

	// 归一化到0~255
	normalize(result, result, 0, 255, NORM_MINMAX);

	// 保存结果
	imwrite("C:\\Users\\Administrator\\Desktop\\resultNoShadow.jpg", result);

	// 图像增强(线性增强)
	Mat result_enhanced;
	result_enhanced = result * 2.0 - 0;

	imwrite("C:\\Users\\Administrator\\Desktop\\resultEnhanced.jpg", result_enhanced);

	return 0;
}

结论

原图消除光照阴影模式图对比度增强图
图片从左到右依次是原图(上一节OpenCV(C++)学习笔记六:抠图(ROI提取)中的结果图)、原图减去光影模式后的图像、增强后的最终图像。这里看起来效果似乎不是那么明显,但是处理后分割图像变得相对容易。原图本来是坐在车内用手机拍摄的,白斑实际是车窗玻璃上白云的干扰成像,如果有实际的光照不均图像效果会更好。效果也可以参考之前那篇matlab去除图片中的阴影(用高斯模糊估计阴影模式).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值