Encontrar rotação e tradução mais adequadas a partir da decomposição da homografia
Estou tentando encontrar a rotação e tradução da função Homografia. Primeiro, eu calculo os pontos de recurso correspondentes e usandofindHomography()
Eu calculei a Matriz de Homografia. Então, usandodecomposeHomographyMat()
, Obtive quatro resultados de rotação e tradução.
O código que usei está abaixo:
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);
Agora, qual é a rotação e translação corretas, pelo menos a mais adequada. Cheguei a verificar se a rotação é válida usando a função abaixo e descobri que todas são 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, alguém me sugere, que valor devo usar. E a tradução resultante é um valor escalado, que pode ser usado diretamente, diferente do caso de decomposição da Matriz Essencial? Aprecio muito se alguém puder me orientar a encontrar isso.
Agradecendo você!