• 操作系统: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)=((Fpt1)(0))2+((Fpt1)(1))2+((Ftpt2)(0))2+((Ftpt2)(1))2(pt2tFpt1)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
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐