亚像素边缘检测思想
核心思想
基于二阶多项式拟合的亚像素边缘检测,原理来源于 Steger’s 方法 (1998, “An unbiased detector of curvilinear structures”)。
它的核心流程可以概括为:
-
初步边缘检测(像素级别)
- 用改造过的 Canny(包括高斯滤波、梯度计算、非极大值抑制、双阈值+滞后跟踪),得到像素级的边缘点。
- 这一步的边缘是整数坐标,存在 “量化误差”,精度只能到 1 像素。
-
局部邻域拟合(亚像素建模)
-
在每个候选边缘点的 3×3 邻域上,计算梯度幅值(dx、dy 的模)。
-
用这些值拟合一个 二阶多项式曲面:
f(x,y)=a0+a1x+a2y+a3x2+a4xy+a5y2 f(x, y) = a_0 + a_1x + a_2y + a_3x^2 + a_4xy + a_5y^2 f(x,y)=a0+a1x+a2y+a3x2+a4xy+a5y2
这样,原本离散的像素点灰度/梯度分布被转化为一个平滑的连续函数。
-
-
Hessian 矩阵与主方向
-
通过二阶导数构建 Hessian 矩阵:
H=[fxxfxyfxyfyy] H = \begin{bmatrix} f_{xx} & f_{xy} \\ f_{xy} & f_{yy} \end{bmatrix} H=[fxxfxyfxyfyy]
-
计算其 特征值和特征向量。主方向对应于梯度变化最大的方向,也就是边缘法线方向。
-
-
沿边缘法线方向的极值搜索
- 在拟合的函数里,沿法线方向找到极值点。
- 这一步通过解析解(牛顿法近似推导)得到一个浮点偏移量 (Δx,Δy)(\Delta x, \Delta y)(Δx,Δy)。
- 如果这个偏移量小于 0.5 个像素,就把原始点坐标加上偏移量,从而得到 亚像素精度的边缘位置。
-
结果
- 得到的轮廓点不是整数坐标,而是浮点数 (x+0.3,y−0.2)(x+0.3, y-0.2)(x+0.3,y−0.2) 这样的形式。
- 相比传统 Canny,这种方法能将边缘精度提升到 0.1 像素级别,适合高精度测量(比如工业检测、机器视觉)。
方法原理总结
- 先粗定位:Canny 找到整数像素边缘点。
- 再细定位:在局部 3×3 区域用二次多项式拟合梯度分布。
- 通过 Hessian 特征分解,找到边缘的法线方向。
- 沿法线方向计算梯度极值点位置,得到小数坐标。
这样实现了 基于二阶曲面拟合的亚像素边缘检测。