【OpenCV 例程 300篇】224. 特征提取之提取骨架

本文介绍了如何使用OpenCV进行特征提取,特别是针对图像骨架的提取。通过腐蚀和开运算的迭代过程,实现了从血管图像的二值化分割结果中获取骨架。代码示例展示了这一过程,最终展示原始图像、骨架图像和处理结果。
摘要由CSDN通过智能技术生成

OpenCV 例程200篇 总目录


【youcans 的 OpenCV 例程 300篇】224. 特征提取之提取骨架


目标特征的基本概念

通过图像分割获得多个区域,得到区域内的像素集合或区域边界像素集合。我们把感兴趣的人或物称为目标,目标所处的区域就是目标区域。
特征通常是针对于图像中的某个目标而言的。图像分割之后,还要对目标区域进行适当的表示和描述,以便下一步处理。
“表示”是直接具体地表示目标,以节省存储空间、方便特征计算。目标的表示方法,有链码、多边形逼近(MPP)、斜率标记图、边界分段、区域骨架。
“描述”是对目标的抽象表达,在区别不同目标的基础上,尽可能对目标的尺度、平移、旋转变化不敏感。


提取骨架

骨架与目标区域的形状有关。

骨架可以由区域的边界计算。提取骨架的常用方法是用重建开运算来实现,在保持端点和线的连通性的同时持续细化目标区域。

S ( A ) = ⋃ k = 0 K S k ( A ) S k ( A ) = ( A ⊖ k B ) − ( A ⊖ k B ) ∘ B S(A) = \bigcup ^K_{k=0} S_k(A)\\ S_k(A) = (A \ominus kB) - (A \ominus kB) \circ B S(A)=k=0KSk(A)Sk(A)=(AkB)(AkB)B

基于重建开运算的提取骨架算法步骤如下:

(1)对图像进行腐蚀,腐蚀后的物体变得更窄细;
(2)对腐蚀后图像做开运算,开运算处理时被删除的像素就是骨骼的一部分,将其添加骨骼图像;
(3)重复以上过程,直到图像被完全腐蚀。

skimage 中提供了函数 skimage.morphology.skeletonize 可以获取图像的骨骼。


例程 12.13:特征提取之提取骨架

例程的图像来自 R.C.Gonzalez 《数字图像处理(第四版)》P598-599 例11.5。原始图像是分割后的血管图像,过连续细化获得了图像的骨架。

    #  12.13 特征提取之提取骨架
    img = cv2.imread("../images/bloodvessels.tif", flags=1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度图像
    _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

    dst = binary.copy()
    skeleton = np.zeros(gray.shape, np.uint8)  # 创建空骨架图
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
    while (True):
        dst = cv2.erode(dst, kernel, None, None, 1)  # 腐蚀
        opening = cv2.morphologyEx(dst, cv2.MORPH_OPEN, kernel)  # 开运算
        subSkeleton = cv2.subtract(dst, opening)  # 获得骨架子集
        skeleton = cv2.bitwise_or(skeleton, subSkeleton)  # 将删除的像素添加到骨架图
        if cv2.countNonZero(dst) == 0:
            break

    result = cv2.bitwise_xor(gray, skeleton)
    plt.figure(figsize=(9, 6))
    plt.subplot(131), plt.axis('off'), plt.title("origin")
    plt.imshow(gray, cmap='gray')
    plt.subplot(132), plt.axis('off'), plt.title("skeleton")
    plt.imshow(skeleton, cmap='gray')
    plt.subplot(133), plt.axis('off'), plt.title("result")
    plt.imshow(result, cmap='gray')
    plt.tight_layout()
    plt.show()

在这里插入图片描述


【本节完】

说明:例程的图像来自 R.C.Gonzalez 《数字图像处理(第四版)》。

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125600888)
Copyright 2022 youcans, XUPT
Crated:2022-6-30

222. 特征提取之弗里曼链码
223. 特征提取之多边形拟合
224. 特征提取之提取骨架

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youcans_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值