我有一张图片
有什么办法可以去除白点吗?请帮忙谢谢
编辑:
使用 gaussian 操作,然后使用 imagesc 显示后,得到以下输出,清楚地显示了明亮的红色斑点我如何摆脱它们
红色通道:
绿色通道:
蓝色通道:
编辑2:
使用 Gabor 滤波器进行缺陷检测
它的直方图:
如何自适应地计算其合适的阈值。
我有一张图片
有什么办法可以去除白点吗?请帮忙谢谢
编辑:
使用 gaussian 操作,然后使用 imagesc 显示后,得到以下输出,清楚地显示了明亮的红色斑点我如何摆脱它们
红色通道:
绿色通道:
蓝色通道:
编辑2:
使用 Gabor 滤波器进行缺陷检测
它的直方图:
如何自适应地计算其合适的阈值。
让我们假设眩光部分是图像中唯一的饱和区域。可以通过对强度进行阈值化来执行检测(Mathematica 中的代码):
saturated = Binarize[ColorConvert[img, "Grayscale"], .9]
然后我们只需要替换饱和遮罩周围的图像部分(放大遮罩由形态函数完成Dilation
)。在此示例中,使用纹理合成(使用函数Inpaint
)进行修复似乎效果很好,尽管我无法将其作为缺陷检测算法的输入进行测试:
Inpaint[img, Dilation[saturated, DiskMatrix[20]]]
这可能是一个简单的答案,但是您可以设置阈值吗?例如:
img = imread('daRNS.png');
imflat = img;
imflat(img>150) = 150;
imagesc(imflat)
结果是:
自适应地选择阈值显然会更好。例如,您可以查看图像直方图:
hist(double(img(:)),0:255)
并尝试在此基础上选择合适的阈值。
没有照明信息,这很困难。但是,如果图像中物体的形状是已知的,您可以设置一个白色眩光(高斯)的形状模板并做一个滑动窗口以找到可能的眩光检测(随后是来自相邻区域的颜色混合)。在感知上,我们使用着色从图像中推断出 3D 形状。如果阴影形状能够提供表面渐变,我们可以做一个滑动窗口并检查每个位置的眩光模板。
在精明的边缘检测之后: -
基本上,图像#1 和#2 之间的重叠(最大重叠区域)将是缺陷。
我的观点是,这是一个机器视觉问题,您应该控制照明,并很好地了解图像中非眩光像素亮度的最大亮度。缺陷检测通常是机器视觉问题而不是计算机视觉问题。
我们看到的照明结果是增加了光的镜面反射和漫反射(加上一些发射率,但在这里可以忽略不计)。
镜面反射成分是眩光,在像这个苹果这样有光泽的表面上,它远远超过漫反射(>10x)
这意味着如果您在此之前在漫反射表面上设置照明、增益和曝光,您可以确定没有任何东西会接近饱和。因此,使用固定阈值实际上是这里的首选解决方案,只要您已经用足够的数据证明“没有不包含眩光的像素”会高于阈值。本质上,您正在设置照明条件和相机参数,以便像素的分类变得微不足道,在这种情况下,通过一个简单的阈值执行,而不是通过一个更复杂的机器学习函数来执行它周围的像素。
我喜欢“vini”的方法,不需要显示 RGB 平面。只是一个简单的灰度阈值实际上可以在这里工作。
1-您设计照明条件,而不是环境
2-使分类工作变得非常琐碎(阈值化)
3-测量特征
4-与公差比较