利用Steger算法提取线条中心的基本原理

目录

前言

1.线条模型

1.1一维线条模型与检测

1.2二维线条模型与检测

 2.线条连接算法

 3.参考文献


前言

Steger算法是一种精度较高的线条提取算法,可以亚像素级提取图像中线条的中心。笔者在学习过程中写下这篇学习笔记,希望能帮助读者快速了解该算法的原理。由于仅涉及原理,具体例子及应用可查看文献原文。本文图片均来自文献原文。笔者学术水平有限,因此如有错误之处麻烦大家指出,笔者会及时修改。

1.线条模型

我们知道,光条截面的光强分布类似服从高斯分布,那么光条的中心就是高斯分布的顶点。将图像视为一个函数z(x,y),用来表示图像中不同像素的灰度值。在Z(x,y)中,光条截面的灰度分布也存在类似的规律,也就是说,线条会以山峰和沟壑的形式在函数图像出现。那么我们的基本思路就是:通过将图像函数z(x,y)进行泰勒展开,再用多项式进行函数逼近,从而找到这个顶点。

航空影像中线条的轮廓和近似理想线条轮廓
航空影像中线条的轮廓和近似理想线条轮廓(摘自文献)

1.1一维线条模型与检测

 首先讨论一维情况下线条的模型。

许多线条检测方法认为,一维情况下线条是条形的,设理想线宽度为2\omega,高度为h,以线条中心为原点建立坐标系,则线条轮廓可以表示为:

考虑传感器采样等影响,实际的线条表面假设成抛物线(结合上图的情况),同样设宽度为2\omega,建立坐标系,则高度可以表示为:

 之后的线条检测算法也基于该线条模型。无噪声的条件下,在一维图像z(x)中找到这条线,只需要找到{z}'(x)为0的点。通常采用显著线的标准来找这条线。判断是否为显著线的标准为看在{z}'(x)=0{z}''(x)的大小,对于暗背景下的亮线,{z}''\leqslant 0,对于亮背景下的暗线,{z}''\geqslant 0。但真实图像中包含大量噪声,还需要通过高斯平滑核的导数卷积图像来估计z(x)的一阶和二阶导数,达到减噪的目的。关于高斯滤波的知识这里不再赘述。

卷积过程中,考虑到线条两侧的对比度有可能不同,简单起见,采用不对称的线条模型:

1.2二维线条模型与检测

 接下来讨论二维情形下的线条模型。这里列出原文对该部分的解释。

二维的曲线结构可以建模为曲线s(t),该曲线在垂直于线,即垂直于{s}'(t)的方向上呈现典型的一维线轮廓。设该方向为n(t),则n(t)方向上的一阶方向导数应为零,二阶方向导数应具有较大的绝对值。

 可见,二维线条模型是在一维线条模型的基础上经过拓展建立的。唯一剩下的问题就是为每个图像点局部计算线的方向。

这里引入了Hessian矩阵来确定方向:

 该矩阵由图像某点沿不同方向的四个偏导组成,该矩阵可以确定z(x,y)的二阶方向导数最大绝对值的方向。接下来的思路就是:首先进行高斯滤波,然后计算Hessian矩阵得到光条的法线方向,最后在法线方向利用泰勒展开得到亚像素位置。

Hessian 矩阵最大特征值对应的特征向量对应于光条的法线方向,用 (n_x,n_y)表示,以点 (x_0,y_0) 为基准点,(图像上每个点都可以计算 Hessian矩阵,由于“Hessian矩阵的特征值就是形容其在该点附近特征向量方向的凹凸性,特征值越大,凸性越强。你可以把函数想想成一个小山坡,陡的那面是特征值大的方向,平缓的是特征值小的方向”,所以线中心点的Hessian矩阵特征值相比其他位置更大,所以可以设置阈值进行筛选)则光条中心的亚像素坐标为

其中,

 若存在点满足

 即一阶导数为零的点位于当前像素内(找拐点附近的点,因为实际中心截面不是规则的曲线),且方向的二阶导数大于指定的阈值(确定是极值点),则该点(x_0,y_0)为光条的中心点, (p_x,p_y)则为亚像素坐标。 (tn_x,tn_y)是中心点与亚像素的偏移量,所以其绝对值不能超过0.5,超过0.5就跑出该像素的范围。

 2.线条连接算法

 在第一部分中,我们可以提取到若干线条的像素,还需要将其连接成线条。文献中提出了一种点的连接算法,并表示优于使用Facet模型检测的效果。

首先由第一部分的方法获得每个像素的以下数据:线的方向(n_x,n_y)=(cos\alpha ,sin\alpha ),线的强度度量(α方向上的二阶方向导数),以及线的亚像素位置(p_x,p_y)

然后从具有最大二阶导数的像素开始,将通过向当前线条添加适当的相邻点来构造线条。要添加到线的适当相邻点的选择基于相应亚像素位置之间的距离和两个点的角度差。令d=\left \| p_2-p_1 \right \|_{2},\beta =\alpha _2-\alpha _1,则添加的相邻线点为d+\omega \beta的最小值,文献中令\omega =1。按顺序选择每个线点,直到在当前邻域中找不到更多的线点,或者直到最佳匹配候选点是已添加到另一条线的点。如果发生这种情况,则该点将标记为连接点,并且包含该点的线将在连接点处拆分为两条线。在交叉点处,选择一个要跟随的分支,然后继续添加线点。

使用新方法(a)和Facet模型(b)检测的线t条。线以白色绘制,而交叉点显示为黑色十字。

 3.参考文献

 [1]Carsten Steger. 1996. Extracting Curvilinear Structures: A Differential Geometric Approach. In Proceedings of the 4th European Conference on Computer Vision-Volume I - Volume I (ECCV '96). Springer-Verlag, Berlin, Heidelberg, 630–641.

[2]C. Steger, "An unbiased detector of curvilinear structures," in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 20, no. 2, pp. 113-125, Feb. 1998, doi: 10.1109/34.659930.

[3]基于Hessian矩阵的光条中心提取算法 - 知乎
https://zhuanlan.zhihu.com/p/109247936

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑化咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值