如何消除图像中的眩光和亮度(图像预处理)?


19

我有一张图片

在此处输入图片说明

有什么办法可以消除亮点?请帮忙谢谢

编辑:

使用高斯运算后,再使用imagesc显示后,将获得以下输出,该输出清楚地显示了亮红色的斑点如何去除它们

在此处输入图片说明

红色频道:

在此处输入图片说明

绿色通道:

在此处输入图片说明

蓝色频道:

在此处输入图片说明

编辑2:

使用Gabor滤波器进行缺陷检测

在此处输入图片说明

其直方图:

在此处输入图片说明

如何自适应地计算其适当的阈值?


灯光的设置是否已知?
2012年

其实没有,有没有办法通过过滤等将这些斑点去除?
vini 2012年

4
通常,这是一个不适的问题。您有太多未知数,将不得不诉诸基于启发式的解决方案。祝你好运。
2012年

Answers:


19

假设眩光部分是图像中唯一的饱和区域。可以通过设置强度阈值(Mathematica中的代码)来执行检测:

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

在此处输入图片说明

然后,我们只需要替换饱和蒙版周围的图像部分即可(通过形态函数完成对蒙版的放大Dilation)。Inpaint尽管无法将它作为缺陷检测算法的输入进行测试,但使用纹理合成(使用函数)进行的修复似乎在此示例中运行良好:

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

在此处输入图片说明


在matlab中有inpaint方法吗?
vini 2012年

抱歉,我不知道答案。
马提亚斯·奥迪西奥

该缺陷检测完人补绘已被实现为没有内置的功能的MATLAB
VINI

1
我很高兴答案能解决问题。至于在matlab中进行修复,那可能很适合一个关于SO的独立问题。请参阅stackoverflow.com/search?q=matlab+inpainting作为开始。
马提亚斯·奥迪西奥

2
图像修复可以用什么就是俗称的“泊松图像融合”教程来完成,Matlab代码和例子在这里
莫里斯2012年

4

这可能是一个简单的答案,但是您可以阈值吗?例如:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

结果是:

展平图像

自适应地选择阈值显然会更好。例如,您可以查看图像直方图:

hist(double(img(:)),0:255)

直方图

并尝试据此选择合适的阈值。


请检查我的编辑2
vini 2012年

@vini尝试看一下解释90%信号的截止点
tdc 2012年

我可以设定阈值,但我的最终目标是缺陷检测..如果设定阈值,这将无济于事
vini 2012年

3
但是您的问题是“如何消除图像的眩光和亮度(图像预处理)?” 而不是如何检测缺陷,这是另一个(更困难的)问题。下面的@mrkulk似乎也为该问题提供了几乎完整的答案。
tdc 2012年

是的,我的问题是我现在如何检测缺陷,但是这种眩光会阻碍结果的产生
vini 2012年

2

在此处输入图片说明没有照明信息,就很难。但是,如果已知图像中对象的形状,则可以设置白色眩光(高斯)的形状模板,并创建滑动窗口以找到可能的眩光检测(随后来自相邻区域的颜色混合)。从视觉上讲,我们使用阴影从图像中推断出3D形状。如果阴影产生的形状能够提供表面渐变,我们可以做一个滑动窗口并在每个位置检查眩光模板。

精锐边缘检测后:-

在此处输入图片说明

基本上,图像#1和#2之间的重叠(最大重叠面积)将是缺陷。


描述正在尝试做的事情-我正在使用gabor滤镜,该滤镜主要用于纹理分割以发现水果中的缺陷,但是眩光带来了一个问题,因为该滤镜同时显示了两个白点,这也是我不理想的潜在缺陷
vini 2012年

您是否尝试过仅从RGB或YUV中获取单个通道并对其进行操作?
mrkulk 2012年

最耀眼的图像是绿色通道中的图像。我如何操作和校正它?
vini 2012年

我尝试以0.5的阈值拍摄边缘图像(canny)。不出所料,我没有在图像中看到眩光。这应该为不包含强光的区域提供强大的先验。
mrkulk 2012年

它对我产生无眩光图像有什么帮助?
vini 2012年

0

我的观点是,这是一个机器视觉问题,您应该在其中控制照明并充分了解图像中非眩光像素亮度的最大亮度。缺陷检测通常是机器视觉问题,而不是计算机视觉问题。

照明的结果是增加了镜面反射和漫反射光(加上一些发射率,但在这里可以忽略不计)。

镜面反射是眩光,像苹果一样在发光表面上,它比漫反射(> 10x)还要多

这意味着,如果您在此之前在散射表面上设置照明,增益和曝光,则可以确保没有任何东西甚至接近饱和。因此,使用固定的阈值实际上是这里的首选解决方案,只要您已证明有足够的数据“没有不包含眩光的像素”会高于阈值。本质上,您是在设置照明条件和摄像头参数,以使像素分类变得微不足道,在这种情况下,像素阈值仅由简单的阈值执行,而不是由机器学习到的周围像素的功能更为复杂。

我喜欢“ vini”的方法,不需要显示RGB平面。一个简单的灰度阈值实际上将在这里起作用。

1-您设计照明条件,而不是环境

2-使分类工作非常琐碎(阈值)

3-测量功能

4-比较公差


0

首先转换为实验室色彩空间mapminmax,然后使用第一个亮度通道。这样可以减少颜色问题。然后在最亮的80%像素上使用一些阈值。检查并测试直方图中的下降,最佳阈值在下降的底部附近。如果该区域没有本地分钟,则您的图像可能反射得很少……马丁

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.