Оценка глубины 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)));
}
Но полученное значение глубины отличается от значения, полученного в предыдущей формуле, из-за значенияBMState->numberOfDisparities
это меняет значение результата.
Как я могу установить этот параметр? что изменить этот параметр?
Спасибо