Újra itt . Folytatódik a 57 napja leadott szakdolgozat további fejlesztése.
GAMF-t befejeztem, diplomára jeles kerül, irány a munkaerőpiac! (jaj )
KÉPAF2011-re a cikk: [pdf]
A távolság probléma meg lett oldva, ennek nagyon örültem (lásd előző poszt).
Fejmozgatás
A szakdolgozathoz 3 kérdést kaptam, ezek közül az egyik, hogy mi történne, ha nem lehetne mozgatni a robot fejét.
Először egy kis ismétlés:
Lényegében a bal képen található (x0,y0) pixelhez úgy keressük meg a párosítást, hogy elindulunk a jobb oldali kép (x0,y0) pixeléből, és végignézünk egy tartományt, hogy melyik pixel illik rá legjobban a bal oldalon található pixelre.
Két fontos paraméter látható a képen:
minDisparity: (x0,y0) ponthoz mennyire térjünk el vízszintesen (ezt a továbbiakban nem bátjuk)
numberOfDisparities: hány pixel legyen az a tartomány, amin keresünk. (továbbiakban NofD)
Mint korábban írtam, minél közelebb van egy tárgy, annál nagyobb az elmozdulása. Ha a NofD minél nagyobb, annál közelebbi tárgyat tudunk meglátni, de annál több összehasonlítást végez, tehát lassít is.
Itt egy táblázat, hogy bizonyos NofD értékeknél mekkora az a minimum távolság, amit képes meglátni:
Gondolhatnánk, hogy rakjuk jó nagyra, aztán hajrá, de sajnos nem:
LRC-vel tisztított elmozdulástérképek különböző NofD értékeknél (LRC-ről itt: [link])
Látható, hogy az OpenCV levágja a széleket, mert nem tud a teljes NofD tartományban keresni. Ez csökkenti a látószöget.
Itt egy táblázat, hogy mely NofD értékeknél mennyit lát fél méterre a robot a bal kamerájából nézve:
Ha a valódi kameraképeket nézem, b:20cm j:35cm jön ki kb. (kézi mérések mind).
"Grafikusan" (méretarányos):
NofD: 96 (kék), 80 (sárga), 64 (zöld); Az alsó körív a legközelebbi pont amit lát, a felső "végtelen"
Két lehetőség van:
- Ha széles látószöget akarunk: közelre nem látunk
- Ha közelre akarunk látni: keskeny a látószög
Az adatokból látszik, hogy kell a fejmozgatás, mert enélkül nincs elegendő információ arról, hogy ha akadályt észlel maga előtt, akkor merre menjen tovább.
Ha fejet forgatunk (balra és jobbra 45-45°-t):
Így elegendő információ áll a robot rendelkezésére, hogy a megfelelő irányt válassza.
Bővítés
Elgondolkoztunk azon, mi lenne, ha kibővítenénk a képeket, hogy beleférjen a NofD-s sáv, és így nem vágna le fontos részeket.
Még az elmozdulások keresése előtt, a rektifikált képek bal és jobb oldalát kibővítem a NofD értékének megfelelő fehér sávval:
Igen, fehér sávval, csak az oldalon nem látszana, ezért festettem most feketére
A sávbővítés nem okoz plusz párosításokat, mert nem elég textúrált, de a toldalékok határán mesterséges függőleges élek jöttek létre, amiket viszont észrevesz az algoritmus.
NofD értéke legyen 96, lássuk a teszteket:
A következő képek a felső animált gif képéből készültek, így jól összehasonlítható az eremdény.
Bal képre a elmozdulástérkép:
Jobb képre az elmozdulástérkép:
LRC-s elmozdulástérkép:
A jobbos képen azért látható, hogy megtalálta a mesterséges élt, de az LRC kiszűrte.
NofD értéke legyen 160:
Bal képre a elmozdulástérkép:
Jobb képre az elmozdulástérkép:
LRC-s elmozdulástérkép:
Teljesen jó mindkettő, bár a fejmozgásra továbbra is szükség van, de szinte bármilyen NofD értéknél belátjuk a teljes sávot (b:20cm j:35cm). A számításigényről annyit, hogy maradt a 3-4 FPS közötti érték, így meg lehet tartani.
Megjavult 3D további következményei
Ha még emlékeztek, az eddigi 3D-s képeknél csak a Z (távolság) értéket vettem figyelembe. Most, hogy megjavult a 3D, megnéztem a teljes X,Y,Z értékeket, hogy mit adnak:
A nem párosított pontok törölve, eredeti kép (bal): [link]
Bár a dobozok szélességét nem sikerült túl pontosan visszaadni, de ez "lejön" a képből, hogy mik vannak a valóságban egymás mögött/előtt.
További programbővítés
Bővítettem a programot úgy, hogy futás közben, az elmozdulástérképre kattintva egy adott pont távolságát kiírja.
Ezzel kapcsolatban egy érdekes észrevételem volt.
A novemberi kalibrálás eredményét felhasználva egy 102 cm-re lévő tárgyra azt mondta, hogy 123 cm-re volt. Kicsit megijedtem, hogy valamit anno elmértem, és egy elrontott tesztet mutogattam mindenhol, hogy megjavult a távolságszámolás.
Csináltam egy új kalibrációt, és újra 102-105 cm-t írt ki.
Tehát az elállítódást mégse tudom azzal helyrerakni, hogy visszapöckölöm a kamerákat a helyükre.
További tervek
Sajnos a robotot hétfőn vissza kell vinnem, így vége a mókának.
A mókának nem csak ezért van vége, hanem munkát is keresek, és ha egyszer kapok valamit, akkor se jutna túl sok idő erre.
De azért fejlesztgetem.
Kitaláltam, hogy írok egy emulátort a programhoz. Elvileg nem lesz bonyolult, hiszen TCP/IP az egész. SDL segítségével nem lesz nehéz egy szerver programot írni. Valószínűleg a sebesség nem lesz túl jó, mert a merevlemezről kell felszedni a képeket. Bár erre a problémára is vannak ötleteim.