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!
ein Nehmen geschätzt oder paar passende Merkmalspaare und wenden 4 Transformationen an, um zu prüfen, welche Transformation geeigneter ist. – nayab
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