这是经过Gabor滤波后获得的图像...除了亮白色的圆形缺陷外,还有什么方法可以去除图像中的线条。
尝试使用其他方向的gabor过滤器得到以下结果:
达到阈值后:哪个还可以,但还不算太好
中值过滤后:
提前致谢
这是经过Gabor滤波后获得的图像...除了亮白色的圆形缺陷外,还有什么方法可以去除图像中的线条。
尝试使用其他方向的gabor过滤器得到以下结果:
达到阈值后:哪个还可以,但还不算太好
中值过滤后:
提前致谢
Answers:
如果您的Gábor滤波器的输出是可靠的,并且图像数据中的变化不是很高,以致结果看起来完全不同,那么您可以使用以下方法(部分内容已提到):
使用任何自动阈值算法对第二张图像进行二值化处理。如您所见,将起作用的阈值范围很大。
使用组件标记算法以唯一的值标记像素的每个连接区域。
计算图像中每个组成部分的属性,该属性描述对象与实心圆的接近程度。为此,您可以使用例如compactness。我使用了低于等效磁盘半径内的像素分数。该半径是与对象具有相同面积的磁盘的半径。
要看到自动二值化应该起作用,这是阈值非常低和非常高的结果:
组件标签的选择对于您的应用程序并不重要。我建议,如果您必须自己实现它,请使用一种非常简单的方法。Wikipedia网站的一过一通版本非常简单。基本上,您会遍历二进制图像,并且遇到一个白色像素且尚未被标记的像素时,可以对该对象使用新的标记,并从该像素开始。
用标签标记该对象的过程基本上类似于泛洪填充。这是Wikipedia站点上算法的内部步骤1-4。您从这个标记的像素开始,并将其所有邻居放置在堆栈中(它们使用了vector)。对于堆栈上的像素,请检查它是否是前景并且尚未标记。如果必须标记它,则可以将其所有邻居再次放置在堆栈中。这样做直到堆栈为空。
然后,您继续扫描图像。与Wiki网站上的描述不同,您不必从原始图像中删除像素,而当标签图像中的值不同于0时,只需跳过。
一些想法:
编辑:中值过滤步骤之后,您已完成大部分操作。做得好!我在上面建议的第2项(关闭,然后标记区域)是一种将您带入其余部分的技术。