Начальная точка: http://en.wikipedia.org/wiki/Pinhole_camera_model и один из справочника: Ричард Хартли и Эндрю Циссерман (2003).Multiple View Geometry в компьютерном зрении.Издательство Кембриджского университета.
Для реализации на C ++: http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html
Очень простой подход: имейте в виду, что это просто для объяснения общих принципов.
Предполагая, что вы знаете меры в реальном мире сеток на стенах (керамическая плитка?), Вы можете откалибровать камеру и получить внутренние и внешние параметры камеры;из этих параметров вы можете получить положение камеры на сцене реального мира ( центр камеры ).
Например, вы можете поместить начало координатной системы XYZ в верхний угол, гдеправая вертикальная стена встречается со стенкой, обращенной к камере, затем вы измеряете в реальном мире координаты углов каждой плитки в системе отсчета XYZ, поэтому у вас есть набор трехмерных точек (назовем их objectPoints
), единица измеренияиз этих точек миллиметр (или дюйм).
3D-точки не должны быть на одной плоскости.
Тогда вам нужно найти те же точки на изображении, и вы получите набор2D точек, «единицей измерения» этих точек является пиксель (давайте назовем их imagePoints
).
3D-2D соответствие - это входные данные для алгоритма, который дает вам параметры камеры (см. дляпример http://en.wikipedia.org/wiki/Camera_resectioning или функция OpenCV calibrateCamera
http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html#cv-calibratecamera, которые принимают objectPoints
в качестве первого параметра и imagePoints
в качестве второго параметра)
Из параметров камерыВы можете получить центр камеры , то есть расстояние от камеры до (0,0,0) эталонной системы XYZ.