我怎样才能使用Homography?

时间:2012-11-04 19:14:48

标签: opencv distortion homography

我正在开发一个程序,我收到同一场景的2张图片,但其中一张有失真:

Mat img_1 = imread(argv[1], 0);  // nORMAL pICTURE
Mat img_2 = imread(argv[2], 0);  // PICTURE WITH DISTORTION

我想评估这些不正确的模式并且可以用来补偿它

我已经找到了关键点,我想知道我是否可以使用这个功能cv :: findHomography ...无论如何,怎么做?

2 个答案:

答案 0 :(得分:2)

单应性将一个图像平面映射到另一个图像平面。这意味着如果您的失真可以表示为3x3矩阵,findHomography就是您想要的。如果没有,那么它不是你想要的。它需要两个对应点矢量作为输入,并返回最能代表这些点之间变换的3x3矩阵。

答案 1 :(得分:1)

好吧,假设我有两张图片(A和B)彼此略微扭曲,它们之间存在平移,旋转和刻度差异(例如,这些图片:)

ORIGINAL LENA DISTORTED LENA


Ssoooooooo我需要的是在图片B中应用一种变换,以便它补偿存在的失真/平移/旋转,使两张图片具有相同的大小,方向和无翻译

我已经提取了点并找到了Homography,如下图所示。但是我不知道如何使用Homography来转换Mat img_B所以它看起来像Mat img_A。有什么想法吗?

//-- Localize the object from img_1 in img_2
std::vector<Point2f> obj;
std::vector<Point2f> scene;

for (unsigned int i = 0; i < good_matches.size(); i++) {
    //-- Get the keypoints from the good matches
    obj.push_back(keypoints_object[good_matches[i].queryIdx].pt);
    scene.push_back(keypoints_scene[good_matches[i].trainIdx].pt);
}

Mat H = findHomography(obj, scene, CV_RANSAC);

干杯,