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

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

ОРИГИНАЛ ЛЕНЫИСКАЖЕННАЯ ЛЕНА


Ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо-это то, что мне нужно, это применить своего рода преобразование к рисунку 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);

Ваше здоровье,


person marcelosalloum    schedule 26.11.2012    source источник


Ответы (2)


Вам нужна функция warpPerspective. Этот процесс аналогичен описанному в этой учебник (для аффинных преобразований и деформаций)

person Hammer    schedule 26.11.2012

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

Пример 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)
person Satya Mallick    schedule 13.01.2016