Нахождение трехмерного положения камеры, используемой для съемки 2D - PullRequest
5 голосов
/ 28 октября 2011

Имеется ли 3D-сцена и 2D-изображение части этой сцены, можно ли найти положение камеры, использованной для создания изображения?

Ответы [ 4 ]

6 голосов
/ 28 октября 2011

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

Поэтому ваш вопрос заключается в том, где камера могла бы произвести это отображение измодель в изображение?

Камера выполняет аффинное преобразование вида M x + T = y, где x - это вектор в 3-пространстве, представляющий точку в модели, а y - это 2-пространствовектор, представляющий точку на изображении.Учитывая четыре значения для x и y, это простая матрично-арифметическая задача, которую нужно решить для M и T (вероятно, лучше всего получить MATLAB, чтобы помочь вам здесь.)

Теперь, как вы переводите Mи T для положения, местоположения и фокусного расстояния камеры?Там это становится немного волосатым, но эта страница должна помочь вам (просто помните, что вы делаете все назад ).

5 голосов
/ 28 октября 2011

Если вы берете случайную выборку параметров камеры, визуализируя сцену с каждым набором параметров, вы можете взять наилучшие совпадения в качестве отправной точки.Затем вы можете выполнить локальную оптимизацию параметров камеры, чтобы найти те параметры, которые воспроизводят 2D-изображение ближе всего.Это не быстро, но теоретически вы могли бы придумать очень хорошие догадки, если бы у вас было достаточно времени.

3 голосов
/ 28 октября 2011

Вам нужно больше информации, но не нужно гораздо больше информации.

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

Учитывая угол обзора, отрезок линии (или, возможно, два) с известной длиной, вы можете очень близко приблизиться к точномурасположение камеры с небольшим количеством тригонометрии.например, для приблизительной оценки расстояния:

   / |
  /  |
 /_d_I-segment
 \   |
  \  |
   \ |

distance "d", field of view angle "FoV"

picture.physicalsize/d == tan(FoV/2)
picture.physicalsize/segment.physicalsize == picture.pixelsize/segment.pixelsize

thus
d = segment.physicalsize*(picture.pixelsize/segment.pixelsize)/tan(FoV/2)

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

1 голос
/ 28 октября 2011

Да, но это зависит.Если камера не слишком сильно искажает изображение, простая тригонометрия от ninjagecko может сработать, но опять-таки зависит от вашего приложения.Если вы хотите узнать, как сделать это более понятным и более математическим способом, проверьте это http://www.ces.clemson.edu/~stb/projective/.

...