Learn OpenCV

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.

1. ábra : Egy 3D-sík két képe ( a könyv teteje ) egy homográfia segítségével kapcsolódik egymáshoz

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.

2. ábra : Egy 3D-sík egyik képe a homográfia segítségével igazítható ugyanannak a síknak egy másik képéhez

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

3. ábra. Perspektívakorrekció

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:

  1. Í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
  2. 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)
  3. A homográfiát a pts_src és pts_dst segítségével kapjuk meg .
  4. A homográfiát a forrásképre alkalmazva megkapjuk a 3. ábrán látható képet.
Az ebben a bejegyzésben használt kódot és képeket letöltheti, ha itt iratkozik fel hírlevelünkre.

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.

4. ábra. Az internetre feltöltött első kép.

Az 5. ábra pedig a The Times Square-t mutatja.

Az 5. ábra. The Times Square
Az ebben a példában és a bejegyzésben szereplő többi példában használt kódot (C++ & Python) és képeket letöltheti, ha itt iratkozik fel hírlevelünkre.

A The Times Square egyik reklámtábláját lecserélhetjük egy általunk választott képre. Íme a lépések:

  1. Í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
  2. 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)
  3. A homográfiát a pts_src és pts_dst segítségével kapjuk meg.
  4. 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.

A 6. ábra. Virtuális hirdetőtábla. A bal oldali reklámtáblák egyikét egy általunk választott képpel helyettesítettük.

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

  1. 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.
  2. Az 5. ábrán használt képet az 5. ábra tartalmazza. ( The Time Square ) a GFDL licenc alatt áll.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.