2022. szeptember 29., csütörtök

Gyorskeresés

[SVS_20] Február 5.

Írta: | Kulcsszavak: SRV . surveyor . SVS

[ ÚJ BEJEGYZÉS ]

Ú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 :O)

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:

[/P]

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.

Copyright © 2000-2022 PROHARDVER Informatikai Kft.