Обратите внимание, что перевод оценивается с точностью до положительного скалярного фактора

аюсь найти вращение и перевод из функции гомографии. Сначала я вычисляю соответствующие характерные точки и используюfindHomography() Я вычислил матрицу гомографии. Затем, используяdecomposeHomographyMat()Я получил четыре результата ротации и перевода.

Код, который я использовал ниже:

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);

Теперь о том, как правильно вращать и переводить, как минимум, наиболее подходящий. Я даже проверил, является ли вращение допустимым, используя приведенную ниже функцию, и обнаружил, что все действительны.

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;
}

Пожалуйста, кто-нибудь подскажет мне, какую ценность я должен использовать. И является ли результирующий перевод масштабированным значением, которое можно использовать напрямую, в отличие от случая декомпозиции Essential Matrix? Я очень признателен, если кто-нибудь поможет мне найти это.

Спасибо Вам!

Ответы на вопрос(2)

Ваш ответ на вопрос