-1

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

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

我想评估失真的模式并能够补偿它

我已经能够找到关键点,我想知道我是否可以为此使用函数 cv::findHomography ...无论如何,该怎么做?

4

2 回答 2

2

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

于 2012-11-04T20:54:41.600 回答
1

好的,所以假设我有两张图片(A 和 B)与另一张略有失真,它们之间存在平移、旋转和比例差异(例如,这些图片:)

原版莉娜 扭曲的莉娜


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);

干杯,

于 2012-11-26T17:37:22.160 回答