cvReprojectImageTo3D - 3d моделирование из 2d изображений проблема-

Мне очень нужна ваша помощь в этом вопросе. Я пытаюсь смоделировать простую сцену в 3D из 2D-изображений. я использую 2 изображения (левое и правое — знаменитая сцена цукубы) http://www.cc.gatech.edu/classes/AY2003/cs7495_fall/ProblemSets/Data/tsukuba-right.bmp я получаю карту несоответствий. как этот. http://www.robots.ox.ac.uk/~ojw/2op/tsukuba_score.png

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

cvStereoRectify (чтобы получить Q) cvReprojectImageTo3D (карта диспаратности, 3dimage, Q)

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

пожалуйста помогите спасибо


person ardavar    schedule 19.07.2011    source источник
comment
Был ли ответ в порядке, или вам нужна дополнительная информация?   -  person jmartel    schedule 20.07.2011


Ответы (1)


Выдержка из документа opencv:

" Функция StereoRectify вычисляет матрицы поворота для каждой камеры, которые (виртуально) делают плоскости изображения обеих камер одной и той же плоскостью. Следовательно, это делает все эпиполярные линии параллельными и, таким образом, упрощает задачу плотного стереосоответствия. На входе функция принимает вычисленные матрицы с помощью StereoCalibrate() и на выходе выдает 2 матрицы вращения, а также 2 матрицы проекций в новых координатах».

Ответ:

Имеется в виду 3 варианта:

  • Или у вас есть два изображения, и вы знаете модель своей камеры (интрисикс), которую вы загрузили из XML, например, loadXMLFromFile() => StereoRectify() => reprojectImageTo3D()

  • Или у вас их нет, но вы можете откалибровать камеру => stereoCalibrate() => StereoRectify() => reprojectImageTo3D()

  • Или вы не можете откалибровать камеру (это ваш случай, потому что у вас нет камеры сэра Цукубы, тогда: вам нужно найти пары ключевых точек на обоих изображениях с помощью SURF, SIFT, например (вы можете использовать любой детектор блоба на самом деле ), затем вычислить дескрипторы этих ключевых точек, затем сопоставить ключевые точки с правого и левого изображения в соответствии с их дескрипторами, а затем найти из них фундаментальный мат. Обработка намного сложнее и будет выглядеть так: detect ключевые точки (SURF, SIFT) => извлечь дескрипторы (SURF, SIFT) => сравнить и сопоставить дескрипторы (подходы, основанные на BruteForce, Flann) => найти фундаментальный мат (findFundamentalMat()) из этих пар => StereoRectifyUnCalibrated() => reprojectImageTo3D( )

Я надеюсь, что это помогло вам, если нет, пожалуйста, дайте мне знать

Жюльен,

person jmartel    schedule 19.07.2011