Как преобразовать 3D-облако точек (извлеченное из разреженной 3D-реконструкции) в миллиметры?

Используя стереозрение и основываясь на книге Multiple View Geometry (http://www.robots.ox.ac.uk/~vgg/hzbook/), я создал трехмерное облако точек в MATLAB.
Для этого я сначала откалибровал камеры и редактировал стереоизображения. Затем извлечение признаков и сопоставление. Затем устранены шумные сопоставления на основе местоположения камеры. Наконец-то создал 3D-облако точек с помощью триангуляции.

Теперь у меня вопрос: как преобразовать это 3D-облако точек из пиксельной области в реальную миллиметровую/сантиметровую область, зная мое фокусное расстояние и матрицы калибровки камеры?< /strong> цель состоит в том, чтобы найти ГЛУБИНУ В МИЛЛИМЕТРАХ.

Я знаю, как это сделать в случае карты несоответствия/глубины, используя формулу: Z=(t*f)/ д.
Но здесь, в разреженном случае, могу ли я сделать что-то подобное? http://matlab.wikia.com/wiki/FAQ#How_do_I_measure_a_distance_or_area_in_real_world_units_instead_of_in_pixels.3F


person CV_passionate    schedule 14.08.2014    source источник
comment
По сути, я хочу посмотреть, как я могу получить X, Y, Z в миллиметрах из трехмерного облака точек, созданного с помощью триангуляции.   -  person CV_passionate    schedule 14.08.2014


Ответы (1)


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

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

person Francesco Callari    schedule 15.08.2014
comment
Спасибо, что разъяснили мне это. Я очень ценю это. поскольку моя калибровка выполняется с помощью набора инструментов для калибровки камеры Калифорнийского технологического института (vision.caltech.edu/bouguetj/calib_doc) и вектор смещения в миллиметрах (120,0,0), то мое 3D-облако точек после триангуляции также должно быть в миллиметрах. ‹br/› Теперь мой вопрос: как интерпретировать трехмерное облако точек? Я предполагаю, что координата Z — это расстояние от камеры, но, судя по моим результатам, это действительно не имеет смысла! Также почему у меня отрицательные значения для X и Y ? - person CV_passionate; 15.08.2014
comment
Перечитайте мое первое и второе предложение. Формула, которую вы применяете, неверна, вычисление метров не делает ее правильной. Если вы (как это обычно бывает) сопоставляете после исправления изображений, вам нужно отменить исправление, а затем триангулировать. - person Francesco Callari; 17.08.2014
comment
Но я не использую эту формулу! то есть для плотной реконструкции с использованием карты несоответствия! Я не пойду туда! Я делаю редкую реконструкцию. поэтому я сначала откалибровал камеры, затем исправлял изображения и обрезал их, затем извлекал признаки и сопоставлял их с помощью SIFT, затем оценивал фундаментальную матрицу, используя метод золотого стандарта из книги, затем вычислял основную матрицу из калибровочных матриц камеры, затем матрицы камеры из основной матрицы и, наконец, триангуляция для поиска трехмерного облака точек. - person CV_passionate; 18.08.2014
comment
могу я узнать, почему мне нужно отменить ректификацию перед триангуляцией? - person CV_passionate; 18.08.2014
comment
(1) Разреженная триангуляция: рекомендуется использовать метод Хартли-Штурма. www-ljk.imag. fr/Publications/Basilic/ (2) Отмена исправления: строго говоря, вам не нужно это делать, если вы используете HS, при условии, что ваша фундаментальная матрица преобразована для его учета. Кроме того, если вы не выполняете плотное сопоставление, зачем возиться с исправлением? - person Francesco Callari; 18.08.2014
comment
Спасибо за предложение, я попробую это. Вы правы, мне не нужны стерео ректифицированные изображения для разреженной 3D-реконструкции. Но мне все еще нужно исправить искажение изображения, чтобы убрать дисторсию объектива, верно? как в этом примере (mathworks.com/help/vision/ug/) - person CV_passionate; 18.08.2014
comment
да. Кроме всего прочего, если ваши изображения имеют нелинейные искажения, то говорить о фундаментальных матрицах вообще не имеет смысла, так как камеры не будут линейными проекционными устройствами. - person Francesco Callari; 18.08.2014
comment
Ну, они вычисляют фундаментальную матрицу в этом примере Matlab (mathworks.com/help/vision/ug/) и как найти матрицы камер без основной матрицы? непосредственно из основной матрицы? - person CV_passionate; 18.08.2014
comment
Вы сказали, что ваши камеры откалиброваны (я полагаю, это означает, что у вас уже есть встроенные компоненты). Вы не можете просто откалибровать внешние параметры? - person Francesco Callari; 19.08.2014
comment
Да, у меня также есть внешние факторы, но я хочу удалить выбросы сопоставления признаков с использованием эпиполярных ограничений. для этого мне нужно оценить фундаментальную матрицу. - person CV_passionate; 19.08.2014
comment
Последний комментарий (тогда вам придется вернуться к книге). Если ваша стереопара откалибрована (как внутренняя, так и внешняя), вам не нужно оценивать F-матрицу, вы можете просто вычислить ее из матриц камеры и матрицы положения камеры слева направо [R|t]. Используйте его, чтобы удалить выбросы, затем выбросьте его и триангулируйте выбросы. - person Francesco Callari; 19.08.2014
comment
OK У меня нет внешних параметров камеры. поэтому мне пришлось оценить фундаментальную матрицу и построить трехмерное облако точек с помощью триангуляции. Теперь у меня есть 3D-облако точек в пикселях. как я могу перевести его в миллиметры? - person CV_passionate; 06.10.2014