1

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

我使用 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

价值 H : 1

价值 H : 0

价值 H : 0

价值 H : 0

价值 H : 1

价值 H : 0

价值 H : 0

价值 H : 0

价值 H : 1

行列式单应性:1

对于一场糟糕的比赛(两张不同的图片),我有这个:

单应性大小 3

价值 H : 0

价值 H : 0

价值 H : 241

价值 H : 0

价值 H : 0

价值 H : 277

价值 H : 0

价值 H : 0

价值 H : 1

行列式单应性:0.00533235

我不明白这个结果。有人可以解释一下吗?我想使用这些值来确定这是否匹配。我希望在第一种情况下只有 1 个,但没有。

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

感谢。

4

2 回答 2

3

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

如果您在比较两组完全不同的图像点,将无法找到这样的转换。

于 2014-07-08T10:15:16.600 回答
2

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' 为零。应该出了什么问题。

于 2018-06-06T08:28:04.367 回答