Как использовать Гомографию для преобразования изображений в OpenCV?

у меня есть две фотографии (A и B), слегка искаженные одна от другой, где есть различия в переводе, вращении и масштабе между ними (например, эти фотографии:)

ORIGINAL LENADISTORTED LENA


Ssoooooooo мне нужно применить своего рода преобразование в pic B, чтобы компенсировать искажение/перевод/вращение, которое существует, чтобы сделать оба изображения с одинаковым размером, ориентацией и без перевода

Я уже извлек точки и нашел Гомографию, как показано ниже. Но я не знаю, как использовать Гомографию для преобразования 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);

спасибо,

2 ответов


вы хотите warpPerspective


вам не нужна гомография для этой проблемы. Вместо этого можно вычислить аффинное преобразование. Однако, если вы хотите использовать гомографию для других целей, вы можете проверить код ниже. Он был скопирован с этой очень подробная статья на фонетическое письмо.

Пример C++

// pts_src and pts_dst are vectors of points in source 
// and destination images. They are of type vector<Point2f>. 
// We need at least 4 corresponding points. 

Mat h = findHomography(pts_src, pts_dst);

// The calculated homography can be used to warp 
// the source image to destination. im_src and im_dst are
// of type Mat. Size is the size (width,height) of im_dst. 

warpPerspective(im_src, im_dst, h, size);

Пример Python

'''
pts_src and pts_dst are numpy arrays of points
in source and destination images. We need at least 
4 corresponding points. 
''' 
h, status = cv2.findHomography(pts_src, pts_dst)

''' 
The calculated homography can be used to warp 
the source image to destination. Size is the 
size (width,height) of im_dst
'''

im_dst = cv2.warpPerspective(im_src, h, size)