【youcans 的 OpenCV 例程200篇】128. 形态算法之骨架 (skimage)
3. 形态学算法
形态学处理的主要应用是提取图像中用来表示和描述形状的元素和成分,例如提取边界、连通分量、凸壳和区域骨架。
### 3.7 骨架
形态骨架(morphological skeleton)是一种细化的结构,指图像的骨骼部分,用于描述物体的几何形状和拓扑结构,是目标物体重要的拓扑描述。图像的细化是对二值图像进行骨架提取,删除不需要的轮廓点,只保留其骨架点。
骨架可以用腐蚀和开运算来表示:
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=0⋃KSk(A)Sk(A)=(A⊖kB)−(A⊖kB)∘B
按照以上思路,构造骨骼化算法的步骤:
(1)对图像进行腐蚀,腐蚀后的物体变得更窄细;
(2)对腐蚀后图像做开运算,开运算处理时被删除的像素就是骨骼的一部分,将其加入骨骼图像;
(3)重复以上过程,直到图像被完全腐蚀。
skimage 中提供了函数 skimage.morphology.skeletonize 可以获取图像的骨骼。
例程 10.17:skimage 骨骼化算法
# # 10.17 形态算法之骨架 (skimage.morphology.skeletonize)
from skimage import morphology
imgGray = cv2.imread("../images/handwriting01.png", flags=0) # flags=0 灰度图像
ret, imgBin = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY) # 二值化处理
imgBin[imgBin==255] = 1
skeleton01 = morphology.skeletonize(imgBin)
skeleton = skeleton01.astype(np.uint8) * 255
plt.figure(figsize=(8, 6))
plt.subplot(121), plt.axis('off'), plt.title("origin")
plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255)
plt.subplot(122), plt.title("skeleton"), plt.axis('off')
plt.imshow(skeleton, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/123497811)
Copyright 2022 youcans, XUPT
Crated:2022-3-15