Automatikus panorámakép-készítés
A feladat
[szerkesztés]Adottak képek, melyek minimum 20%-ban fedik egymást. Készítsünk algoritmust, amely ezekből a képekből a megfelelő paraméterek segítségével előállít egy panorámaképet.
Lépések
[szerkesztés]- Sarokpont detektálás
- Olyan pontokat kell keresnünk, amelyek megbízhatóan jellemzik az adott képen látható objektumokat.
- Sarokpontok párosítása
- A képekből kinyert pontokat meg kell feleltetni egymásnak.
- Párosított pontok szűrése
- A megfeleltetések közül azokat kell kiválasztani, melyek valóban jó pontpárok, vagyis ugyanahhoz az objektumhoz tartoznak.
- Transzformáció
- A helyes párosításból elő kell állítanunk a transzformációhoz szükséges adatokat, majd végrehajtani azt.
- Utómunkálatok
- Két kép illesztése után felmerülhetnek problémák, mint például az illesztési vonalak feltűnősége, vagy kettőnél több kép illesztése.
Sarokpont detektálás
[szerkesztés]![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Sarokpontok.jpg/200px-Sarokpontok.jpg)
Sarokpontoknak nevezzük az olyan pontokat, ahol élek találkoznak. Az élek mentén a képfüggvény nagyot változik az egyik irányban. Élek találkozásánál ez a függvény minden irányban nagyot változik. Ezt egy csúszóablakkal lehet figyelni.
Ezek a pontok megbízhatóak, mert ellenállnak a geometriai és fotometriai deformációknak. A Harris sarokdetektáló algoritmus segítségével könnyen kinyerhetőek ezek a pontok.
Ha tudjuk az átfedés helyét, akkor leszűkíthetjük a keresési területet, ezzel több sarokpontot kapva.
Sarokpontok párosítása
[szerkesztés]![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Panoramic_photo_corner_finder.jpg/200px-Panoramic_photo_corner_finder.jpg)
Ahhoz hogy az egyes pontokat párosítani tudjuk, tulajdonságokat kell kinyernünk róluk. Vegyük a sarokpontok körüli négyzet pontjait sor folytonosan, majd az így előállt vektorokat hasonlítsuk össze. A vektorok négyzetes eltérésének vizsgálatával kapott eltérés szerint állítsuk sorba a vektorokat, majd a legkisebb eltérésűeket párosítsuk össze.
SSD - Sum of Squared Difference:
- Vegyük a vektorok négyzetes eltérését.
- Minden vektorhoz keressük meg azt a vektort, amivel az SSD értéke a legkisebb.
- Válasszuk ki azokat a párokat, amelyeknek az eltérése a küszöbérték alatt van.
A párosítás után egyes pontok kimaradtak, és egyes pontokhoz rossz párokat talált meg. Ezt a párosítások szűrésével küszöbölhetjük ki.
Párosított pontok szűrése
[szerkesztés]![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Rmp.jpg/200px-Rmp.jpg)
RANSAC szűrés - RANdom SAmple Consensus
Ez egy iteratív módszer, mely egy ponthalmazból kiszűri az outliner-eket, vagyis azokat a pontokat, amelyek a legkevésbé illeszkednek közéjük.
- Véletlenszerűen választ pontokat a halmazból
- Leteszteli az összes többi pontot, hogy mennyire illeszkedik a kiválasztott pontokból alkotott modellbe, vagyis hogy inliner-e
- Minél több az inliner, annál jobb a modell
- A megadott iterációs lépés alatt talált legjobb modellt adja vissza
A szűrés lefuttatása után megkapjuk a jó pontpárokat.
Transzformáció
[szerkesztés]A RANSAC szűrés után megmaradó pontpárokból felírható egy túlhatározott lineáris egyenletrendszer.
Ennek az egyenletrendszernek a megoldásából felírható a homográfia, ami az egyik képet a másikba viszi át. A homográfia egy olyan (esetünkben) 3x3-as mátrix, ami tartalmazza a szükséges transzformációkat, hogy a két kép illeszkedjen. Ha vesszük az eredeti kép homogén koordinátájának transzponáltját, azt megszorozzuk balról a homográfia mátrixával, akkor az új kép koordinátáinak egy ω-szorosát kapjuk. Az ω a mátrixszorzás után alakul ki a 3. koordinátában. Ezzel leosztva kapjuk az új koordinátákat.
![](http://upload.wikimedia.org/wikipedia/commons/9/98/Eltranszform%C3%A1lt_k%C3%A9pek.jpg)
Utómunkálatok
[szerkesztés]![]() |
![]() |
![]() |
A képek illesztésekor meglátszódhatnak az illesztési vonalak. Ezt a képek eltérő intenzitása okozza, mert más-más lehet a fényviszony a képek készítésekor. Az illesztések mentén történő intenzitássimítással ezek az élek elrejthetők.
Minden eltranszformált képhez készítünk egy maszkot, ami meghatározza, hogy mely pixelek tartoznak a képhez, így a fekete részek nem zavarnak be az intenzitássimításba.
A simításhoz egy súlytérképet használunk, amit eltranszformálunk a képpel együtt. Ez megmondja, hogy egy adott pixelnél mekkora súllyal kell venni az intenzitást.
A panorámaképek általában több képből állnak, ezért valamilyen módon automatizálni kell az illesztési folyamatot. A képeket egymás után kell megadni, és minden képnél azt is, hogy milyen irányból illessze az előző képhez, valamint hogy mekkora az átfedési terület a két kép között. Ezen kívül megadható, hogy az átfedő terület két végét levágja-e az algoritmus. Az átfedéses területet felosztva egyenletesebben tudjuk kinyerni a sarokpontokat. Miután minden képpárhoz kiszámítottuk a transzformációs mátrixot, a szintén paraméterként megadott sorszámú képet vesszük a panorámakép közepének. Ehhez transzformáljuk a többi képet a homográfia mátrixok szorzásával kapott transzformációval.
Az algoritmusnak számos paramétere van, melyek behangolása nehéz feladat, nagyban befolyásolja a képek felbontása.
</noinclude>
Konklúzió
[szerkesztés]Az algoritmus a bemeneti képekről feltételezi, hogy azok élesek, nagy síkfelületek találhatóak rajta, vagy egy tájkép, és egy nézőpontból készültek. A nézőpont változása a panorámakép készítés sikerességét nagyban rontja. Továbbá a növényzet, és annak változása a szél miatt is eredményezhet hibákat. A képeken előforduló mozgó objektumok (emberek, autók) a két képen más pozícióban jelenhetnek meg. Ilyenkor ezek elmosódhatnak, halványak lehetnek.
A feltételeket kielégítő képek, és a megfelelő paraméterezések mellett eredményesen lehet panorámaképeket készíteni az algoritmussal.
</noinclude>
</noinclude>