一 什么是骨架提取

1.1 简介

骨架提取是图像处理或计算机视觉中的一种技术,用于从二值化图像中提取物体的中心线或轮廓,通常称为“骨架”或“细化图像”。这一技术主要用于简化形状表示,同时保留物体的拓扑结构。

这里我们强调了,是对二值化图像中进行提取。我们提取的是物体的中心线或者轮廓,其实简单理解,当我们使用粗大的记号笔写了一个“1”,但现在在纸上我不需要这么宽,我需要它更加精确或者说更加细一些,只需要保留他的形状,让我知道这个是“1”就行,因此我会使用细小的中性笔写一个“1”,这样其实就是骨架提取的目的,简化形状,同时保留物体的拓扑结构,保留图像的特征。

1.2 骨架提取中心思想

骨架由模型的主要特征决定,因此我们说对骨架的提取,其实就是由它的部分特征所决定的。

我们从上图可以看出,骨架提取的思想其实就是将一块连续的特征部分用一个个圆将其覆盖,我们可以看见如v1,v2,v3这样大点在中心,其对应的较大的球就是我们需要的特征,这些就是我们的主要特征,而噪声就像是v4这样远离中心靠近边缘的较小的球。

因此我们需要做的就是挑选出半径更大的对应的球拿到,除去它所覆盖的周围的偏离中心区域的小球去除。类似于贪心算法,每次取到最大的球,去除他所覆盖的那些小的球。

1.3 分类

骨架提取分为两类:迭代和非迭代。在迭代算法中又分为并行迭代和顺序迭代。

并行迭代可以同时对多个像素点同时进行处理和更新,各个像素点的处理过程相互独立。顺序迭代则是按照特定的顺序依次对图像中的像素点进行处理和更新,一个像素点的处理结果可能会影响到后续像素点的处理。因此对于需要处理大规模图像或者高分辨的图象时,并行的方法足够快。

二 并行迭代

我先描述一个并行迭代的方法

2.1 Zhang-Suen并行迭代算法

假设图像中某一点的像素点及其周围的点阵如上图所示。

 定义:B(p1)为p1点的非零领域个数(二值中的1)。A(p1)为p1点周围8个像素点灰度值按顺时针方向满足0到1顺序的排列的个数。

举个例子:

根据定义,上图的 B(p1)= 3 。A(p1)= 2 。

ok,那我们知道定义了,现在要了解在什么情况下会对图像进行像素点的删除。一共有四个条件。

当这四个条件都满足的情况下,会对对应的p1进行操作。

三 顺序迭代 

3.1 K3M顺序迭代算法

其中心思想就是不断的进行删除操作,直到没有办法删除为止。

K3M的迭代有6步,不断迭代,直至某次迭代的过程,目标边界中没有新的像素被删除,那么此时,剩余的目标图像像素就很接近于真实骨架(称之为伪骨架)。

①提取最新目标轮廓(最开始为原图的轮廓)并且记录这些轮廓点。

②依次检测这些轮廓的8邻域像素,是否只含有3连通像素,如果有,把此点从图像轮廓中删除。

③依次检测在经过②中剩余的轮廓点的8邻域像素,是否只含有3或4连通像素,如果有,把此点从图像轮廓中删除。

④依次检测在经过③中剩余的轮廓点的8邻域像素,是否只含有3或4或5连通像素,如果有,把此点从图像轮廓中删除。

⑤依次检测在经过④中剩余的轮廓点的8邻域像素,是否只含有3或4或5或6连通像素,如果有,把此点从图像轮廓中删除。

⑥依次检测在经过⑤中剩余的轮廓点的8邻域像素,是否只含有3或4或5或6或7连通像素,如果有,把此点从图像轮廓中删除。

经过这6步之后我们就得到了伪骨架。

现在需要将伪骨架中提取真实骨架

依次检测目标图像中,伪骨架的8像素邻域,是否只含有2或3或4或5或6或7连通像素,如果有,把此点从伪骨架中删除,就得了最终的骨架。

但是大家需要注意,在提取骨架后,可能还会有很多的毛刺,可以根据毛刺的特点,选择一些改进的骨架提取方法去除多余的骨架毛刺

之后会持续更新其他的骨架提取策略,感谢关注!!!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐