OpenCV C ++ - findHomography值的含义

时间:2014-07-08 09:06:14

标签: c++ opencv matching homography ransac

我已经检查了stackOverflaw,特别是在link中,但它没有回答我的问题。

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

     

valeur H:1

     

valeur H:0

     

valeur H:0

     

valeur H:0

     

valeur H:1

     

valeur H:0

     

valeur H:0

     

valeur H:0

     

valeur H:1

     

行列式单应性:1

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

  

单应体的大小3

     

valeur H:0

     

valeur H:0

     

valeur H:241

     

valeur H:0

     

valeur H:0

     

valeur H:277

     

valeur H:0

     

valeur H:0

     

valeur H:1

     

行列式单应性:0.00533235

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

根据openCV documentation,findHomography&#39;查找两架飞机之间的透视转换&#39;。这意味着它能够计算从不同位置拍摄的两个(相同(校准)板的图像)的透视变换。

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

答案 1 :(得分:0)

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