A Bábel tornya a Biblia egyik mitikus története szerint az ember első mérnöki katasztrófája volt. A projektnek megvolt minden nagyszerű tulajdonsága: világos küldetés, sok ember, nincs időkorlát és megfelelő technológia ( tégla és habarcs ). Mégis látványosan megbukott, mert Isten összezavarta az emberi munkások nyelvét, és nem tudtak többé kommunikálni.”
Az olyan kifejezések, mint a “homográfia” gyakran emlékeztetnek arra, hogy még mindig küzdünk a kommunikációval. A homográfia egy egyszerű fogalom furcsa névvel!
Mi a homográfia?
Tekintsük az 1. ábrán látható sík két képét (a könyv tetején). A piros pont ugyanazt a fizikai pontot jelöli a két képen. A számítógépes látás zsargonjában ezeket a megfelelő pontokat nevezzük. Az 1. ábrán négy megfelelő pont négy különböző színben – piros, zöld, sárga és narancssárga – látható. A homográfia egy olyan transzformáció ( 3×3 mátrix ), amely az egyik kép pontjait a másik kép megfelelő pontjaira képezi le.
Most mivel a homográfia egy 3×3 mátrix, így írhatjuk le
Mondjuk meg a megfelelő pontok első csoportját – az első képen és a második képen. Ekkor a homográfia a következő módon képezi le őket
Képillesztés homográfia segítségével
A fenti egyenlet a megfelelő pontok MINDEN halmazára igaz, amennyiben a valóságban ugyanazon a síkon fekszenek. Más szóval alkalmazhatjuk a homográfiát az első képre, és az első képen lévő könyv igazodik a második képen lévő könyvhöz! Lásd a 2. ábrát.
De mi van azokkal a pontokkal, amelyek nem a síkon vannak ? Nos, ezeket NEM lehet homográfiával igazítani, ahogy a 2. ábrán látható. De várjunk csak, mi van akkor, ha a képen két sík van ? Nos, akkor két homográfiánk van – mindkét síkhoz egy-egy.
Panoráma : A homográfia alkalmazása
Az előző részben megtanultuk, hogy ha két kép között ismert a homográfia, akkor az egyik képet a másikra torzíthatjuk. Volt azonban egy nagy kikötés. A képeknek tartalmazniuk kellett egy síkot ( egy könyv tetejét ), és csak a síkbeli rész volt megfelelően igazítva. Kiderült, hogy ha bármilyen jelenetről ( nem csak egy síkról ) készítünk egy képet, majd a kamera elforgatásával készítünk egy második képet, a két képet homográfia köti össze! Más szóval a fényképezőgépet állványra szerelheted, és készíthetsz egy képet. Ezután forgassa el a függőleges tengely körül, és készítsen egy másik képet. A két kép, amelyet az imént készítettél egy teljesen tetszőleges 3D-s jelenetről, homográfiával kapcsolódik egymáshoz. A két képnek lesz néhány közös régiója, amelyeket össze lehet igazítani és összeilleszteni, és máris kész a két képből álló panoráma. Tényleg ilyen egyszerű ? Nem! (Sajnálom, hogy csalódást kell okoznom) Egy jó panoráma elkészítéséhez sokkal több minden szükséges, de az alapelv az, hogy egy homográfia segítségével igazítsuk egymáshoz a képeket, és intelligens módon varrjuk össze őket, hogy ne látszódjanak a varratok. A panorámák készítése mindenképpen egy későbbi bejegyzés része lesz.
Hogyan kell kiszámítani a homográfiát?
A két kép közötti homográfia kiszámításához legalább 4 pont megfeleltetésére van szükség a két kép között. Ha 4-nél több megfelelő pont van, az még jobb. Az OpenCV robusztusan megbecsüli a homográfiát, amely a legjobban illeszkedik az összes megfelelő ponthoz. Általában ezeket a pontmegfeleléseket automatikusan találjuk meg a képek közötti olyan jellemzők, mint a SIFT vagy a SURF megfeleltetésével, de ebben a bejegyzésben egyszerűen kézzel fogjuk kattintgatni a pontokat.
Lássuk először a felhasználást.
C++
Python
Nézzünk egy teljesebb példát mind C++, mind Python nyelven.
OpenCV C++ homográfiai példa
A 2. ábrán látható képek a következő C++ kóddal generálhatók. Az alábbi kód azt mutatja be, hogyan lehet két kép négy megfelelő pontját venni és a képet a másikra warpolni.
OpenCV Python homográfia példa
A 2. ábrán látható képek a következő Python kóddal is létrehozhatók. Az alábbi kód bemutatja, hogyan lehet két képből négy megfelelő pontot venni és a képet a másikra warpolni.
A homográfia alkalmazásai
A homográfia legérdekesebb alkalmazása kétségtelenül a panorámaképek készítése ( más néven képmozaikok és képfűzés ). A panorámák egy későbbi bejegyzés témája lesz. Lássunk néhány más érdekes alkalmazást.
Perspektívakorrekció homográfiával
Tegyük fel, hogy van egy fényképünk, amely az 1. ábrán látható. Nem lenne klassz, ha rákattinthatnál a könyv négy sarkára, és gyorsan kapnál egy olyan képet, amely a 3. ábrán láthatóhoz hasonlít. A példa kódját az alábbi letöltési részben találod. Íme a lépések:
- Írd meg a könyv négy sarkának összegyűjtésére szolgáló felhasználói felületet. Nevezzük ezeket a pontokat pts_src
- Meg kell tudnunk a könyv oldalarányát. Ennél a könyvnél az oldalarány ( szélesség / magasság ) 3/4. Így a kimeneti kép méretét 300×400-nak, a célpontjainkat ( pts_dst ) pedig (0,0), (299,0), (299,399) és (0,399)
- A homográfiát a pts_src és pts_dst segítségével kapjuk meg .
- A homográfiát a forrásképre alkalmazva megkapjuk a 3. ábrán látható képet.
Virtuális hirdetőtábla
Sok televíziós sporteseményen a reklámokat virtuálisan beillesztik az élő videóbejátszásba. Pl. a labdarúgásban és a baseballban a közvetlenül a pálya szélén kívül elhelyezett kis reklámtáblákon elhelyezett reklámok virtuálisan megváltoztathatók. Ahelyett, hogy mindenkinek ugyanazt a hirdetést jelenítenék meg, a hirdetők kiválaszthatják, hogy az adott személy demográfiai adatai, tartózkodási helye stb. alapján mely hirdetéseket jelenítsék meg. Ezekben az alkalmazásokban a reklámtábla négy sarkát érzékelik a videóban, amelyek célpontként szolgálnak. A hirdetés négy sarka szolgál forráspontként. A homográfiát e négy megfelelő pont alapján számítják ki, és ezt használják a hirdetésnek a videóképbe való belehajlítására.
Azt követően, hogy elolvasta ezt a bejegyzést, valószínűleg van egy elképzelése arról, hogyan helyezhet el egy képet egy virtuális hirdetőtáblán. A 4. ábra az internetre feltöltött első képet mutatja.
Az 5. ábra pedig a The Times Square-t mutatja.
A The Times Square egyik reklámtábláját lecserélhetjük egy általunk választott képre. Íme a lépések:
- Írjunk egy felhasználói felületet, amely összegyűjti a képen látható óriásplakát négy sarkát. Nevezzük ezeket a pontokat pts_dst
- Legyen a virtuális óriásplakátra helyezendő kép mérete w x h. A kép sarkai ( pts_src ) legyenek tehát (0,0), (w-1,0), (w-1,h-1) és (0,h-1)
- A homográfiát a pts_src és pts_dst segítségével kapjuk meg.
- Alkalmazzuk a homográfiát a forrásképre, és keverjük össze a célképpel, hogy megkapjuk a 6. ábrán látható képet.
Megjegyezzük, hogy a 6. ábrán a 4. ábrán látható képet illesztettük be a The Times Square képbe.
Feliratkozás & Kód letöltése
Ha tetszett ez a cikk, és szeretné letölteni a kódot (C++ és Python), valamint a bejegyzésben használt példaképeket, kérjük, iratkozzon fel hírlevelünkre. Egy ingyenes Computer Vision Resource guide-ot is kapni fog. Hírlevelünkben C++/Python nyelven írt OpenCV oktatóanyagokat és példákat, valamint számítógépes látás és gépi tanulás algoritmusokat és híreket osztunk meg.
Iratkozzon fel most
Képhivatkozások
- A 4. ábrán látható kép volt az első fényképes kép, amelyet feltöltöttek az internetre. Tisztességes felhasználásnak minősül.
- Az 5. ábrán használt képet az 5. ábra tartalmazza. ( The Time Square ) a GFDL licenc alatt áll.