Második mérföldkő


Feladatspecifikáció

A rendelkezésre álló fényképfelvételekből kell 3D pontfelhőt rekonstruálni. A felvételek drónnal és kézi kamerával készültek egy templomról. Két-két felvétel alapján kell rekonstruálni a képeken látható háromdimenziós látványt.

Fejlesztés jelenlegi állása

  • Kalibráció:rosszul működik(nem megfelelő konfigurációs képek)
  • Jellemzők kinyerése: kész
  • Jellemzők megfeleltetése (matching):kész
  • Rektifikáció:kész
  • Pontfelhő-generálás:nem működik (1. lépésre épül)
  • Tesztelés több képre/több módszerrel:nincs kész


Feladat lépései

Már az első mérföldkő során meghatároztuk és szétválasztottuk jól definiált lépésekre a feladatot megoldó program implementációját. Azóta jobban sikerült beleásnunk magunkat a problémába és ebben a dokumentumban újból végigmegyünk ezeken a lépéseken, jobban kifejtve az egyes lépéseket, eddig elért eredményekkel, illetve a nehézségekkel együtt.

1. Lépés: kamera kalibráció

Konfigurációs fájlok segítségével adjuk meg a bemeneti kalibrációs képsorozatokat. Jelenleg a kalibráció nem működik megfelelően az implementációtól függetlenül. Az algoritmus működése referenciából szerzett és működnie kellene, így feltételezzük, hogy a kalibrációs képek nem megfelelőek.

2. Lépés: jellemzők kinyerése

Mivel a kalibrációtól függetlenek a további lépések (kivéve az utolsót), ezért itt tudtunk haladni. A program jelenleg két módban működik: kalibrációs, mely output-ként a kalibrációt, torzulási és leképezési mátrixokat tartalmazza; másik pedig a kalibrációt felhasználó kiértékelő, aminek működését a további lépések taglalják. Képpontjellemzőket SIFT és A-SIFT segítségével szedhetünk ki a képekből. A program futása során meghatározható, melyik kinyerő fusson le. 1. ábra: jellemző pontok ASIFT-tel

3. Lépés: jellemzők megfeleltetése

A kinyert descriptorokat meg kell feleltetni egymásnak a két képen. Ehhez több lehetőség is van: két-féle bruteforce technika vagy Flann módszer. Itt is lehetőség van kiválasztani, melyiket alkalmazzuk, amit majd esetleg később, a módszer pontosságának tuningolásánál fogunk kihasználni. Nem minden megfeleltetés helyes, ezért egy bizonyos küszöbértéken belül eső távolságot engedünk csak meg a jellemzők között. 2. ábra: megfeleltetés eredménye

4. Lépés: rektifikáció

Kaptunk több valid pontpárt. Ezeket felhasználva előállítjuk a fundamentális mátrixot, ami a két kép között a nézőpontok eltoltságát/rotációját fogja megadni. Az OpenCVfindFundamentalMat() parancsával végezzük ezt. A módszer helyességének ellenőrzését a computeCorrespondEpilines() paranccsal hajthatjuk végre, ami a képeken feltűnteti az epipoláris egyeneseket. Mivel jelenlegi állás szerint nem működik megfelelően a kalibráció, ezért a stereoRectifyUncalibrated() segítségével fogjuk elvégezni a rektifikálást, ami nem annyira pontos, mint a stereoRectify() változat, de jelenlegi helyzetben ezt használtuk fel a disparity map létrehozására, ami a mélységinformációkat tudjuk rekonstruálni. A disparity map létrehozásához a StereoBM által meghatározott BlockMatching algoritmust használtuk.

5. Lépés: 3D pontfelhő létrehozása

Az utolsó lépés a visszavetítés lenne, ami implementálva van kód szintjén, viszont itt szükség lenne a kalibrációra, ami jelen esetben még nem lehetséges. A visszavetítést a reprojectImageTo3D() függvénnyel végezzük.