这是经过Gabor滤波后获得的图像...除了明亮的白色圆形缺陷外,还有什么方法可以去除图像中的线条。

请尝试其他方向gabor过滤器的结果如下:



阈值之后:哪个还可以,但效果不佳



经过中值过滤后:



预先感谢

评论

用中值过滤器做得很好。一切顺利。

这似乎是应用扩散滤波器的好方案。另外,请尝试在以下位置询问:
dsp.stackexchange.com/
photo.stackexchange.com/


您是否在阈值之后应用了中值过滤器?如果是这样,请在没有阈值的情况下尝试。

是的,我在阈值设置之后尝试过,并且在之前也获得了几乎相同的结果

#1 楼

如果您的Gábor滤波器的输出是可靠的,并且图像数据的变化不是很高,以致结果看起来完全不同,那么您可以使用以下方法(部分内容已经提到): br />
使用任何自动阈值算法对第二张图像进行二值化处理。您将看到的阈值范围将很大。
使用分量标记算法以唯一的值标记像素的每个连接区域。

计算图像的每个分量一个描述对象与实心圆的接近程度的属性。为此,您可以使用例如紧凑性。我使用了低于等效磁盘半径内的像素分数。该半径是与对象具有相同面积的磁盘的半径。




面积只是在计算对象的像素数
给定其面积的圆的半径也应易于管理
对于此半径内的像素,您需要每个图像对象的中心,但这只是对象像素所有位置的平均值。如果您是物理学家,那么您就会知道几个点质量的质心。等价。
现在,您为每个对象的每个像素计算距其中心的距离,并检查其是否小于圆半径。将两个数字相除,便得到内部像素和外部像素的分数。


取分数最高的对象。注意:只有一个像素的对象将获得1的值。因此,您应该设置大小阈值,并且只接受较大的对象(例如10像素)。以下是极低和极高阈值的结果:



更新组件标签

组件标签的选择对于您的应用程序并不重要。我建议,如果您必须自己实现它,请使用一种非常简单的方法。 Wikipedia网站的一过一通版本非常简单。基本上,您会遍历二进制图像,并且遇到一个白色且尚未标记的像素时,请对该对象使用新的标记,并从该像素开始。

用标签标记该对象的过程基本上类似于泛洪填充。这是Wikipedia站点上算法的内部步骤1-4。您从这个标记的像素开始,然后将其所有相邻像素放在堆栈中(它们使用了向量)。对于堆栈上的像素,请检查其是否为前景并且尚未标记。如果必须标记它,则可以将其所有邻居再次放置在堆栈中。这样做直到堆栈为空。

然后继续扫描图像。与Wiki网站上的说明不同,您不必从原始图像中删除像素,而当标签图像中的值不同于0时,只需跳过。

评论


$ \ begingroup $
您在这里指的是什么组件标记算法?
$ \ endgroup $
– Vini
2012年1月16日14:31

$ \ begingroup $
@vini,我更新了我的帖子。声子,谢谢。我们使用了许多形态学方法,尤其是前一阵子,紧实度非常有用。
$ \ endgroup $
– Halirutan
2012年1月16日18:53

$ \ begingroup $
太好了:)
$ \ endgroup $
– Vini
2012年1月17日在1:49

#2 楼

一些想法:


根据边缘强度的密度过滤掉边缘。使用圆形核的近似值,求出平均边缘强度(或其他度量)。通过等于或高于阈值的任何边缘,将低于阈值的任何边缘设置为黑色。
使用形态学的“关闭”操作(先扩张后腐蚀),以清理图像,然后使用区域标记算法( aka连接的组件,斑点)查找所有斑点。根据大小,长轴与短轴的比率等过滤Blob数据。
尝试使用高斯模糊,找到一个二值化阈值以将暗处的光线分段,然后按照上面的步骤2中所述过滤Blob。 (要快速逼近高斯模糊,请紧压双眼皮并斜视图像)。

编辑:在中值滤波步骤之后,您已完成大部分操作。做得好!我在上面建议的第2项(关闭,然后进行区域标记)是一种将您带到其余部分的技术。

评论


$ \ begingroup $
yup会尝试让您知道发生了什么
$ \ endgroup $
– Vini
2012年1月16日13:58

#3 楼

您可以尝试激活轮廓。尽管它可能很慢,但它可以处理类似的复杂情况。

或者您可以使用一些先验知识来处理此图像。例如,您知道blob事物是“大”和“连接”的。因此,当您计算每个连接区域的数量时,就可以找到它。