二值化,然后细化/骨架化

信息处理 图像处理 过滤器 Python 阈值
2022-02-21 15:55:11

我有网络的图片,如下图所示,我的目标是通过处理这些图像获得网络的骨架。

原始图像

我的方法分为两个步骤,首先我使用局部阈值或 Otsu 方法将灰度图像转换为二值图像,然后使用中值滤波器(python 函数 medfilt)。结果如下所示。

二进制图像

然后,我使用细化算法来提取网络的骨架。这是我实施 Zhang-Suen 细化算法的结果。

骨骼

考虑到第一张图片的质量,我很确定可以做得比这更好。因此,我有两个问题:

1) 拍摄最后一张图像,您将如何去除所有与脊垂直的小线和小间隙,即人工制品?

2)您实际上建议我在上述步骤(转换为二进制图像和细化)中使用什么算法?

我主要在python中工作。

1个回答

您对 ZS 算法的实现是错误的。正确的输出应该是: 张素恩输出

在这里您可以看到叠加在原始二进制图像上的输出: 张素恩输出带原始阴影

移除小分支需要更多的努力,并且不是完全现成的,但基本上你可以用它的长度标记连接点和端点之间的每个部分,并修剪那些太短的部分。然后你也可以考虑“主要”方向而不是在那个方向修剪。