2012-11-26 10 views
10

Ho due immagini (A e B) leggermente distorte uno dall'altro, dove ci sono traslazione, rotazione e scala differenze tra loro (per esempio, queste immagini :)COME USARE L'OOMOGENO per trasformare le immagini in OpenCV?

ORIGINAL LENA DISTORTED LENA


Ssoooooooo quello che serve è di applicare un tipo di trasformazione in pic B in modo da compensare la distorsione/traduzione/rotazione che esiste per rendere entrambe le immagini con la stessa dimensione, orientamento e senza traduzione

ho già ha estratto i punti e trovato l'omografia, come mostrato sotto. Ma non so come usare l'Homography per trasformare Mat img_B in modo che assomigli a Mat img_A. Qualche idea?

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

Cheers,

risposta

5

si desidera che la funzione di warpPerspective. Il processo è analogo a quello presentato nel tutorial this (per trasformazioni e orditi affini)

7

Non hai bisogno dell'omografia per questo problema. Puoi invece calcolare una trasformazione affine. Tuttavia, se si desidera utilizzare l'omografia per altri scopi, è possibile controllare il codice qui sotto. È stato copiato da this molto dettagliato articolo su homography.

C++ Esempio

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

pitone Esempio

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