欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 21:49:40
文章目录一、骨架提取函数 skeletonize()一、骨架提取函数 medial_axis()一、骨架提取函数 skeletonize()骨架提取,也叫二值图像细化。这种算法能将一个连通区域细化成一个像素的宽度,用于特征提取和目标拓扑表示。骨架提取与分水岭算法也属于形态学处理范畴,都放在morphology子模块内。morphology子模块提供了两个函数用于骨架提取,分别是Skeletonize()函数和medial_axis()函数。在模块:skimage.morphology.skeleto...

一、骨架提取函数 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 图片细化(骨架提取)二

二、骨架提取函数 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—python 图片细化(骨架提取)二

特别鸣谢
https://www.cnblogs.com/denny402/p/5167414.html

本文地址:https://blog.csdn.net/wsp_1138886114/article/details/107330351