在骨架程序中是否可以删除小分支?
如下图所示: 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
答案 0 :(得分:3)
以下是scikit-image的结果:
from skimage import io
from skimage import morphology
image = io.imread('opencv.png')
out = morphology.skeletonize(image > 0)
答案 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()