这是经过 Gabor 滤波后得到的图像... 除了明亮的白色圆形缺陷之外,是否有某种方法可以去除图像内部的线条。
是否尝试了另一个方向的 gabor 过滤器,结果如下:
阈值后:这还可以,但不是很好
中值滤波后:
提前致谢
这是经过 Gabor 滤波后得到的图像... 除了明亮的白色圆形缺陷之外,是否有某种方法可以去除图像内部的线条。
是否尝试了另一个方向的 gabor 过滤器,结果如下:
阈值后:这还可以,但不是很好
中值滤波后:
提前致谢
如果您的 Gábor 过滤器的输出是可靠的,并且您的图像数据的变化不是那么高以至于结果看起来完全不同,那么您可以使用以下方法(其中部分已经提到):
使用任何自动阈值算法对第二张图像进行二值化。如您所见,有效的阈值范围很大。
使用组件标记算法用唯一值标记像素的每个连接区域。
为图像的每个组件计算一个属性,该属性描述了您的对象与实心圆的接近程度。为此,您可以使用例如compactness。我使用了低于等效磁盘半径内的像素分数。该半径是与您的对象具有相同面积的磁盘的半径。
要查看自动二值化应该起作用,以下是阈值非常低和非常高的结果:
组件标签的选择对您的应用并不重要。我建议,如果您必须自己实现它,请使用一种非常简单的方法。Wikipedia 网站上的一次性版本非常简单。基本上你遍历你的二进制图像,当你遇到一个白色且尚未标记的像素时,你使用一个新标签来标记这个对象并从这个像素开始。
用标签标记这个对象的过程基本上类似于洪水填充。这是 Wikipedia-site 算法中的内部步骤 1-4。你从这个带标签的像素开始,把它的所有邻居放在一个堆栈上(他们使用了一个向量)。对于堆栈上的像素,您检查它是否是前景并且尚未标记。如果你必须给它贴标签,你再把它的所有邻居都放在堆栈上。这样做直到你的堆栈为空。
然后继续扫描图像。与 Wiki 站点上的描述不同,您不必从原始图像中删除像素,当您的标签图像中的值不同于 0 时,您只需跳过。
一些想法:
编辑:在你的中值过滤步骤之后,你大部分时间都在那里。好工作!我在上面建议的第 2 项(关闭,然后是区域标记)是一种技术,可以带你走完剩下的路。
您可以尝试活动轮廓。虽然它可能很慢,但它可以处理这样的复杂情况。
或者你可以使用一些先验知识来处理这个图像。例如,您知道 blob 事物是“大”和“连接”的。因此,当您计算每个连接区域的数量时,您可以找到它。