基于直方图均衡化的图像轻微条纹检测(opencv实现)
背景:在做的一个camera模组项目,装机后发现图像有轻微条纹。
拿到不良camer模组后,在工装上抓取图片,能看到轻微条纹,如下,需要检测出该条纹。
在暗环境下,拉高AGain和曝光,表现如下:
暗环境下的图片处理后还是比较明显的
检测思路:在暗环境下测试,提高图片对比度,然后二值化处理,使条纹部分与其它区域区分开。
对于这种对比度较低的图像,适合使用直方图均衡化来增强图像对比度。处理后的图像如下:
均衡化处理后:
转为灰度图像后二值化并进行滤波:
而正常图像处理后如下:
图片差异还是很明显的,这样就很容易检测出来了。
基于opencv的处理代码:
cv::Mat src = cv::imread(strfilename);
if (src.empty())
{
// pritn error
}
cv::Mat processImg = src.clone();
// 直方图均衡处理
cv::Mat bgr[3];
cv::split(processImg, bgr);
for (int i = 0; i < 3; i++)
{
cv::equalizeHist(bgr[i], bgr[i]);
}
cv::merge(bgr, 3, processImg);
cv::cvtColor(processImg, processImg, cv::COLOR_BGR2GRAY);
// 阈值处理
cv::Mat threImg;
double thre = 200; // 按需要设置阈值
cv::threshold(processImg, threImg, thre, 255, cv::THRESH_BINARY);
// 中值滤波处理
cv::medianBlur(threImg, processImg, 7);
推荐文章
发表评论