Encontrar la rotación y traducción más adecuadas de la descomposición de la homografía
Estoy tratando de encontrar la rotación y la traducción de la función de homografía. Primero calculo los puntos de característica correspondientes y usofindHomography()
Calculé la matriz de homografía. Luego, usandodecomposeHomographyMat()
, Obtuve cuatro resultados de rotación y traducciones.
El código que usé está debajo:
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);
Ahora, ¿cuál es la rotación y traslación correcta, al menos la más adecuada? Incluso verifiqué si la rotación es válida con la siguiente función, y descubrí que todas son válidas.
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;
}
Por favor, alguien me sugiera, qué valor debo usar. ¿Y la traducción resultante es un valor escalado, que se puede usar directamente, a diferencia del caso de descomposición de Essential Matrix? Aprecio mucho que alguien pueda guiarme para encontrar esto.
¡Agradeciendote!