2016-08-14 5 views
3

Я пытался вычислить функции в 2 изображениях, а затем передать эти функции обратно CameraParams.R без везения. Функции вычисляются и сопоставляются успешно, однако проблема заключается в их возврате в R & t.Оценка R/T от гомографии

Я понимаю, что вы должны разложить Homography, чтобы это было возможно, что я сделал, используя что-то вроде этого: https://github.com/syilma/homography-decomp, но действительно ли я делаю это правильно?

Прямо сейчас я просто с помощью:

Matching:

vector< vector<DMatch> > matches; 
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(algorithmName); 
matcher->knnMatch(descriptors_1, descriptors_2, matches, 50); 

vector<DMatch> good_matches; // Storing good matches here 

Я заметил, что good_matches нигде не используется. Поэтому, я думаю, мой вопрос в том, как я могу пройти обратно good_matches до cameras.R/t?

Извлечение омографии:

Mat K; 
cameras[img_idx].K().convertTo(K, CV_32F); 

findHomography -> decomposeHomography(H, K, outputR,outputT,noarray()). 

Затем, используя библиотеку выше, я пройти в значениях от R & t но ответ является то, что гомография не найден в 4-х возможных исходов.

Я на правильном пути здесь? Похоже, что разложениеГомография - это трехмерное решение, но findHomography - 2D?

Абсолютная Цель:

Уточнить CameraParam.R/t в зависимости от особенностей, обнаруженных на изображениях.

Почему? Потому что я сейчас перехожу в .R из матрицы вращения устройств, но вращение немного неточно. Узнайте больше об этом по моему предыдущему вопросу: Refining Camera parameters and calculating errors - OpenCV

+0

Я хотел бы знать, если это лучше этот код (https://github.com/LaurentBerger/TestHomograhy) – LBerger

+0

Я попробую! Спасибо @LBerger –

+0

Быстрый вопрос, я читал документацию OpenCV в & out и нашел несколько интересных функций, которые могли бы помочь мне достичь моей цели. Что вы думаете о 'calibrateCamera' /' calibrationMatrixValues'/'solvePNP'? @LBerger –

ответ

2

Если вы используете рассчитанный R для сшивки изображений, тогда нет необходимости использовать разложение гомографии. Цельный трубопровод предполагает нулевой перевод. Таким образом, он дает идеальный выход только для случая поворота, а небольшая ошибка вводится с введением перевода в позе камеры. Если вы посмотрите на opencv-вычисление R из гомографии, он предполагает перевод 0.

Mat R = K_from.inv() * pairwise_matches[pair_idx].H.inv() * K_to; 
cameras[edge.to].R = cameras[edge.from].R * R; 

Исходный код можно найти в функции motion_estimators.cpp -> calcRotation. Приходит к вашему вопросу использования хоромах для расчета R.goodmatches фактически используется для расчета гомографии матрицы, используя findhomography функции

Таким образом, весь процесс будет как

  1. Найти матчи (как вы упомянули)

  2. Find гомографию матрицу из этих матчей используя findhomography

  3. calcrotation функции, чтобы найти R
  4. Найти фокусным с помощью findfocalfromhomography функции и создать характеристическую матрицу
  5. Использования сновальщика, seamfinder и блендер для вывода окончательного сшивания
+0

Мне нравится, как вы просматриваете все мои вопросы и отвечаете на них с помощью интеллекта :) Спасибо! –

Смежные вопросы