Я пытаюсь оценить глубину из изображений стереопары с OpenCV. У меня несоответствие карта и оценка глубины могут быть получена как:Оценка глубины OpenCv по карте несоответствия
(Baseline*focal)
depth = ------------------
(disparity*SensorSize)
Я использовал метод сравнения блоков, чтобы найти те же точки в двух ректификованных изображениях. OpenCV позволяет установить некоторый параметр согласования блоков, например BMState->numberOfDisparities
.
После того, как процесс согласования блоков:
cvFindStereoCorrespondenceBM(frame1r, frame2r, disp, BMState);
cvConvertScale(disp, disp, 16, 0);
cvNormalize(disp, vdisp, 0, 255, CV_MINMAX);
Я нашел значение глубины, как:
if(cvGet2D(vdisp,y,x).val[0]>0)
{
depth =((baseline*focal)/(((cvGet2D(vdisp,y,x).val[0])*SENSOR_ELEMENT_SIZE)));
}
Но значение глубины obtaied отличается от значения obtaied с предыдущей формулой из-за стоимости BMState->numberOfDisparities
который изменяет значение результата.
Как установить этот параметр? что изменить этот параметр?
Благодаря
Thaks для вашего ответа, я даю в процессе согласования блоков два исправленных изображения, поэтому эта формула должна работать правильно? Теперь я попытаюсь использовать функцию repjectImageTo3D. ИТАЛЬЯНСКАЯ ВЕРСИЯ: Далекое имя кредо че-ту-сиа-итальяно, quindi per una maggiore chiarezza (per me); se utilizzo già le immagini rettificate la formula precente dovrebbe andare bene giusto? Se invece utilizzo ReprojectImageTo3D dovrei estrapolare soltanto il valore Z? Grazie per la risposta. – Speed87
Определить «должен работать»? Формула параллельной камеры дает вам глубину в заданном пикселе относительно идеальной камеры, которая наблюдает выпрямленное изображение. Его реконструкция будет проективной, но не метрической, точной. [Да, я говорю по-итальянски, но это англоязычный форум] –