被scikit实现的几个图像细化 与骨架提取 skeleton thining medial axis

I. 1984 Zhang的算法

Ref:1984 ACM Scikit-Zhang-A fast parallel algorithm for thinning digital patterns

1984Zhang的算法
文章的主要算法就是这4个条件来一遍一遍的去除边界点, 每遍会分为2步。
我对第一步的评论:而且还包括西北顶点也满足,比如H图FIg4a中的左上角的顶点,在第一次迭代中也满足条件,即P2、P8同时为0的 左上角也满足

第二步是将cd两个条件改为一下这两个。
算法第二步
但是scikit中并没有源码的展示用的cython,好在算法比较简单。

skeletonize
return _fast_skeletonize(image)

这两步的区别在于 分别针对 东南 和 西北 边界点。 例如下面对H字母的 两步的结果如下:
在这里插入图片描述
在这里插入图片描述

II. Lee 1994年 八叉树octree 3D Skeleton

被MATLAB和scikit image收录的算法

Ref:1994 Building skeleton models via 3-D medial surface axis thinning algorithms

但是相比之下,Lee的 八叉树的算法,更符合人的理解, 避免了很多的分支, 估计这也是被scikit 和 MATLAB 收录的原因之一。 这个算法目前还在学习中。

在这里插入图片描述
该图来自scikit image的官方sample :linked websit
其源码在实现上 是 对2D图像补充了边缘,使用_compute_thin_image的cy程序来快速计算。

    img = np.ascontiguousarray(img)
    img = img_as_ubyte(img, force_copy=False)

    # make an in image 3D and pad it w/ zeros to simplify dealing w/ boundaries
    # NB: careful here to not clobber the original *and* minimize copying
    img_o = img
    if img.ndim == 2:
        img_o = img[np.newaxis, ...]
    img_o = np.pad(img_o, pad_width=1, mode='constant')

    # normalize to binary
    maxval = img_o.max()
    img_o[img_o != 0] = 1

    # do the computation
    img_o = np.asarray(_compute_thin_image(img_o))

    # crop it back and restore the original intensity range
    img_o = crop(img_o, crop_width=1)
    if img.ndim == 2:
        img_o = img_o[0]
    img_o *= maxval

    return img_o
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值