【问题标题】:It is possible deleting Skeleton small branches in opencv or scikit image?可以删除 opencv 或 scikit 图像中的 Skeleton 小分支吗?
【发布时间】:2013-03-23 20:37:49
【问题描述】:

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

如图所示: 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

【问题讨论】:

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


    【解决方案1】:

    这是来自scikit-image的结果:

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

    【讨论】:

    • 你确定吗?我只有一个全黑的图像!我尝试了两个图像;没有骨架化和骨架化。
    • Skeletonize 返回一个包含 0 和 1 的图像,但 dtype 应该是 bool 或 float,而不是 int(我已经打开了一张票:github.com/scikit-image/scikit-image/issues/489)。同时,只需使用out = out.astype(float)
    • 你有没有用 C++ 而不是 Python 实现这个?
    【解决方案2】:

    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()
    

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 2012-10-27
      • 2015-11-06
      • 2014-03-18
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多