Módszerek
-
módszer
Először egy már publikált módszert implementáltunk[2], hogy lehetőségünk legyen a saját megvalósítási ötleteinket összehasonlítani. Ennek a módszernek lényege az alábbi ábrán látható:
1. ábra: Az első módszer folyamatábrája.-
Feature pont kiválasztás
A videó képet 4×4 régióra bontjuk, és mindegyikben meghározunk egy feature pontot (FP). Az lesz a régióhoz tartozó FP, amelyiknek a környezetében maximális a horizontális és vertikális deriváltak összege. Egy (x,y) pontban jelölje G(x,y) a két parciális derivált összegét:
-
FP elmozdulásának meghatározása
Az FP-k kiválasztása után a következő képkockán meg kell határoznunk azok elmozdulását. Ehhez bevezetjük az i-edik FP-hez és v elmozduláshoz tartozó SSD mértéket, melyet az FP körüli Bi blokkban számítunk az alábbi képlet alapján:
2. ábra: Átlagos block-matching SSD értékek a 16 darab FP-tól számított -20...+20 távolságban (vízszintes tengelyek) két különböző input képen. A felső képen a FP-ok egyedi környezettel bírnak, míg az alsó képen periodikus mintázatban helyezkednek el.Jól látható módon ennek a módszernek az a hátránya, hogy a valós elmozduláshoz képest az SSD minimuma ettől eltérő helyre kerül, melynek oka egyrészt a kép diszkretizációja, másrészt a képen ismétlődő kisebb minták jelenléte. Ezért a legjobb blokk illeszkedésen kívül figyelembe vesszük azokat a pontokat is, amelyek még bizonyos valószínűséggel takarhatják a valós FP elmozdulást. pi-hez tartozó lehetséges elmozdulások halmaza legyen Vi:
3. ábra: A zöld-piros FP-k lehetséges elmozdulásait kék pontok jelölik.Vi halmaz eltárolása helyett, csak azok kovarianciamátrixát (kis módosítással) tároljuk:
-
Globális transzformáció meghatározás
Az elmozdulás leírására nem a hagyományos transzformációs mátrixokat használjuk (affin transzformáció esetén 2x2 méretű mátrix), hanem egy Θ-val jelölt 4x1 méretű mátrixot:
-
-
módszer (saját ötletek alapján)
A meglévő megoldások és az elérhető könyvtárak alapján a következő saját megvalósítást tervezzük a feladat megoldására:
4. ábra: Az általunk fejlesztett HCI algoritmus vázlata.A feature pontok meghatározására jó és hatékony implementációt találtunk OpenCV-ben. A függvény neve GoodFeaturesToTrack. Ez a pontok közül azokat választja ki, melyeknek lokálisan a legnagyobbak a Hesse mátrix sajátértékei.
A pontok Lukas-Kenade szerinti követése szintén meg van valósítva OpenCV függvényként (cvCalcOpticalFlowPyrLK). Ez hatékony, mivel a pontkövetést két-szintű képpiramison végzi, template matching segítségével.
Mivel a pont megfeleltetések túldefiniálják a transzformációt, ezért először az outlier-eket ki kell szűrni, amire a RANSAC algoritmust használjuk. Véletlenszerűen kiválasztott pontok által meghatározott transzformációra megnézzük hogy a többi pontmegfeleltetést mennyire elégítik ki valamilyen küszöb alatti hibával.
ahol p-k a véletlenszerűen kiválasztott pontok, T pedig az affin transzformáció.
Az i-edik pont szavazatszáma a j1, j2, j3 pontokra:
A legjobb pontokat és a rájuk szavazó pontokat tartjuk meg. A megmaradó pontokból még mindig túldefiniált egyenletrendszert kapunk:
A mozgás utófeldolgozását jelenleg a 3 utolsó elmozdulás átlagolásával oldjuk meg.
-
A fejlesztés technikai részletei
Egyik célunk, hogy a fejlesztett forráskódban csak ingyenes, open-source eszközöket használjunk, valamint a kód változtatás nélkül fordítható legyen az különböző platformokon (Windows és Linux).
A fordítás előkészítését CMake-kel végezzük, amely egy konfigurációs text file-ból különböző platformokra előkészíti a fordítást, pl. GCC-hez makefile-t csinál, Visual Studio-hoz projekt file-t.
Fordítási környezetün részleteit a következő címen publikussá tettük:
http://opencvlibrary.sourceforge.net/Getting_startedA kamera képeinek beolvasása, képfeldolgozó műveletek és numerikus műveletek elvégzéséhez az OpenCV könyvtár függvényeit használjuk.
-
A program használata
A programot parancsori terminálból neye.exe futtatásával indítjuk, mely egy kötelezo paramétert vár, a böngészni kívánt képfájl nevét. Második opcinális paraméterként teszt input videófájlt lehet megadni, ezesetben ennek a képeit használja webkamera helyett.
Futtatás közben az alább funkcióbillentyuket használhatjuk:
's' : pozíció alaphelyzetbe állítás; 'r' : forgatás engedélyezés/tiltás; 'x' : kilépés; +/- : zoomolás.
A képben való navigáció a feladatkiírásnak megfeleloen a webkamera mozgatásával történik.
-
Tesztelő környzet
Az általunk fejlesztett HCI minoségét az alábbi teszt segítségével mérjük. Az 5. ábrán látható képeket nyitjuk meg navigáció céljából. A HCI segítségével úgy kell navigálni a képeken hogy a zöld pontból eljussunk a piros pontig, miközben a látómezo csak a fekete és sárga mezoket érintheti (a kéket nem). A kék mezok érintése hibának számít. A fekete utakon úgy kell haladni hogy mindig legyen sárga mezo a látómezoben. Ha a sárga mezon hurok van, akkor azon a helyen az egész hurkot látómezobe kell hozni. A három képen végighaladva számoljuk a hibák számát.
5. ábra: Tesztképek navigációhoz.Vissza a lap tetejére
-