Питон от однородной до неоднородной сюжетной линии - PullRequest
1 голос
/ 03 октября 2019

Я нашел статью о эпиполярной геометрии.

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

s

Я рассчитал линию, которая находится в однородных координатах. Как я мог нарисовать эту линию на картинке, как в примере? Я думал о преобразовании линии из однородных в неоднородные координаты. Я думаю, что это может быть достигнуто путем деления x и y на z

Например, однородный:

x=0.0295
y=0.9996
z=-265.1531

на неоднородный:

x=0.0295/-265.1531
y=0.9996/-265.1531

так:

x=-0.0001112564778612809
y=0.0037698974667842843

Эти цифры кажутся мне неправильными, потому что они такие маленькие. Это правильный подход? Как я могу представить свой результат в изображение?

1 Ответ

1 голос
/ 03 октября 2019

x, y и z, которые у вас есть, являются параметрами уравнения "Эпиполярные линии", которые отображаются под формулой "линия на изображении" на слайдах, но помечены a, * 1005. * и c соответственно, то есть:

au + bv + c = 0

Решения для этого являются точками на линии. например, в Python я определил бы a как некоторые точки на оси x изображения, и решил бы для b:

import numpy as np

F = np.array([
    [-0.00310695, -0.0025646,  2.96584],
    [-0.028094,   -0.00771621, 56.3813],
    [13.1905,    -29.2007,  -9999.79],
])

p_l = np.array([
    [343.53],
    [221.70],
    [  1.0],
])

lt = F @ p_l

# if you want to normalise
lt /= np.sqrt(sum(lt[:2] ** 2))

# should give your values [0.0295, 0.9996, -265.2]
print(lt)

a, b, c = lt.ravel()

x = np.array([0, 400])
y = -(x*a + c) / b

, а затем просто провел бы линию между этими точками

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