Вычислить основную матрицу из матрицы гомографии - PullRequest
2 голосов
/ 24 июня 2019

В своем коде Python / OpenCV я использую случайные гомографии для имитации изменений точек обзора (я оцениваю детекторы точек интереса и хочу избежать поиска пар изображений).

Возможно ли вычислить эпиполярные линииа основная матрица между одним изображением и его искаженной версией?Единственная информация, которую я имею, - это гомография, которую я применил.

Есть другие посты, в некоторой степени связанные с моей проблемой: Как рассчитать матрицы вращения и перевода из гомографии? , Как рассчитать матрицы вращения и перевода из гомографии? , Найти атрибутику гомографии из фундаментальной матрицы , но я понятия не имею, как сделать матрицу гомографии -> Эссенциальная матрица.

Если то, что я пытаюсь сделать, не имеет смысла, скажите, пожалуйста,мне почему.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Я не думаю, что вам нужна матрица Essential: «Фундаментальная матрица содержит ту же информацию, что и Essential Matrix, в дополнение к информации о внутренних характеристиках обеих камер, чтобы мы могли связать две камеры в пиксельных координатах».

Это руководство поможет вам понять, как вычислять эпиполярные линии по данным гомографии.Прежде всего, вам нужно найти несколько точек для подачи в cv.findFundamentalMat.Эти точки можно рассчитать по матрице гомографии - просто возьмите восемь или более случайных точек (pts1) и примените к ним матрицу гомографии (pts2).

F, mask = cv.findFundamentalMat(pts1, pts2, cv.FM_LMEDS)

Наконец, вы можете найти параметры эпилина из соответствующего изображения:

epilines1 = cv.computeCorrespondEpilines(pts2.reshape(-1,1,2), 2, F)
epilines2 = cv.computeCorrespondEpilines(pts1.reshape(-1,1,2), 1, F)
0 голосов
/ 09 июля 2019

Ваше предположение, что вы можете просто генерировать пары изображений для стерео таким образом, ошибочно.

Вам нужно два изображения с другим центром проекции (т. Е. Камера должна двигаться).

2D-гомография, примененная к существующим изображениям , не меняет центра проекции. Вы можете смоделировать 3D-вращение вокруг центра камеры, а не трансляцию.

Интуитивно понятно, что для определения эпиполярной геометрии вам необходима базовая линия. Базовая линия проходит через оба центра камеры. Если у вас есть два изображения с одинаковым центром камеры, базовая линия не определена. Вы не получаете информацию о несоответствии или глубине от таких изображений. Ни основные, ни фундаментальные матрицы не определены в вашей настройке.

Чтобы увидеть это математически, учтите, что 1D нуль-пространства матрицы проекции P вашего изображения дает центр C камеры в однородных координатах

C=null(P)

с

P*C = 0

Теперь для деформированного изображения у вас все еще есть

H*P*C = H*0 = 0

тот же центр камеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...