Próbuję oszacować głębokość na podstawie pary stereo z OpenCV. Mam dysproporcja mapa i oszacowanie głębokości można otrzymać jako:Szacowanie głębokości OpenCv z mapy różnic
(Baseline*focal)
depth = ------------------
(disparity*SensorSize)
Użyłem techniki Blok Matching znaleźć te same punkty w dwóch rectificated obrazów. OpenCV pozwala ustawić niektóre parametry dopasowania bloku, na przykład BMState->numberOfDisparities
.
po procesie dopasowania bloków:
cvFindStereoCorrespondenceBM(frame1r, frame2r, disp, BMState);
cvConvertScale(disp, disp, 16, 0);
cvNormalize(disp, vdisp, 0, 255, CV_MINMAX);
I znaleziono wartość głębokości jak:
if(cvGet2D(vdisp,y,x).val[0]>0)
{
depth =((baseline*focal)/(((cvGet2D(vdisp,y,x).val[0])*SENSOR_ELEMENT_SIZE)));
}
Jednak wartość głębokości obtaied różni się od wartości obtaied z poprzednim wzorem powodu wartości BMState->numberOfDisparities
który zmienia wartość wyniku.
Jak ustawić ten parametr? co zmienić ten parametr?
Dzięki
Thaks za odpowiedź, daję w procesie dopasowywania bloku dwa poprawione obrazy, więc ta formuła powinna działać poprawnie? Teraz spróbuję użyć funkcji reprojectImageTo3D. WERSJA WŁOSKA: Dal nome credo che tu sia italiano, quindi per una maggiore chiarezza (per me); se utilizzo già le immagini rettificate la formula precedente dovrebbe andare bene giusto? Se invece utilizzo ReprojectImageTo3D dovrei estrapolare soltanto il valore Z? Grazie per la risposta. – Speed87
Określ "powinien działać"? Formuła równoległej kamery zapewnia głębokość w danym pikselu w odniesieniu do idealnej kamery, która obserwuje poprawiony obraz. Jego odtworzenie będzie rzutowe, ale nie metryczne, dokładne. [Tak, mówię po włosku, ale to jest forum tylko po angielsku] –