我已经检查了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。我已经在互联网上查了一下,但它很复杂,所以如果你也有很好的解释,我会接受它。
感谢。
答案 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'为零。应该出问题。