Zhang-Suen细化算法提取中轴线(Python)

本文介绍了细化算法在图像处理中的作用,特别是Zhang-Suen细化算法在提取图像中轴线上的应用。该算法通过迭代删除边界点,遵循特定条件,最终形成图像的骨架。算法包括两个步骤,对前景像素点进行判断并标记删除,直至没有像素被删除,从而得到细化后的骨架。
摘要由CSDN通过智能技术生成

骨架

表示一个平面区域的结构形状的一种重要方法是将它简化为图形,这种简化可以通过一种细化(也称为骨架化)算法得到该区域的骨架来实现。细化是一种形态学变形,在提取中轴线的图像处理问题中,细化起着核心作用。为了产生一个区域的中轴的表示,提出了许多典型的算法,这些算法都是通过迭代一个区域的边界点的细化过程,删除这些点时需要服从如下约束条件:(1)不能删除端点,(2)不能破坏连接性,(3)不能导致区域的过度腐蚀。

因此,细化算法的一次迭代由如下步骤组成:(1)标记将被删除的边界点;(2)删除做了标记的点;(3)继续标记将被删除的剩余的边界点;(4)删除标记过的点。反复应用这个基本过程,直到再也没有被删除的点为止,此时算法终止,生成了该区域的骨架。

Zhang-Suen细化算法

首先定义像素点的8邻域如下图(前景为1,背景为0):

# 定义像素点周围的8邻域
#                P9 P2 P3
#                P8 P1 P4
#                P7 P6 P5

def neighbours(x,y,image):
    img = image
    x_1, y_1, x1, y1 = x-1, y-1, x+1, y+1
    return [ img[x_1][y],img[x_1][y1],img[x][y1],img[x1][y1],         # P2,P3,P4,P5
            img[x1][y], img[x1][y_1], img[x][y_1], img[x_1][y_1] ]    # P6,P7,P8,P9

N(p1)表示与1相邻的8个像素点中,为前景像素点的个数。

for x in range(1, rows - 1):
    for y in range(1, columns - 1):
        P2,P3,P4,P5,P6,P7,P8,P9 = n = neighbours(x, y, Image_Thinned)

S(P1)表示从P2 ~ P9中出现0~1的累计次数,其中0表示背景,1表示前景。

# 计算邻域像素从0变化到1的次数

def transitions(neighbours):
    n = neighbours + neighbours[0:1]      #
  • 12
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值