灰度图像中有缺陷区域的分割,对阴影不变。

3
我希望使用MATLAB/Python-OpenCV来分割图像中的缺陷区域。
原始图像:

img1

有缺陷:

http://imgur.com/fyDkpcZ

第三个矩形上存在缺陷。

我尝试过的方法:

  • 使用LoG滤波器/阈值灰度提取矩形的边界(但由于阴影而没有帮助太多)
  • 跟踪它们的边界
  • 获取质心
  • 找到边界点与质心之间的距离,关注角度(增加0.5度以获得更好的分辨率)
  • 找到一个好的模板矩形并保存它
  • 找到模板矩形和候选矩形之间的差异
  • 基于该结果,我可以找到有问题的区域,但是当我尝试提高算法的灵敏度时,误报率会增加。

我需要使边界更精确、更不嘈杂。由于阴影的存在,矩形的边缘可能变化很大。

如何使矩形的边缘对阴影更强壮?除了我迄今为止所尝试的方法,还能做什么?

感谢您的帮助!


请提供您的结果以及您遇到的一些问题。您提供的缺陷具有非常高的对比度。只需应用阈值即可简单地进行分割。 - Piglet
我无法上传更多的示例,因为stackoverflow不允许我这样做。这是另一个对比度较低的示例http://imgur.com/CwUXhzZqw。我无法检测到它。还有一些http://imgur.com/RNzrMe6,http://imgur.com/fwEgKnI。 - dumbled0ge
1个回答

1
拉普拉斯高斯滤波器是一个零均值操作。如果您将其用于中心在127的强度上的8位图像,则会返回以零为中心的图像数据。您必须使用任意值的过滤器偏差,通常为容器的最大值的一半(因此,在这个8位示例中,偏差将为127)。您还可以通过将结果像素乘以常数来调整滤波器的强度,这使得对数滤波器的效果更加明显。
对数滤波器将为非常强的转换创建一个白色和一个黑色边缘。在水平或垂直方向上,找到实际的边缘非常容易,因为您只需要取两者位置的平均值即可。如果在小距离内积分,则可以获得亚像素分辨率。
如果这些图像的照明非常相似,则可以使用注册和减法:
  1. 将可能包含缺陷的图像和参考图像都归一化到某个强度。

  2. 对其进行注册(对齐);可以通过检测矩形上的三个点,然后移动和旋转其中一个图像来完成。

  3. 从参考图像中减去怀疑图像。这将给您一个错误映射。您可以对其应用轻微的模糊和紧密的LoG滤波器以消除噪声并使检测更加准确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接