Преобразование карты диспаратности в 3D точки - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть карта диспаратности изображения. Мне нужно преобразовать ее в набор трехмерных точек и нормалей. Как я могу это сделать, и есть ли такая существующая реализация, которая может сделать это

Ответы [ 5 ]

7 голосов
/ 01 февраля 2011
1 голос
/ 25 мая 2012
        cvFindStereoCorrespondenceBM( frame1r, frame2r, disp, BMState);

        /*      cvShowImage("camera1", frame1);
                cvShowImage("camera2", frame2);         */      
        //      cvConvertScale( disp, disp, 16, 0 );
                cvNormalize( disp, vdisp, 0, 256, CV_MINMAX );                   
                cvShowImage( "disparity", vdisp );              
                cvReprojectImageTo3D(disp, Image3D, &_Q);               
                cvShowImage("depthmap",Image3D);

этот фрагмент кода поможет вам, я надеюсь.Вот объяснение кода следующим образом: Когда я выпрямляю изображения с правой и левой камер и определяя BMstate, я передал это в cvFindStereoCorrespondenceBM, чтобы найти изображение несоответствия.Затем определим матрицу измерения 3 для хранения трехмерных точек как Image3D.Посредством функции в opencv cvReprojectImageTo3D, проходящей Q-матрицу, которую мы получаем в стерео соответствии, мы получаем набор точек 3D, соответствующих этому 2D-изображению

1 голос
/ 10 февраля 2011

Триангулированная поверхность Gnu * Библиотека 1002 *?

Когда я делал это раньше, у меня была карта глубины (или карта диспаратности, если вы предпочитаете) и - зная исходную калибровку камеры - я мог выполнить повторное проецирование обратно в R3 для точек.

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

(Если бы вы этого не знали, вам бы пришлось попробовать какую-то форму триангуляции Делоне или другой более продвинутый алгоритм ...)

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

Meshlab очень удобен для любой дополнительной постобработки.

0 голосов
/ 12 апреля 2013
 @ here is calculation which may help  you 

  % %Z = fB/d
  % where
  % Z = distance along the camera Z axis
  % f = focal length (in pixels)
  % B = baseline (in metres)
  % d = disparity (in pixels) 
  % % After Z is determined, X and Y can be calculated using the usual projective         camera equations:
 % 
  % X = uZ/f
  % Y = vZ/f

 % where
 % u and v are the pixel location in the 2D image
 % X, Y, Z is the real 3d position

  % Note: u and v are not the same as row and column. You must account for the image   center. You can get the image center using the triclopsGetImageCenter() function. Then you find u and v by:

  % u = col - centerCol
  % v = row - centerRow

  % Note: If u, v, f, and d are all in pixels and X,Y,Z are all in the meters, the units will always work i.e. pixel/pixel = no-unit-ratio = m/m.
0 голосов
/ 01 февраля 2011

Карта диспаратности дает вам x, y и f (z).Вам нужна калибровка камеры, чтобы узнать, как преобразовать диспаратность в z.

У меня карта диспаратности изображение

Диспараткарта изображения обычно будет полностью плоской ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...