Automatikus panorámakép-készítés

A Wikikönyvekből, a szabad elektronikus könyvtárból.


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]

  1. Sarokpont detektálás
    • Olyan pontokat kell keresnünk, amelyek megbízhatóan jellemzik az adott képen látható objektumokat.
  2. Sarokpontok párosítása
    • A képekből kinyert pontokat meg kell feleltetni egymásnak.
  3. 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.
  4. 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.
  5. 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]

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]

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:

  1. Vegyük a vektorok négyzetes eltérését.
  2. Minden vektorhoz keressük meg azt a vektort, amivel az SSD értéke a legkisebb.
  3. 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]

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.

Eltranszformált képek.jpg


Utómunkálatok[szerkesztés]

Vágómaszk
Súlytérkép 2D
Súlytérkép 3D

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>

Szeged
Szeged


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>

Szeged
Szeged


</noinclude>

Szeged, Tisza-part
Szeged, Tisza-part