Ошибка при получении 3D очков от Disparity - PullRequest
0 голосов
/ 13 марта 2011

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

cvReprojectImageTo3D(&disparity, threeDimage, &Q);

и получите ответы в ThreeDimage. Это матрица, и я обращаюсь к ней как: -

for(int ii=0;ii<threeDimage->rows;ii++)
    {       
    float *data = (float *)(threeDimage->data.ptr + ii * threeDimage->step);

    for(int jj=0;jj<threeDimage->cols*3;jj=jj+3) 
   {


      float a=data[jj];
      float b=data[jj+1];
      float c=data[jj+2];
      fprintf(fpp,"%f %f %f \n", a,b,c);

       }

}

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

1 Ответ

0 голосов
/ 13 марта 2011

Вы можете получить другое 3D-расстояние только от точек, где есть граница на карте диспаратности. Если у вас большие области одинакового диспаратности (плоский серый цвет на входном изображении), то они будут иметь одинаковый Z.

...