

from skimage import morphology,draw
import cv2
import numpy as np
import matplotlib.pyplot as plt
image=np.zeros((400,400))
image[10:-10,10:100]=1
image[-100:-10,10:-10]=1
image[10:-10,-100:-10]=1
rs,cs=draw.line(250,150,10,280)
for i in range(10):
image[rs+i,cs]=1
rs, cs = draw.line(10, 150, 250, 280)
for i in range(20):
image[rs + i, cs]=1
ir,ic=np.indices(image.shape)
circle1=(ic-135)**2+(ir-150)**2<30**2
circle2=(ic-135)**2+(ir-150)**2<20**2
image[circle1]=1
image[circle2]=0
img=cv2.imread("C:/Users/xpp/Desktop/Lena.png")
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
t,rst=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)#二值化阈值处理
rows,cols=rst.shape
for i in range(rows):
for j in range(cols):
if (rst[i,j]==255):
rst[i,j]=1
#骨架算法
skeleton1=morphology.skeletonize(image)
skeleton2=morphology.skeletonize(rst)
fig,(ax1,ax2,ax3,ax4)=plt.subplots(nrows=1,ncols=4,figsize=(8,4))
ax1.imshow(image, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('image', fontsize=20)
ax2.imshow(rst, cmap=plt.cm.gray)
ax2.axis('off')
ax2.set_title('rst', fontsize=20)
ax3.imshow(skeleton1, cmap=plt.cm.gray)
ax3.axis('off')
ax3.set_title('skeleton1', fontsize=20)
ax4.imshow(skeleton2, cmap=plt.cm.gray)
ax4.axis('off')
ax4.set_title('skeleton2', fontsize=20)
fig.tight_layout()
plt.show()



算法:图像骨架提取是将一个连通区域细化成一个像素的宽度用于特征提取和目标拓扑表示。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!