可以在opencv或scikit图像中删除Skeleton小分支吗?

时间:2013-04-02 13:56:27

标签: opencv image-processing mathematical-morphology scikit-image

在骨架程序中是否可以删除小分支?

如下图所示: http://felix.abecassis.me/wp-content/uploads/2011/09/skel_opencv.png

只有O字母是完美的,但不是所有其他字母。

这是在程序中还是在删除这些小分支后的一种方式? 我使用python opencv,但是使用pymorph或scikit-image的解决方案也很好。 这里有我用于骨架化的代码: Code

原始图片:http://felix.abecassis.me/wp-content/uploads/2011/09/opencv.png

2 个答案:

答案 0 :(得分:3)

以下是scikit-image的结果:

from skimage import io
from skimage import morphology

image = io.imread('opencv.png')
out = morphology.skeletonize(image > 0)

skimage-skeleton

答案 1 :(得分:0)

Scikit 图像具有骨架和薄,可能有助于实现您想要的。

lee 版本的 skeletonize 比单独使用 skeleton 更有效地细化边缘骨架特征。

Thin 使您能够对图像进行部分骨架化。您可以先进行部分细化,然后再进行扩张或开运算,以获得接近形态修剪 (https://en.wikipedia.org/wiki/Pruning_(morphology)) 的效果。

这里有 scikit 骨架工具的例子:https://scikit-image.org/docs/dev/auto_examples/edges/plot_skeleton.html

from skimage.morphology import skeletonize
from skimage import data
import matplotlib.pyplot as plt
from skimage.util import invert

# Invert the horse image
image = invert(data.horse())

# perform skeletonization
skeleton = skeletonize(image)
skeleton_lee = skeletonize(image, method='lee')

# display results
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(8, 4),
                         sharex=True, sharey=True)

ax = axes.ravel()

ax[0].imshow(image, cmap=plt.cm.gray)
ax[0].axis('off')
ax[0].set_title('original', fontsize=20)

ax[1].imshow(skeleton, cmap=plt.cm.gray)
ax[1].axis('off')
ax[1].set_title('skeleton', fontsize=20)

ax[2].imshow(skeleton_lee, cmap=plt.cm.gray)
ax[2].axis('off')
ax[2].set_title('skeleton lee', fontsize=20)

fig.tight_layout()
plt.show()

enter image description here