当前位置:首页>python>Python骨架提

Python骨架提

  • 2026-09-10 16:32:47
Python骨架提
骨架提取(也称为细化)是将二值图像中的前景物体简化为单像素宽的线条,同时保持物体的拓扑结构和连通性。它在图像分析、字符识别、指纹识别等领域有广泛应用。

常用方法

  1. 形态学细化:通过反复迭代腐蚀满足特定条件的像素,直至得到单像素宽的骨架。

  2. 距离变换:基于距离变换图,提取局部最大值作为骨架。

  3. 中轴变换:距离变换的一种扩展,提取所有具有最大距离变换值的点。

在Python中,最便捷的方法是使用scikit-image库的skeletonize函数(基于形态学细化),也可用OpenCV手动实现经典细化算法(如Zhang-Suen算法)。

import cv2import numpy as npfrom skimage.morphology import skeletonizeimport matplotlib.pyplot as plt# 读取图像并转为二值(前景为1,背景为0)img = cv2.imread('object.png', cv2.IMREAD_GRAYSCALE)_, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 转换为0/1二值图(skeletonize要求前景为1,背景为0)binary = binary // 255  # 将255转换为1# 骨架提取skeleton = skeletonize(binary).astype(np.uint8) * 255# 显示结果plt.figure(figsize=(10,5))plt.subplot(121), plt.imshow(binary, cmap='gray'), plt.title('原二值图')plt.subplot(122), plt.imshow(skeleton, cmap='gray'), plt.title('骨架')plt.show()

说明:

  • skeletonize输入需为布尔数组或0/1数组,其中True表示前景。

  • 返回的骨架也为布尔数组,我们将其转回0/255以便显示。

  • 该方法适用于大多数连通形状,对噪声敏感,建议先预处理去噪。

最新文章

随机文章