Извините, если раньше об этом спрашивали, но я не смог найти правильный ответ на свой вопрос.
Для лучшего понимания позвольте мне кратко объяснить контекст моей проблемы
Контекст
У меня есть два изображения (A и B) с неплоским объектом на нем.Я хотел бы иметь возможность взять координату пикселя pA из A и спроецировать ее на B. Поскольку моя сцена не плоская, я не могу использовать гомографию.Я хочу сначала спроецировать свой пиксель pA в трехмерный мир, а затем спроецировать результат на изображение B, чтобы получить pB.pA (2D) -> pWorld (3D) -> pB (2D).К счастью, я знаю координату z pworld.Мой вопрос касается первого шага pA (2D) -> pWorld (3D).
Вопрос
Как спроецировать мою 2D точку pA (u, v) вмир (pWorld = (X, Y, Z)), Z дается?У меня также есть внешняя матрица Rt (3x4) и внутренняя матрица K (3x3) моей камеры.
Что я пробовал
Я знаю, что: s*(u v 1)' = K * Rt * (X Y Z)' [1]
s - это шкала.Но я хотел бы иметь противоположный процесс, Z дается.Что-то вроде:
(X Y) = SOMETHING * (u v)
Я могу переписать [1], чтобы получить s*(u v 1/s 1/s)' = G * (X Y Z 1)'
с G = (l1 l2 l3 l4) (l означает строку)
l1 = первая строка (K * Rt)
l2 = вторая строка (K * Rt)
l3 = 0 0 1 / Z 0
l4 = 0 0 0 1
G является обратимым, и тогда я могу получить (X Y Z 1)' = inv(G) * (us vs 1 1)'
Но я не могу использовать это, так как не знаю масштаб.Я думаю, что я немного сбит с толку относительно этого масштаба.Я знаю, что обычно мы нормализовались, чтобы избавиться от этого, но здесь я не могу.
Может быть, это плохой способ продолжить.Если кто-то может объяснить мне хороший способ, я был бы очень рад услышать об этом.
Заранее спасибо.