2017-11-13 3 views
1

Ich versuche, die Rotation und Übersetzung von Homography-Funktion zu finden. Zuerst berechne ich die entsprechenden Punkte und benutze findHomography() Ich berechnete die Homography Matrix. Dann, unter Verwendung von decomposeHomographyMat(), habe ich vier Dreh- und Übersetzungsergebnisse erhalten.Am besten geeignete Rotation und Übersetzung von Homographie Zerlegung

Der Code, den ich unter verwendet:

Mat frame_1, frame_2; 


frame_1 = imread("img1.jpg", IMREAD_GRAYSCALE); 
frame_2 = imread("img2.jpg", IMREAD_GRAYSCALE); 

vector<KeyPoint> keypts_1, keypts_2; 
Mat desc1, desc2; 

Ptr<Feature2D> ORB = ORB::create(100 ); 
ORB->detectAndCompute(frame_1, noArray(), keypts_1, desc1); 
ORB->detectAndCompute(frame_2, noArray(), keypts_2, desc2); 

Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create("BruteForce-Hamming"); 
vector<DMatch> matches; 
matcher->match(desc1, desc2, matches); 

vector<Point2f>leftPts, rightPts; 
    for (size_t i = 0; i < matches.size(); i++) 
    { 
     //queryIdx is the left Image 
     leftPts.push_back(keypts_1[matches[i].queryIdx].pt); 

     //trainIdx is the right Image 
     rightPts.push_back(keypts_2[matches[i].trainIdx].pt); 
    } 

Mat cameraMatrix = (Mat1d(3, 3) << 706.4034, 0, 277.2018, 0, 707.9991, 250.6182, 0, 0, 1); 
Mat H = findHomography(leftPts, rightPts); 
vector<Mat> R, t, n; 
decomposeHomographyMat(H, cameraMatrix, R, t, n); 

Nun, was die richtige Rotation und Translation, zumindest am besten geeignet. Ich überprüfte sogar, ob die Rotation gültig ist, indem ich die unten stehende Funktion nutze, und alle waren gültig.

bool isRotationMatrix(Mat &R) 
{ 
    Mat Rt; 
    transpose(R, Rt); 
    Mat shouldBeIdentity = Rt * R; 
    Mat I = Mat::eye(3, 3, shouldBeIdentity.type()); 

    return norm(I, shouldBeIdentity) < 1e-6; 
} 

Bitte einige vorschlagen, welchen Wert sollte ich verwenden. Und ist die resultierende Übersetzung ein skalierter Wert, der im Gegensatz zum Zerlegungsfall der Essential Matrix direkt verwendet werden kann? Ich schätze es sehr, wenn mir jemand dabei helfen kann.

Vielen Dank!

+0

ein Nehmen geschätzt oder paar passende Merkmalspaare und wenden 4 Transformationen an, um zu prüfen, welche Transformation geeigneter ist. – nayab

+0

Danke @nayab, aber wird hilfreich sein, wenn Sie mir einen kleinen Code vorschlagen können, um es zu überprüfen. Ich habe das Gefühl, alle Ergebnisse projizieren auf denselben Punkt. – Althaf

Antwort

1

Ich habe die Funktion 'filterHomographyDecompByVisibleRefpoints' von Vaesper verwendet. Sie können den Code here überprüfen.

Sie müssen nur die Rotationsmatrix eingeben, die Normalen, die von decomposeHomographyMat erhalten werden, und die Punktkorrespondenzen, die verwendet werden, um die Homographiematrix zu erhalten. Die obige Funktion gibt 2 mögliche Lösungen zurück. Sie können mehr über diese Idee in der Antwort von Ebya here sehen.

Nachdem Sie die 2 möglichen Lösungen erhalten haben, müssen Sie je nach Fall einige Prüfungen durchführen, um die richtige Lösung zu finden. Da ich die Identitätsmatrix für die Kameramatrix verwendet habe, sind die erhaltenen Übersetzungswerte in Pixeln und müssen mit einem externen Sensor skaliert werden. In meinem Fall ist der Abstand zwischen der Kamera und dem planaren Objekt in der z-Achse festgelegt, daher habe ich gerade berechnet, was 1 Pixel in Welteinheiten darstellt.

+0

"Die erhaltenen Übersetzungswerte sind in Pixel angegeben" - ich denke nicht, dass Sie damit recht haben. R und T sind die äußere Pose der Kamera, sie sind in Weltkoordinaten (etwa mm oder m) angegeben. –

+0

@FelixGoldberg, oh ja, ich habe meinen Fall nicht vollständig erwähnt. Ich habe die Kameramatrix als Identität angegeben, also in Pixel. Ich werde meine Antwort bearbeiten. – Ankit

1

Und ist die resultierende Übersetzung ein skalierter Wert, der direkt im Gegensatz zum Zerlegungsfall der Essential Matrix verwendet werden kann?

Leider nicht.

Die Referenz für die OpenCV implemenations, Malis & Vargas, sagt dies auf S. 8:

Beachten Sie, dass die Übersetzung auf einen positiven Skalar Faktor

Verwandte Themen