0
点赞
收藏
分享

微信扫一扫

OpenCV—python 图片细化(骨架提取)二


文章目录

  • ​​一、骨架提取函数 skeletonize()​​
  • ​​二、骨架提取函数 medial_axis()​​

一、骨架提取函数 skeletonize()

骨架提取,也叫二值图像细化。这种算法能将一个连通区域细化成一个像素的宽度,用于特征提取和目标拓扑表示。骨架提取与分水岭算法也属于形态学处理范畴,都放在morphology子模块内。
morphology子模块提供了两个函数用于骨架提取,分别是Skeletonize()函数和medial_axis()函数。
在模块:skimage.morphology.skeletonize(binary_image)下:输入和输出都是二值图像
​​​pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple​​​​【安装地址】​​

import cv2
from skimage import morphology
import numpy as np


img = cv2.imread('xihua_test.png',0)
_,binary = cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV)
cv2.imwrite("binary.png",binary)

binary[binary==255] = 1
skeleton0 = morphology.skeletonize(binary)
skeleton = skeleton0.astype(np.uint8)*255
cv2.imwrite("skeleton.png",skeleton)

以下依次为:二值化图,细化后图

OpenCV—python 图片细化(骨架提取)二_html

二、骨架提取函数 medial_axis()

medial_axis就是中轴的意思,利用中轴变换方法计算前景(1值)目标对象的宽度,格式为:
​​​skimage.morphology.medial_axis(image, mask=None, return_distance=False)​​​ mask: 掩模。默认为None, 如果给定一个掩模,则在掩模内的像素值才执行骨架算法。
return_distance: bool型值,默认为False. 如果为True, 则除了返回骨架,还将距离变换值也同时返回。这里的距离指的是中轴线上的所有点与背景点的距离。

import cv2
from skimage import morphology
import numpy as np


img = cv2.imread('xihua_test.png',0)
_,binary = cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV)

binary[binary==255] = 1
skel, distance =morphology.medial_axis(binary, return_distance=True)
dist_on_skel = distance * skel
dist_on_skel = dist_on_skel.astype(np.uint8)*255
cv2.imwrite("dist_on_skel.png",dist_on_skel)

OpenCV—python 图片细化(骨架提取)二_opencv_02


与上述函数方法效果不同。如下图。

OpenCV—python 图片细化(骨架提取)二_html_03


举报

相关推荐

0 条评论