Объяснение проекционной матрицы камеры-обскуры

введите описание изображения здесьЯ пытаюсь решить прикрепленный вопрос после прочтения некоторых материалов о камерах-обскурах и их проекции матрицы установлены, и я все еще не уверен, что понимаю всю математику. в прилагаемом вопросе при перемещении COP камеры на -2Zp, насколько я понимаю, я в основном увеличиваю фокусное поле для камеры, что в основном дает мне ту же матрицу, что и та, что дана только сейчас, третий элемент строки 3 равен 1 / 3Zp а не 1 / Zp, это правильно?

если да, то как бы вы вычислили новую позицию t, умножив ее на новую матрицу, которую я получил, и дайте мне (0, Yp, 2/3) T. это решение, чтобы убедиться, что последнее число равно 1, а не 2/3, поэтому я получаю (0,2Yp / 3, 1). может кто-нибудь объяснить, как в этом случае работают однородные координаты?

Кроме того, что c довольно ясно, я получу ортогональную проекцию. Может кто-нибудь помочь с разделом d?


person Amit Ofer    schedule 23.05.2015    source источник


Ответы (2)


Может помочь нарисовать диаграмму. Вы можете упростить задачу, игнорируя координату x, которая переводит все в 2D. На этой более простой диаграмме, чтобы найти проекцию точки t на плоскость PP, просто проведите линию от положения точечного отверстия до точки. Это позволяет очень легко определить на диаграмме, на какую точку должна проецироваться каждая точка. Вы можете использовать это, чтобы проверить свои расчеты по матрицам.

У вас есть половина ответа, если бы у нас было точечное отверстие в начале координат, а плоскость находилась на расстоянии 3Zp, матрица была бы

    ( 1   0   0     0   )
M = ( 0   1   0     0   )
    ( 0   0   1/3Zp 0   )

Это работает, только если точечное отверстие находится в начале координат. В части а) это не так.

Что вам нужно сделать, так это применить перевод. В случае а) переведите все, чтобы COP2 находился в исходной точке, примените проекцию, затем примените инверсию перевода. Вещь будет работать проще, если мы добавим четвертую строку к M

    ( 1   0    0      0 )
M = ( 0   1    0      0 )
    ( 0   0    1      0 )
    ( 0   0    1/3Zp  0 ) Note modified form.

Перенос расстояния d по оси z определяется выражением

    ( 1   0   0   0 )
T = ( 0   1   0   0 )
    ( 0   0   1   d )
    ( 0   0   0   1 )

Обратное будет просто

    ( 1   0   0   0 )
T'= ( 0   1   0   0 )
    ( 0   0   1  -d )
    ( 0   0   0   1 )

Чтобы получить окончательную матрицу проекции, найдите

T' M T.

Наконец, мы переходим от 4D (x, y, z, w) к 3D (x, y, w), отбрасывая третью координату. Вы можете сделать это, умножив на матрицу 3X4.

Обратите внимание, см. перспективную проекцию раздела матрицы преобразования для правильной формы перспективной проекции.

Чтобы сделать это явным, пусть a = Zp. Перевод

    ( 1   0   0   0    )
T = ( 0   1   0   0    )
    ( 0   0   1   -2 a )
    ( 0   0   0   1    )

а проекция на плоскость 3Zp из начала координат равна

    ( 1   0    0        0 )
M = ( 0   1    0        0 )
    ( 0   0    1        0 )
    ( 0   0    -1/(3a)  0 )

Найдите T 'M T, который оказывается

    ( 1   0    0       0    )
N = ( 0   1    0       0    )
    ( 0   0   1/3    -2/3 a )
    ( 0   0  -1/(3a)  2/3   )

Мы обращаемся к нашим двум точкам

    (  0  )   (  0  )    (  0  )
 N  (  Yp ) = (  Yp ) -> (  Yp )
    ( -a  )   ( -a  )    ( -a  )
    ( 1   )   (  1  )

    (  0  )   (  0     )    (  0      )
 N  (  Yp ) = (  Yp    ) -> (  3/4 Yp )
    ( -2a )   ( -4/3 a )    ( -a      )
    ( 1   )   (  4/3   )

Где последний шаг делит на w, поэтому у нас есть координаты (x, y, z), лежащие в плоскости z = -a = -Zp. Это согласуется с тем, что мы получаем из диаграммы. Если хотите, можете опустить 3-й ряд N.

person Salix alba    schedule 24.05.2015
comment
Спасибо, я подумал, что, может быть, мне нужно использовать перевод, но я не был уверен. так что b просто применяет матрицу к p, проверяя, что она остается той же самой, затем применение к t, c - это просто ортогональная проекция, тогда как насчет d? Я предполагаю, что если мой КПД меняется, и я хочу сохранить тот же прогноз, я должен поддерживать такое же соотношение или что-то в этом роде. как мне это сделать? - person Amit Ofer; 24.05.2015
comment
Кстати, относительно a, в чем разница между PP на 3Zp или COP на -2Zp и PP на Zp? и еще кое-что, если вы правы в использовании перевода, разве это не означает, что M остается прежним, поэтому в нем должна быть 1 / Zp вместо 1 / 3Zp? - person Amit Ofer; 24.05.2015
comment
Кроме того, я не думаю, что вам нужно добавлять 4-ю строку, поскольку я понимаю, что вы должны перейти от 3d к 2d, потому что Z является постоянным в Zp, поэтому, переходя от 4 однородных координат, вы используете матрицу 4X3 и получаете 3 числа, где последнее не Z, это W, и вам нужно разделить на него, чтобы получилось 1. Вот почему, если вы возьмете точку t и умножите ее на матрицу в вопросе, вы получите (0, Yp, 2) T, и если вы хотите отобразить его в однородных координатах, вы разделите на 2 и получите (0,0.5Yp, 1) T, как написано в вопросе. Правильно? - person Amit Ofer; 24.05.2015
comment
Думаю, вам нужны матрицы 4X4 для промежуточных шагов. Я думаю, что матрица проекции, указанная в вопросе, неверна. Это должно быть так, как указано в моем исправленном ответе. - person Salix alba; 24.05.2015
comment
(Вычеркните предыдущий комментарий) Ах, да, я понимаю, что происходит. Я неправильно понял, о чем была матрица проекции. Я думаю, вам будет проще использовать матрицы 4X4 для промежуточных этапов и перейти к 3D только на самом последнем этапе. - person Salix alba; 24.05.2015
comment
Я все еще немного сбит с толку, я попытался умножить матрицы, как вы сказали, с помощью калькулятора матриц, но затем, когда я умножаю матрицу результатов на PI, получаю другую точку, я получаю (0, Yp, -Zp, 2), что выглядит неправильно . Не могли бы вы показать мне расчеты для получения M, а затем проверить, что P остается в том же положении? потому что сейчас я не совсем уверен, что это правда. Кроме того, если я попытаюсь сделать диаграмму, как вы сказали, и использовать похожие треугольники, мне не очень понятно, почему вам нужно все переводить, потому что если вы это сделаете, вы также переместите PP. перемещение COP и выход из PP выглядит как изменение f - person Amit Ofer; 24.05.2015
comment
Я рассматриваю этот PPT как объяснение матрицы проекции: course.cs.washington.edu/courses/cse576/08sp/lectures/ - person Amit Ofer; 24.05.2015
comment
Цель перевода - действительно изменение координат. Сначала мы меняем координаты, так что COP2 является началом координат, делаем проекцию, а затем снова меняем координаты. - person Salix alba; 24.05.2015
comment
это не объясняет, зачем это нужно делать, это все равно что сказать, что цель перевода - сделать перевод? как я вижу, если вы хотите переместить COP2 в начало координат и применить перевод, вы также меняете положение PP. если я нарисую простую диаграмму камеры-обскуры в 2d, поскольку я могу игнорировать X, то это в основном то же самое, что взять камеру с f = 3Zp. если я ошибаюсь, поправьте меня и покажите, как построить окончательную матрицу. тест будет в соответствии с разделом b, чтобы умножить на точку p и убедиться, что она остается на том же месте - person Amit Ofer; 24.05.2015
comment
См. Обновленный ответ. Я ясно дал понять. В итоговой матрице вы получаете дополнительные ненулевые члены. - person Salix alba; 24.05.2015
comment
спасибо, я проверяю расчеты прямо сейчас, но не должен ли первый перевод быть 2а, а обратным -2а. вы переводите COP2 в origin или наоборот. Изменить: или a = -zp, я не понимаю, почему в M его -1 / 3a, разве это не должно быть положительным? - person Amit Ofer; 24.05.2015

Хорошо, теперь относительно C и D. в C Я предполагаю, что если вы переместите COP по оси Z на бесконечность, вы получите ортогональную проекцию. но я не уверен, будет ли матрица:

    ( 1   0    0    0 )
M = ( 0   1    0    0 )
    ( 0   0    0    0 )

or

    ( 1   0    0    0 )
M = ( 0   1    0    0 )
    ( 0   0    0    Zp )

С D я понятия не имею, вам нужно каким-то образом сохранить соотношение, чтобы t проецировалось таким же образом, и я понимаю, что вам нужно выбрать координату Z для PP как функцию нового COP, но я не уверен Куда пойти отсюда.

person Amit Ofer    schedule 24.05.2015
comment
Вы можете сделать то же самое вычисление, но имея a = расстояние от начала координат до плоскости и b = расстояние от COP до начала координат. Вы можете рассчитать итоговую матрицу проекции. Тогда возьмем пределы как b- ›бесконечность. Окончательное решение похоже на вашу вторую матрицу, но нижний правый член равен 1. Это должно быть так, иначе вы получите некоторое масштабирование при преобразовании из однородных координат. - person Salix alba; 25.05.2015
comment
Для части d) используйте общую матрицу из предыдущего комментария. Затем примените эту матрицу к t. Затем вам нужно будет найти файл. - person Salix alba; 25.05.2015