3D-реконструкция по калиброванным изображениям камеры

Я работаю над 3D реконструкцией. А теперь, когда я рассматриваю пару образов. У меня есть набор соответствующих точек. и у меня есть детали моей камеры. Например, у меня есть детали фокуса, матрица вращения и перевода (4 * 4). и я хочу проецировать свои точки в 3D (триангуляция). Итак, насколько я знаю, это довольно прямолинейно с помощью факторной алгебры. Но мне все еще нужно ясно понять это. У кого-нибудь есть идеи о том, как следовать этому? Я работаю в Matlab, поэтому мне нужно это реализовать! Я могу быть снова слишком широким или что-то в этом роде. Но, пожалуйста, направь меня!


person user1771732    schedule 31.10.2012    source источник
comment
еще слишком широко и расплывчато. мы здесь, чтобы помочь, а не научить вас всему процессу или сделать всю работу за вас.   -  person Marc B    schedule 31.10.2012


Ответы (1)


Вам нужно будет вычислить матрицу камеры на основе известных атрибутов камеры; это масштабирующая проекционная матрица, которая сопоставляет трехмерную однородную точку с вашими двумерными пиксельными координатами. (Обратите внимание, что если вам нужна достойная точность, вам также необходимо измерять и систематически исправлять искажения объектива вашей камеры, но это деталь второго порядка.)

Затем умножьте матрицу вашей камеры на матрицу позы (упомянутую вами матрицу вращения/перемещения 4x4), чтобы получить матрицу (скажем, T в целом), которая проецирует точку в выбранной вами трехмерной системе координат в (исправленные) пиксельные координаты вашей камеры. :

pixel vector Q.x  =  T * point P.x
             Q.y               P.y
             Q.z               P.z 
             Q.w                1

pixel coordinates  =  (Q.x/Q.w, Q.y/Q.w)
"pixel depth" = Q.z/Q.w

Вы можете инвертировать эту матрицу и использовать ее для проецирования координат пикселей в 3D-лучи, выбрав две глубины: одну в месте расположения камеры, а другую вне ее (лучше выбрать либо единичную глубину, либо точку в бесконечности). Вы не можете ожидать, что ваши лучи точно пересекутся, но вы можете получить наилучшее местоположение в зависимости от того, где два соответствующих луча находятся ближе всего; в более общем случае вы можете рассматривать пересечение произвольного числа лучей как задачу наименьших квадратов (в идеале, с учетом ошибки, ожидаемой от каждого луча).

person comingstorm    schedule 31.10.2012