1. Vins-Fusion中的Shi-Tomasi角点检测原理与实现
在视觉SLAM系统中,特征点的检测与跟踪是构建视觉里程计的基础环节。Vins-Fusion作为一款开源的视觉惯性里程计系统,其前端特征跟踪模块采用了经典的Shi-Tomasi角点检测算法。与Harris角点检测相比,Shi-Tomasi算法在大多数场景下表现出更好的稳定性和重复检测率。
1.1 Shi-Tomasi算法核心原理
Shi-Tomasi算法是对Harris角点检测的改进,两者都基于图像局部自相关矩阵(结构张量)的特征值分析。对于一个图像窗口W,其自相关矩阵M定义为:
code复制M = Σ [Ix² IxIy]
[IxIy Iy²]
其中Ix和Iy分别表示图像在x和y方向的梯度,通过Sobel算子计算得到。Harris角点响应函数为:
code复制R = det(M) - k·trace(M)²
而Shi-Tomasi则直接使用较小的特征值作为响应值:
code复制R = min(λ₁, λ₂)
这种改进使得算法在边缘和角点的区分上更加明确,只有当两个特征值都较大时才判定为角点。在实际应用中,Shi-Tomasi算法通常能检测出更稳定的特征点。
1.2 OpenCV实现参数解析
OpenCV中的goodFeaturesToTrack函数实现了Shi-Tomasi角点检测,其关键参数直接影响检测效果:
cpp复制void cv::goodFeaturesToTrack(
cv::InputArray image, // 输入图像(CV_8UC1或CV_32FC1)
cv::OutputArray corners, // 输出角点坐标
int maxCorners, // 最大角点数量
double qualityLevel, // 质量水平阈值(0.01-0.1)
double minDistance, // 角点间最小像素距离
cv::InputArray mask = noArray(), // 检测区域掩
