2012-06-15 5 views
21

Wenn Sie die findHomography Funktion von OpenCV verwenden, um eine Homographie zwischen zwei Punktgruppen aus verschiedenen Bildern zu schätzen, erhalten Sie manchmal eine schlechte Homographie aufgrund von Ausreißern innerhalb Ihrer Eingabepunkte, selbst wenn Sie RANSAC oder LMEDS verwenden.Wie können Sie feststellen, ob eine Homographiematrix akzeptabel ist oder nicht?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

Wie können Sie feststellen, ob die resultierende 3x3-Homographiematrix akzeptabel ist oder nicht?

Ich habe eine Antwort hier in Stackoverflow und in Google gesucht und konnte es nicht finden.

fand ich diesen Artikel, aber es ist mir ein bisschen kryptisch:

"The geometric error for homographies"

+2

Siehe Frage http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

Wenn Ihre Kamerabewegung begrenzt ist, könnten Sie versuchen, Ihre Homographie zu zerlegen und Testskala, Rotation und/oder Translationsparameter für drastische Werte. Andere Methode: Wenn Sie wissen, dass sich große Teile der Bilder überlappen sollen (oder die Einschränkung nehmen), können Sie die Überlappung nach dem Warpen berechnen und entscheiden, ob es sich um eine offensichtlich falsche Homographie handelt. Andere Methode: Wenn Sie RANSAC verwenden, können Sie aus der Nummer von inlier (und/oder dem Verhältnis inlier/total) entscheiden, ob die Homographie abgelehnt werden soll) – Micka

+0

@Micka danke für Ihre Hilfe, ich habe bereits RANSAC benutzt, die Kamerabewegung ist nicht begrenzt und ich suchte nach Methoden, um Homographien (hauptsächlich mathematische) zu verwerfen, bevor ich in schwerere Berechnungen wie die Anwendung der Homographie und die Überprüfung auf Überlappung ging. –

Antwort

22

Der beste Weg, zu sagen, ob die Homografie ist akzeptabel ist.

1- Nehmen Sie die Punkte eines Bildes und projizieren Sie sie erneut mit der berechneten Homographie.

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2- Berechne die euclidean distance zwischen den neu projizierte Punkte und den realen Punkte im Bild.

Reprojection error für einen Punkt. p ist der projizierte Punkt und q ist der wahre Punkt.

enter image description here

3- eines treshold Stellen, die akzeptabel, wenn der Reprojektion Fehler entscheidet ist.

Zum Beispiel wäre ein Fehler größer als ein Pixel für viele Tracking-Anwendungen nicht akzeptabel.

+11

Was Sie vorschlagen, ist für das Tracking gültig, wenn Sie wissen, dass wahrscheinlich zwei Bilder ein Patch an ähnlichen Orten teilen. Wenn Sie eine Homographie zwischen zwei verschiedenen Bildern berechnen, um zu überprüfen, ob ein Bild das andere enthält, ist der Reprojektionsfehler überhaupt nicht nützlich. Zum Beispiel bekomme ich in meinem Fall oft, dass viele (~ 30) Punkte von einem Bild auf denselben Punkt (oder wenige, nahe Punkte) in einem zweiten Bild abgebildet werden. Haben Sie Vorschläge für diesen Fall? –

Verwandte Themen