2024. április 26., péntek

Gyorskeresés

[SVS_19] Január 5.

Írta: | Kulcsszavak: SRV . surveyor . SVS

[ ÚJ BEJEGYZÉS ]

Ez a bejegyzés több nap eseményeit meséli el, csak már nem emlékszem, mit mikor csináltam.

Ha még emlékeztek rá, a múltkori bejegyzésben azon agyaltam, hogy a tényleges és számított távolságok miért nincsenek még köszönőviszonyban sem.

Három ötletem volt a hibára:
1. kalibráció
2. a disparity map -> 3D megvalósításnál valami nem stimmel az OpenCV-ben
3. Vetítési hiba

Berakom megint a számolt és tényleges távolságokat:

Elkezdtem a próbálgatást, először a vetítési hiba jelenséget akart leellenőrizni magasabb felbontással. Eredetileg 320x240-es képeket használtam, most kipróbáltam 640x480-on. A sebesség se volt borzasztó lassú.
Ehhez az elmozdulásokat számoló BM függvényt is újra be kellett állítani.

Eredmény:

Ha megfigyelitek, akkor látható, hogy szinte teljesen ugyanaz a 320x240-en mértekkel, így vetítési hiba kizárva.

Próbálgattam a kalibrációt, mert rendes fizikai pontok 3D-s adatait kell megadni kalibrálás előtt (gondoltam én, de az egy másik függvény és másra való). Itt is elszenvedtem 1-2 napot, de nem sikerült használható új kalibrációt csinálnom.

Konzulensem javaslatára elkezdtem kézzel leellenőrizni az OpenCV által számolt mátrixokat.
Most nem megyek bele mi micsoda :).

Először is kellett egy kép, ahol kézzel megmért fizikai pont távolságával számolgatok. Ez a pont 1 méter távol (Z), vízszintesen 30 cm-rel jobbra (X), függőlegesen 16 cm-rel (Y) lefele volt a bal kamera középpontjától.

Azt számolom, hogy a kalibráció során kapott mátrixokból és a tényleges 3D-s koordinátákból megkapom, hogy a képen ez melyik pixel.

Rektifikáció előtti ellenőrzés:
Zöld: a kapott értéknek ott kell lennie
Piros: a számolt hely

X-ben 14 pixel, Y-ban pedig 3 pixel a hiba.

Őszintén megmondom nem tudom, hogy ez nagynak, vagy kicsinek számít, de szerintem lényegében stimmel.

Rektifikáció utáni ellenőrzés:
Zöld: a kapott értéknek ott kell lennie, kicsit félrenyomtam
Piros: a számolt hely

X-ben 7 pixel, Y-ban pedig 10 pixel a hiba.

Lényegében maradt az előzőhöz képest.

Jöjjön a kézzel számolt elmozdulás:

229-(509-320)=40

Ez után a Q mátrixot ellenőrzöm, aminek a segítségével elmozdulásokból 3D koordinátákat kapok. A kézzel kapott érték ugyanannyi, mint az OpenCV számolt, tehát nem a függvény a rossz, hanem a Q mátrixszal nem stimmel valami.
A pont 1 méterre van, 13-as elmozdulásnál adja vissza az 1 métert.

Ezek után a cvStereoRectify függvénnyel kezdtem el foglalkozni. Mivel kicsi a kép, a felesleges képrészeket figyelmen kívül kéne hagyni.
Beállítottam az eddig nem használt CV_CALIB_ZERO_DISPARITY-t, alpha=0-t, és a roi1,roi2-t. Az itt kapott roikat beadtam a BM-nek is persze.
Ha csak a CV_CALIB_ZERO_DISPARITY-t állítom be, akkor is kicsit javul a helyzet.

Ilyen volt a régi beállításokkal:

És ilyen az újjal:

Levág területeket, de azok úgy se voltak fontosak és ott úgy is deformált volt kép, tehát használhatatlan.

És láss csodát, megjavult a elmozdulás->3D...:

A 8. sorban lévőnél a maximális elmozdulást fel kellett vennem 128-ra

A legnagyobb hiba is csak 8 cm >1,4 méternél. Előzőekhez képest ez meseszép.
Valószínűleg az egész megkergül, ha ott van a fekete sáv a képek oldalán.

Persze nem csak boldog vagyok, hanem szomorú, hogy erre nem 1,5 hónappal ezelőtt jöttem rá :W, pedig a ROI-t próbálgattam, de akkor azt hiszem nem utasítottam, hogy vágja le a felesleges részeket.

Szerencsére legalább a KÉPAF2011 cikket van időm még kijavítani (kérdés is volt az egyik bírálótól, hogy a Z-k miért ilyenek, így erre is tudok válaszolni).

Természetesen a programot is megpiszkálom, ha záróvizsga előtt lesz idő, szerencsére túl sokat nem kell átírni.

Hozzászólások

(#1) D@ni88


D@ni88
addikt

grat :D
Azért nem kis fába vágtad a fejszét, de csak sikerült kivágni :)

(#2) Elrood válasza D@ni88 (#1) üzenetére


Elrood
őstag

Csak kicsit idegesítő, hogy egy olyan beállítás kombináción működik, amit pont nem próbáltam ki :).

''The spice exists on only one planet in the entire universe. A desolate, dry planet with vast deserts. The planet is Arrakis, also known as DUNE.''

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.