December 10., még 0 nap
Lejárt az idő, végre, szakdoga leadva, befogadva, most már csak azon kell izgulni, nehogy elkeverjék .
Kemény 4 hónap volt, főleg leírni ezt az egészet úgy, hogy az előző két hétben betegeskedtem.
A blogolás bevált, így emlékeztem a bakikra, amiket bele kell írni a dogába és a teszteredmények publikálása is hasznos volt, mert így megvoltak.
Nem is beszélve néhány képernyőmentésről, amit egyszerűen nem találok a vinyón, de itt megvoltak.
Tehát csak tanácsolni tudom, hogy aki diplomamunkát, szakdolgozatot ír, az blogoljon (nyilvánosan, vagy csak magának).
A szakdolgozatból tervezek ide is egy rövidebb cikket, de azt majd február fele.
Bár szakdolgozat leadva, a történetnek még nincs vége!
A dolgozat egy része el lett küldve cikként a KÉPAF 2011 konferenciára, ami január 25-28. között lesz (persze pont ezen a héten van a záróvizsga...).
A cikket befogadták, de javítani kell még rajta és pár kérdést meg kell felelni.
Ahogy a táblázatban is látható a számolt távolságok nagyon nem stimmelnek, ráadásul nem is lineáris a hiba. Viszont a két kamera közötti távolságot egész pontosan kiszámolta (számolt: 108,93 mm, tényleges: 107,5 mm).
Következő hibák lehetnek:
1. kalibráció egyszerűen pocsék mélységre
Több kalibrációt végeztem, ugyanaz az eredmény.
2. a disparity map -> 3D megvalósításnál valami nem stimmel az OpenCV-ben
Ennek még utána nézek, de lehet kipróbálom a "kézi" triangulációt, hogy azzal mit kapok.
3. Vetítési hiba, függ a felbontástól, a kamerák által bezárt szögtől és a tárgy távolságától, amit vizsgálunk. Minél kisebb a bezárt szög (párhuzamosnál ~0 fok), minél nagyobb a távolság és minél kisebb a felbontás, annál nagyobb ez a hiba. Ráadásul távolságra nem lineáris.
Ez abból jön, hogy csak pixelre lehet elmozdulást nézni, nem lehet "pixel alá menni", hogy pontosítsunk, így a +-1 pixel eltérés nagy távolságnál már jelentős hiba.
Erre a hibára tippelek leginkább.
Megpróbálom két ábrával megmagyarázni, mi ez:
Lehetséges Z helyek, ha közel van a pont:
Lehetséges Z helyek, ha távol van a pont:
Ábrák nem lettek méretarányosak, de látható a különbség.
Keresek egy tényleges pontot a térben.
Veszek egy pixelt és húzok egy vonalat a kameraközéppontból a valós pont felé, majd veszem a szomszédos pixelt és ahhoz is. Ugyanezt megcsinálom a másik képen is.
Ez a 4 vonal egy négyszöget fog bezárni (szürke), a keresett pont ezen a térrészen lesz.
Ez a szürke terület egyben a vetítési hiba, hiszen azon a részen akárhol lehet a pont, nem lehet ténylegesen megmondani.
Ha elképzelitek, akkor érthető, hogy egy közeli pontnál ez a négyszög Z-ben keskeny, távolabbi pontoknál egyre szélesebb lesz.
Lehetséges, hogy az OpenCV függvénye a legkisebb értéket adja vissza, innen a közelebbi számolt távolságok.
Sajnos ezzel a jelenséggel nem lehet mit kezdeni, de néhány dolgot kipróbálok:
1. A disparity map értékeihez 0,5-t hozzáadok, mintha a pixel közepén lenne a találat.
(Most lebegőpontos számokat használok, lehet átállok egész típusú elmozdulásokra, majd azokhoz adok 0,5-t).
2. A kamerák szögén nem tudok változtatni, marad a felbontás. Most 320x240-s képek voltak, megnézem 640x480-nal, ugye nagyobb felbontás, elvileg kisebb a hiba. Bár ezzel elvesztem a real-time-t, de úgy is egy elmélet teszteléséhez kell.
Kár, hogy ez kis leírás nem sikerült berakni a szakdogába , egyszerűen nem volt idő. Hátha a záróvizsga bizottság értékeli, hogy még foglalkoztam a témával.
Ennek kikutatására és leírására január 9-ig van időm, persze közben záróvizsgára is készülni kéne...
Szerencsére a robotot visszakapom karácsonyra.
Közben kijött az OpenCV 2.2-es verziója [link].
Engem érintő változás: opencv_calib3d - camera calibration, stereo correspondence and elements of 3D data processing.
Csak az online dokumentációt még nem frissítették.
Megint sok az ötlet, kevés az idő