查找同形值的含义

OpenCV C++ - findHomography values meaning

本文关键字:查找      更新时间:2023-10-16

我已经检查了stackoverdefect,特别是在这个链接中,但是它没有回答我的问题。

为了匹配两张图片,我使用Ransac和OpenCv计算了一个单应性。下面是相应的代码:

Mat H = findHomography( obj, scene, CV_RANSAC,3);
std::cout << "Size of homography " << *H.size << std::endl ;
//Print homography
for (int i=0;i<H.rows;i++){
    for (int j=0;j<H.cols;j++){
        std::cout << "valeur H : "  << (int)H.at<double>(i,j) << endl;
    }
}
int N=1;
const double det = H.at<double>(0, 0) * H.at<double>(1, 1) - H.at<double>(1, 0) * H.at<double>(0, 1);
std::cout << "Determinant homography : " << det << std::endl;

为了一个好的匹配(完全相同的图片),我在我的终端上有这个:

单应字大小3

value H: 1

value H: 0

value H: 0

value H: 0

value H: 1

value H: 0

value H: 0

value H: 0

value H: 1

行列式单应性:1

对于一个糟糕的匹配(两个不同的图片),我有这个:

单应字大小3

value H: 0

value H: 0

value H: 241

value H: 0

value H: 0

value H: 277

value H: 0

value H: 0

value H: 1

行列式单形:0.00533235

我不明白这个结果。有人能解释一下吗?我想使用这些值来确定这是否一个好的匹配。我希望在第一种情况下只有1,但事实并非如此。

我想,我在没有真正理解的情况下使用了Homography和Ransaw。我在网上查过了,但它很复杂,所以如果你也有很好的解释,我就接受了。

谢谢。

根据openCV文档,findHomography '查找两个平面之间的透视图转换'。这意味着它能够计算从不同位置拍摄的两张图像(同一(校准)板)的透视变换。

如果你比较两个完全不同的图像点集,它将无法找到这样的变换。

H是矩阵。在第一种情况下,H是单位矩阵[[1,0,0],[0,1,0],[0,0,1]。也就是说,没有变化。

在第二种情况下,似乎你只是在x中进行了241的翻译,在y中进行了277的翻译。但是在x和y中没有表示,因为(H=[[a,0,241],[0,b,277],[0,0,1]])'a'和'b'都是零。