OpenCV相机标定与3D重建(52)计算两个点之间的 Sampson 距离函数sampsonDistance()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
计算两点之间的 Sampson 距离。
函数 cv::sampsonDistance 计算并返回几何误差的一阶近似,公式为:
s
d
(
pt1
,
pt2
)
=
(
pt2
t
⋅
F
⋅
pt1
)
2
(
(
F
⋅
pt1
)
(
0
)
)
2
+
(
(
F
⋅
pt1
)
(
1
)
)
2
+
(
(
F
t
⋅
pt2
)
(
0
)
)
2
+
(
(
F
t
⋅
pt2
)
(
1
)
)
2
sd( \texttt{pt1} , \texttt{pt2} )= \frac{(\texttt{pt2}^t \cdot \texttt{F} \cdot \texttt{pt1})^2} {((\texttt{F} \cdot \texttt{pt1})(0))^2 + ((\texttt{F} \cdot \texttt{pt1})(1))^2 + ((\texttt{F}^t \cdot \texttt{pt2})(0))^2 + ((\texttt{F}^t \cdot \texttt{pt2})(1))^2}
sd(pt1,pt2)=((F⋅pt1)(0))2+((F⋅pt1)(1))2+((Ft⋅pt2)(0))2+((Ft⋅pt2)(1))2(pt2t⋅F⋅pt1)2
cv::sampsonDistance 是 OpenCV 库中的一个函数,用于计算两个点之间的 Sampson 距离。Sampson 距离是一种近似但计算效率较高的方法,用来衡量一对匹配点对在基本矩阵(Fundamental Matrix)或本质矩阵(Essential Matrix)约束下的不一致性程度。它常用于立体视觉和多视图几何中,特别是在评估特征点匹配的质量时。
基本矩阵可以使用 findFundamentalMat 函数进行计算。详情参见 [115]11.4.3。
函数原型
double cv::sampsonDistance
(
InputArray pt1,
InputArray pt2,
InputArray F
)
参数
- 参数pt1 first homogeneous 2d point
- 参数pt2 second homogeneous 2d point
- 参数F fundamental matrix
返回值
该函数返回一个双精度浮点数,表示给定点对之间的 Sampson 距离。
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 定义两个匹配点
Point2d pt1(100, 200); // 第一个点
Point2d pt2(150, 250); // 第二个点
// 将点转换为 Mat 格式
Mat point1 = (Mat_<double>(3, 1) << pt1.x, pt1.y, 1);
Mat point2 = (Mat_<double>(3, 1) << pt2.x, pt2.y, 1);
// 定义一个基本矩阵 F
Mat F = (Mat_<double>(3, 3) <<
0.001, 0.002, -0.003,
0.004, 0.005, -0.006,
-0.007, -0.008, 0.009);
// 计算 Sampson 距离
double distance = sampsonDistance(point1, point2, F);
// 打印结果
cout << "Sampson Distance: " << distance << endl;
return 0;
}
运行结果
Sampson Distance: 30136.9
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)