A vállalkozásom a franchise. Értékelések. Sikertörténetek. Ötletek. Munka és oktatás
Keresés az oldalon

Optikai áramlási módszerek alkalmazása a képek elmozdulásának becslésére. Optikai áramlás felépítése Cikk örvénylő áramlások optikai módszerek

A fényerősségű képek együtt mozognak a megfigyelt objektumokkal. Az optikai áramlás a fényes kép látszólagos mozgása. Ideális esetben az optikai áramlás megfelel a mozgástérnek, de alább megmutatjuk, hogy ez nem mindig van így.

Rizs. 12.2. Optikai áramlás, amely nem mindig esik egybe a mozgástérrel. a - egy sima gömb forog állandó megvilágítás mellett - a kép nem változik, bár a mozgástér nem nulla; b - álló gömböt mozgó forrás világít meg - a kép megvilágítási eloszlása ​​megváltozik, bár a mozgástér nulla.

Tekintsünk egy ideálisan homogén gömböt, amely a látórendszer lencséje előtt forog (12.2. ábra, a). Mivel a felület ívelt, a gömb képén a fényesség térbeli eltérései figyelhetők meg. Ez a fényerősség-minta azonban nem mozog a felülettel együtt, és a kép sem változik az idő múlásával. Ebben az esetben az optikai fluxus mindenhol nulla, bár a mozgástér nem nulla. Tekintsünk most egy álló gömböt, amelyet mozgó fényforrás világít meg (12.2. ábra, b). A kép fényereje a forrás mozgásával változik. Ebben az esetben az optikai áramlás nyilvánvalóan nem nulla, bár a mozgástér mindenhol nulla. A tükörreflexiók és az árnyékok további példák arra, amikor az optikai áramlás nem esik egybe a mozgástérrel.

Csak az optikai áramláshoz férünk hozzá, és feltételezzük, hogy normál esetben az optikai áramlás nem nagyon különbözik a mozgástértől. Ez lehetővé teszi a relatív mozgás becslését a kép időbeli változása alapján.

Mit értünk egy fényességminta látszólagos mozgása alatt? Tekintsünk egy P pontot a képen, amely pillanatnyilag E fényerővel rendelkezik (12.3. ábra). A kép melyik P pontja felel meg pillanatnyilag neki, vagyis hogyan mozog a fényerejű kép ebben az időintervallumban? Általában a P pont közelében sok van

pontok azonos fényerejű E. Ha a kép minket érdeklő részén a fényerő folyamatosan változik, akkor a P pont egy egyenlő fényerősségű C vonalon fog feküdni. Jelenleg egy C egyenlő fényerősségű vonalnak felel meg ugyanaz az E érték. De mi a megfelelés a C és a WITH egyenesek pontjai között? Erre a kérdésre nem könnyű válaszolni, mivel ennek a vonalnak az alakja általában mozgás közben változik.

Megjegyezzük tehát, hogy a változó képen az optikai áramlást kétértelműen meghatározza a helyi információ. Illusztráljuk ezt még egy példával. Tekintsünk egy olyan egyenletes fényességű tartományt a képen, amely idővel nem változik. A „legvalószínűbb” ebben az esetben a nulla optikai fluxus lenne. Valójában egy homogén folton belül tetszőleges sebességet rendelhetünk a pontokhoz. Bár láthatóan a legegyszerűbb magyarázatot választanánk a megfigyelt képváltozásokra (jelen esetben az ilyen változások hiányára).

Legyen a megvilágítás a kép egy pontján az időben. Ekkor az optikai áramlási vektor ha és y komponensei ezen a ponton számíthatunk arra, hogy a megvilágítás ugyanaz lesz abban a pillanatban, ahol Más szóval, egy kis időintervallumra Ez az egyetlen korlátozás nem elegendő ahhoz, hogy egyértelműen Határozzuk meg a két ismeretlent és V. Az is világos, hogy szeretnénk kihasználni azt a tényt, hogy a mozgástér szinte mindenhol folytonos.

Ha a fényerő simán változik, akkor az egyenlet bal oldalát kibővíthetjük Taylor sorozattá és innen kapjuk

ahol az in tartalmazza a magasabb rendű kicsinységet kiindulva

Rizs. 12.3. A világossági minta látszólagos mozgása.

Nem könnyű eldönteni, hogy a második kép C szürke vonalán melyik P pont felel meg az első kép C fényerővonalának adott P pontjának.

Rizs. 12.4. Helyi információ a fényerő gradienséről és annak időbeli változásának mértékéről, amely csak egy korlátozást ró az optikai áramlási vektor összetevőire. Szükséges, hogy az áramlási sebesség a fényesség gradiens irányára merőleges egyenes mentén legyen irányítva. Csak a fényesség gradiens mentén irányított komponenst tudjuk meghatározni. Az áramlási sebesség merőleges irányú komponenséről semmit sem tudunk.

a másodiktól. Csökkentsük, osszuk el, és menjünk a határig, akkor kapjuk

Az optikai áramlás a számítógépes látás különböző területein használt technológia az eltolódások, a szegmentálás, az objektumok kiválasztásának és a videó tömörítésének meghatározására. Ha azonban gyorsan meg akarjuk valósítani a projektünkben, miután olvastunk róla a Wikipédián vagy valahol máshol, akkor valószínűleg nagyon gyorsan rábukkanunk arra a tényre, hogy nagyon rosszul működik, és meghibásodik az eltolások sorrendjének meghatározásakor. 1-2 pixel (legalábbis nálam ez volt). Ezután térjünk át a kész implementációkra, például OpenCV-ben. Ott különféle módszerekkel valósítják meg, és teljesen homályos, hogy a PyrLK rövidítés miért jobb vagy rosszabb, mint a Farneback megjelölés vagy valami hasonló, és ki kell találnia a paraméterek jelentését, amelyek közül néhányban sok van. megvalósítások. Ráadásul az az érdekes, hogy ezek az algoritmusok valahogy működnek, ellentétben azzal, amit mi magunk írtunk. mi a titok?

Mi az optikai áramlás

Az optikai áramlás (OP) a látszólagos mozgás képe, amely az egyes pontok eltolódását jelenti két kép között. Lényegében egy sebességmezőt képvisel (mivel az eltolódás a skálaig egyenlő a pillanatnyi sebességgel). Az OP lényege, hogy a kép minden pontjára találunk egy eltolást (dx, dy), hogy a második képen lévő pont megfeleljen az eredeti pontnak. Külön kérdés, hogy a pontok megfeleltetését hogyan lehet megállapítani. Ehhez valamilyen pontfüggvényt kell venni, ami az elmozdulás hatására nem változik. Általában úgy gondolják, hogy egy pont megtartja intenzitását (azaz a színes képek fényerejét vagy színét), de azok a pontok, amelyek megőrzik a gradiens nagyságát, a Hess-t, annak nagyságát vagy meghatározóját, a laplacit és más jellemzőket, azonosnak tekinthetők. . Nyilvánvalóan az intenzitás fenntartása sikertelen, ha a megvilágítás vagy a fény beesési szöge megváltozik. Ha azonban videofolyamról beszélünk, akkor nagy valószínűséggel a világítás nem sokat változik két képkocka között, már csak azért is, mert rövid idő telik el közöttük. Ezért az intenzitást gyakran olyan függvényként használják, amely egy ponton megmarad.

A leírás alapján az OP összetéveszthető a jellemző pontok keresésével és összehasonlításával. De ezek különböző dolgok, az optikai áramlás lényege, hogy nem keresi a speciális pontokat, hanem a képparaméterek alapján próbálja megállapítani, hogy egy tetszőleges pont hova tolódott el.

Két lehetőség van az optikai áramlás kiszámítására: sűrű (sűrű) és szelektív (ritka). A Sparse stream kiszámítja az egyes adott pontok eltolódását (például valamilyen jellemző detektor által kiválasztott pontok), a sűrű folyam természetesen az összes képpont eltolódását számítja ki, de egyes algoritmusok esetében a különbség nem olyan nagy, és bizonyos feladatokhoz meg kell találni az áramlást a kép minden pontján.

Degenerált esetekben egyszerűbb módszerek is alkalmazhatók az eltolódás meghatározására. Különösen, ha minden képpont azonos eltolódású (a teljes kép eltolódik), akkor a fáziskorrelációs módszer alkalmazható: mindkét képre számítsa ki a Fourier-transzformációt, keresse meg fázisaik konvolúcióját, és ennek segítségével határozza meg az eltolódást ( lásd en.wikipedia.org /wiki/Phase_correlation). Használhat blokkillesztést is: keresse meg azt az eltolást, amely minimalizálja az ablakban lévő képek közötti különbség normáját. Tiszta formájában egy ilyen algoritmus hosszú ideig fog működni, és instabil a forgással és egyéb torzításokkal szemben. Az angol Wikipédia felsorolja a felsorolt ​​algoritmusokat, mint az optikai áramlás kiszámításának különféle lehetőségeit, de ez számomra nem tűnik túl helyesnek, mivel ezek az algoritmusok más célokra is használhatók, és nem oldják meg teljesen ezt a problémát. Optikai áramlásnak nevezzük a képek helyi sajátosságain alapuló módszereket (ezt az angol Wikipédiában differenciális módszereknek nevezzük).

Standard megközelítés (Lucas-Kanade módszer)

Az algoritmus matematikai leírása kellő részletességgel szerepel ebben a cikkben, de csak az elméleti szempontokat érinti.

Tekintsük az optikai áramlás matematikai modelljét, feltételezve, hogy a pont intenzitása nem változott az elmozdulás következtében.

Hadd – intenzitás egy bizonyos ponton (x, y) az első képen (azaz a t időpontban). A második képen ez a pont elmozdult (dx, dy), míg eltelt a dt idő, majd Taylor kiterjesztette az intenzitásfüggvényt az első tagra (később lesz szó, hogy miért csak az elsőre), itt vannak a parciális deriváltak a koordináták és az idő tekintetében, vagyis lényegében a fényerő változása az (x, y) pontban két képkocka között.

Úgy gondoljuk, hogy a pont megőrizte intenzitását, ami azt jelenti
Egy egyenletet kapunk két ismeretlennel (dx és dy), ami azt jelenti, hogy nem elég megoldani, vagyis egyedül ezzel az egyenlettel nem jutunk messzire.

A probléma legegyszerűbb megoldása a Lucas-Kanade algoritmus. Képünkön 1 pixelnél nagyobb objektumok vannak, ami azt jelenti, hogy az aktuális pont közelében nagy valószínűséggel más pontok is megközelítőleg ugyanilyen eltolódásúak lesznek. Ezért veszünk egy ablakot e pont körül, és minimalizáljuk (a legkisebb négyzetek módszerével) a benne lévő teljes hibát Gauss-féle súlyozási együtthatókkal, vagyis úgy, hogy a vizsgált pixelek a legnagyobb súlyúak legyenek. A legegyszerűbb átalakítások után 2 egyenletrendszert kapunk 2 ismeretlennel:

Mint ismeretes, ennek a rendszernek nincs mindig egyedi megoldása (bár nagyon gyakran): ha a rendszer determinánsa nulla, akkor vagy nincs megoldás, vagy végtelen szám. Ezt a problémát Rekesznyílás-problémaként ismerik – eltolási kétértelműség korlátozott látómezővel periodikus képek esetén. Ez annak az esetnek felel meg, amikor egy kép töredéke, amelyben némi ciklikusság van, a látómezőbe esik; itt még az ember sem tudja egyértelműen meghatározni, hová tolódott el a kép. A probléma az, hogy a zaj miatt ilyen kétértelmű helyzetekben nem nulla determinánst kapunk, hanem nagyon kicsi, ami nagy valószínűséggel nagyon nagy eltolódási értékekhez vezet, amelyek nem korrelálnak különösebben a valósággal. Tehát egy bizonyos szakaszban csak azt kell ellenőrizni, hogy a rendszer determinánsa elég kicsi-e, és ha igen, akkor az ilyen pontokat ne vegye figyelembe, vagy jelölje meg hibásnak.

Miért nem működik?
Ha megállunk ennél a szakasznál és megvalósítjuk ezt az algoritmust, akkor sikeresen fog működni. De csak akkor, ha a szomszédos képek közötti eltolódás nagyon kicsi, 1 pixel nagyságrendű, és még akkor sem mindig. (A minőség elemzéséhez különböző relatív eltolódású szintetikus sorozatokat generáltam, és ez az eltolódás nem egész számú képponttal fejezhető ki, majd a kapott képet ennek megfelelően interpoláljuk) Már 2 pixeles eltolódásnál is nagy lesz a hiba , és ha 3 vagy több, az eredmény általában nem lesz megfelelő. mi a baj?

Itt a matematika beállított minket. Azt az érzést keltette bennünk, hogy körülöttünk minden funkció folyamatos és sokszor differenciálható. Általánosságban elmondható, hogy az intézetben azt tanították nekünk, hogy a Taylor-formulával egy függvény közelítését írjuk le egy pont szomszédságában, és meggondolatlanul, örömmel használjuk mindenhol. Most pedig gondoljunk a származékok fizikai jelentésére ezen a helyen? Használjuk őket egy függvény értékének változásának meghatározására egy pont véges környezetében, és a derivált egy végtelenül kicsi környékről ad képet. Ennek a szomszédságnak a kibővítésére lehetőség lenne magasabb rendű derivált hozzáadni a Taylor-bővítéshez, de ez nemlinearitásokhoz vezet a rendszerben, ami jelentősen megnehezíti a megoldást, és az előnyök megkérdőjelezhetőek lesznek, különösen mivel a gyakorlatban nem folytonos többszörösen differenciálható függvényekkel van dolgunk, hanem általában nem világos, hogy milyen diszkrét függvényekkel. Ezért logikusabb lenne egy g(x) függvényt keresni, amelyre a mi diszkrét esetünkben f(x) + g(x) = f(x+1), f(x) + 2g(x) = f(x) a lehető legpontosabban teljesül +2), f(x) - g(x) = f(x-1) stb. Így ebben az esetben nem deriváltra van szükségünk, hanem valamilyen lineáris függvényre, van a legközelebb az eredeti függvény pontjaihoz. Egyszerű matematikai számítások vezetnek megoldáshoz , Hol . Ha mindkét oldalon egy-egy szomszédos pont felhasználásával szerkesztettük meg a deriváltot, akkor szerencsénk volt: ebben az esetben a képlet egybeesik a deriváltak közelítő számítási képletével: g(x) = (f(x+1) – f(x- 1)) / 2. Az OpenCV-ben jellemzően a Lucas-Kanade optikai áramlás számításakor pontosan ezt a képletet használjuk, erre később még visszatérünk. De ha több pontot veszünk, akkor a képlet teljesen eltér az első derivált klasszikus differenciálsémáitól.

Nyilvánvaló, hogy ha ezt a függvényt például három szomszédos pont felhasználásával építjük fel az eredetitől balra és jobbra, akkor ez semmilyen módon nem függ a távolabbi pontoktól, és ennek megfelelően, ha háromnál többet tolunk el. pontokat, továbbra is gyakran kapunk nem megfelelő eredményeket . És azt is, hogy minél több pontból állítjuk össze ezt a függvényt, annál nagyobb az eredményül kapott egyenes átlagos eltérése a felhasznált pontoktól - megint csak abból kifolyólag, hogy nem lineárisan változó képeink vannak, hanem ki tudja, milyenek. A gyakorlatban a 2 pixelnél nagyobb eltolások már nem megfelelően nagy hibát produkálnak, akárhány pontot veszünk is.

Az algoritmus másik gyenge pontja, hogy ismét nem sima folytonos függvényekkel van dolgunk, hanem tetszőleges, sőt diszkrét függvényekkel. Emiatt egyes képrészleteken az intenzitás „ugrálhat” minden nyilvánvaló minta nélkül, például a tárgyak határain vagy a zaj miatt. Ebben az esetben egyetlen g(x) függvény sem tudja kellően pontosan leírni a kép változásait a pont közelében. Ennek leküzdésére (legalábbis részben) javasoljuk az eredeti kép elkenését, és hasznos lesz elég erősen elkenni, vagyis jobb, ha nem is mindenki kedvenc Gauss-elmosódását használja (súlyozási együtthatókkal átlagolva), hanem csak egy dobozszűrő (egységes átlagolás az ablak felett), és többször egymás után. A kép simasága most fontosabb számunkra, mint a részletek.

Azonban ezek az intézkedések sem mentenek meg minket attól, hogy az észlelt eltolást 2-3 pixelre korlátozzuk. És mellesleg az OpenCV 1.0-ban volt egy ilyen optikai áramlás megvalósítása, és ez csak ideális körülmények között és nagyon kis műszakban működött.

Mit tegyek?
Összefoglalva, a szokásos Lucas-Kanade jól azonosítja a kis eltolódásokat, így a kép hasonló a lineáris közelítéshez. Ennek leküzdésére a szokásos CV-technikát használjuk – többléptékű: különböző léptékű képekből építünk egy „piramist” (minden tengely mentén szinte mindig kétszeresére léptetjük, így könnyebb kiszámítani), és végigmegyünk rajtuk. optikai áramlással egy kisebb képről a nagyobbra , akkor a kis képen észlelt kis eltolódás nagy képen nagy eltolódásnak felel meg A legkisebb képen legfeljebb 1-2 pixel eltolódást észlelünk , és kisebb léptékről nagyobbra lépve az előző lépés eredményét használjuk, és finomítjuk az eltolási értékeket, az OpenCV-ben a calcOptFlowPyrLK függvény segítségével valósítjuk meg közelítés sok ponton: könnyebb a piramis több szintjét venni, és ennek a függvénynek egy meglehetősen durva közelítését elvégezni, ezért az OpenCV csak két szomszédos pontot számít ki , a közelítő függvény deriválttal szembeni előnyére vonatkozó következtetéseink haszontalannak bizonyultak: ilyen számú referenciapont esetén a derivált a legjobb közelítő függvény.

Milyenek vannak még?

Ez az algoritmus nem az egyetlen lehetőség az optikai áramlás kiszámítására. Az OpenCV-ben a Lucas-Kanade folyamon kívül van Farneback és SimpleFlow folyam is, és gyakran hivatkoznak a Horn–Schunck algoritmusra is.

Módszer Horn–Schunck valamivel globálisabb természetű, mint a Lucas-Kanade módszer. Arra a feltételezésre támaszkodik, hogy az optikai áramlás meglehetősen sima lesz a teljes képen. Ugyanebből az egyenletből javasolt áttérni a funkcionálisra, azaz hozzáadni azt a követelményt, hogy ne legyen éles változás az α súlyozási együttható mellett. Ennek a függvénynek a minimalizálása két egyenletrendszerhez vezet:

Ezekben az egyenletekben a laplaciai értéket közelítőleg javasoljuk kiszámítani: – eltérés az átlagértéktől. Kapunk egy egyenletrendszert, amelyet minden pixelre felírunk, és iteratív módon megoldjuk a teljes rendszert:

Ebben az algoritmusban a többszörös skálázást is javasolják, és a képek nem kétszeres, hanem 0,65-ös szorzós átméretezését javasolják.

Ezt az algoritmust az OpenCV első verzióiban implementálták, de később elhagyták.

Farneback javasolta az intenzitás változásának közelítését a szomszédságban egy másodfokú formával: I = xAx + bx + c szimmetrikus A mátrixszal (sőt, figyelembe véve a Taylor-kiterjesztést az első tagra, az I = bx + c lineáris közelítést vettük , vagyis most éppen a közelítés pontosságának növelése mellett döntöttünk) Ha a kép ezen a környéken belül elmozdult, akkor, behelyettesítjük a másodfokú bővítésben, nyissuk ki a zárójeleket, megkapjuk


.

Most mindkét képen kiszámolhatjuk A, b, c értékét, és akkor ez a rendszer redundáns lesz d-hez képest (az első egyenlet különösen zavaró), és általában d a második egyenletből kapható: . A következő közelítéshez kell folyamodnunk: . Az egyszerűség kedvéért jelöljük is , Akkor egyszerűen kapunk.

A számítások során fellépő zaj kompenzálására ismét arra a feltevésre térünk rá, hogy a vizsgált pont közelében minden pont többé-kevésbé azonos eltolódású. Ezért ismét integráljuk az ablak feletti hibát Gauss-súlyozási együtthatókkal w, és keresse meg azt a d vektort, amely minimalizálja ezt a teljes hibát. Ekkor megkapjuk az optimális értéket és a hozzá tartozó minimális hibát. Azaz minden pontra ki kell számolnunk, átlagolni kell az ablakot, meg kell fordítanunk a mátrixot és megkapjuk az eredményt. Ennek megfelelően ezek a termékek a teljes képre számíthatók, és a különböző pontokhoz előre kiszámított értékek használhatók, vagyis pontosan ez az eset, amikor van értelme sűrű áramlást számítani.

Szokás szerint ez az algoritmus számos módosítást és fejlesztést tartalmaz, elsősorban az ismert a priori információk felhasználását - az áramlás adott kezdeti közelítését - és ismét a többszörös skálázást teszi lehetővé.

A módszer alapja SimpleFlow a következő gondolat rejlik: ha még mindig nem tudjuk, hogyan határozhatunk meg egy nagyobb eltolódást, mint annak az ablaknak a mérete, amelyen a származékokat kerestük, akkor miért foglalkozunk a deriváltok kiszámításával? Keressük meg az ablak leghasonlóbb pontját! A kétértelműségek feloldásához és a zaj kompenzálásához pedig figyelembe vesszük, hogy az áramlás folyamatos, és egy adott pont közelében minden pont közel azonos eltolódású. És ismét megoldjuk az ablakmérettel kapcsolatos problémát a többszörös skálázással.

Szigorúbban az algoritmus így hangzik: az ablak minden pontjára van egy „energia” függvény, amely felelős (fordított logaritmikus függőséggel) a kezdeti pont ebbe a pontba való átmenetének valószínűségéért: . Ezután megvizsgáljuk ennek az energiának a konvolúcióját egy Gauss-ablakkal, és megtaláljuk azokat az értékeket (dx,dy), amelyek minimalizálják ezt a függvényt. A szubpixel pontosság eléréséhez a talált optimális pont (dx,dy) kis környékét figyelembe veszik, és az energiafüggvény csúcsát egy paraboloid csúcsaként keresik benne. És amint fentebb említettük, ezt az eljárást méretezett képek piramisán hajtják végre. Algoritmusuk okos módszereket is kínál a számítások felgyorsítására, de akit érdekel, az magától rájön. Számunkra az a fontos, hogy ennek köszönhetően ez az algoritmus (elméletileg) elég gyors, jó pontossággal. És nem ugyanaz a probléma, mint az előzőeknél, hogy minél nagyobb az eltolódás, annál rosszabb az észlelés.

Mi van, ha nem vesszük fel az intenzitást?

Fentebb elhangzott, hogy a pontok közötti megfelelés különböző mennyiségekkel határozható meg, akkor miért csak az intenzitást vesszük figyelembe? Hanem azért, mert bármilyen más érték redukálható rá: egyszerűen a megfelelő szűrővel szűrjük a képeket, és a szűrt képeket a fent leírt algoritmusok bemenetére tápláljuk. Ennek megfelelően, ha optikai áramlást szeretne használni, akkor először gondolja át, hogy az Ön körülményei között melyik képkarakterisztika lesz a legstabilabb, és végezzen megfelelő szűrést, hogy az algoritmus bemenete ne az intenzitás, hanem ez a karakterisztikája legyen.

Gyakorlat

Próbáljuk ki a gyakorlatban az OpenCV által kínált algoritmusokat.

Itt számos különböző vizsgálatot végezhet az egyes algoritmusokról, változó paraméterekről, változó bemeneti szekvenciákról - különböző eltolásokkal, forgatásokkal, projektív transzformációkkal, szegmensekkel, különböző zajokkal stb. Mindez sok időt és a jelentés méretét venné igénybe. meghaladná ezt a cikket, Ezért itt azt javaslom, hogy korlátozzuk magunkat a fix távolsággal párhuzamos képeltolás egyszerű esetére és kis zaj rákényszerítésére. Ez lehetővé teszi, hogy általánosságban megértse, hogyan kell algoritmusokat futtatni, és melyik a menőbb.

Az eljárások szintaxisa részletesen a kézikönyvvel ellátott oldalon van leírva.

A klasszikus Lucas-Kanade egy piramis segítségével valósul meg a calcOpticalFlowPyrLK eljárásban. Az algoritmus kiszámítja a ritka áramlást, vagyis az első kép adott ponthalmazához megbecsüli a helyzetüket a második képen. A bemeneti paraméterek teljesen nyilvánvalóak: két bemeneti kép, egy bemeneti és egy kimeneti pontkészlet, állapot - egy kimeneti vektor, amely jelzi, hogy a megfelelő pontot sikerült-e megtalálni, err - a megfelelő pontok becsült hibáinak kimeneti vektora, WinSize - annak az ablaknak a mérete, amelyen a Gauss-átlagolás történik, 21x21-et vettem és jól működött, maxLevel – a gúla rétegeinek száma mínusz egy, azaz az utolsó réteg száma, 5-öt vettem, kritérium – a kilépés feltétele az eltolás meghatározásának iteratív folyamata (a hiba minimalizálása iteratív módon történik) – ezt a paramétert alapból elhagytam, flagek – további jelzők, például használhatjuk a kezdeti áramlási közelítést, vagy kiválaszthatjuk a hibabecslési módszert, minEigThreshold – a gradiens küszöbértéke érték, amely alatt a mátrix szingulárisnak minősül, alapértelmezés szerint elhagytam. Az OpenCV 2.4.1 óta a méretezett képek előre kiszámított piramisa használható az áramlás kiszámításához.

A munka eredménye, hogy a kis és nagy eltolások is sikeresen és stabilan érzékelhetők, elég nagy zajoknak ellenáll, a működési idő 400 ponton kb 10 ms 5 rétegű piramisnál (i7 950 magon).

Ez az algoritmus egyébként GPU-n (CUDA) is megvalósul, sűrű és ritka verziókban egyaránt.

A Farneback áramlást a calcOpticalFlowFarneback eljárással valósítjuk meg, kiszámítjuk a sűrű áramlást, vagyis az egyes pontok eltolódását. Paraméterek: bemeneti képek, kimeneti adatfolyam kétcsatornás float mátrix formátumban, pyr_scale a piramis rétegei közötti léptékarányt határozza meg, szintek – a piramis szintek száma, winsize – az ablak mérete, amelyen átlagoljuk végrehajtódik, iterációk – az iterációk száma az egyes szinteken, poly_n – a polinom mérete, amellyel A és b értékét megbecsüljük, poly_sigma – a Gauss-elmosódás szigmája derivált simításkor, ajánlott paraméterértékek A kézikönyvben meg vannak jelölve, zászlók – további jelzők, például használhatja az áramlás kezdeti közelítését vagy más módon az ablakon belüli átlagot.

Ez az algoritmus sokkal kevésbé stabil (megfigyeléseim szerint), könnyebben kimarad a meglehetősen egységes képeken (nyilván a sikertelen pontok szűrésének hiánya a probléma), és nem érzékeli jól a nagy eltolódásokat. Nekem 512x512-es képen 600 ms alatt működött.

A SimpleFlow áramlás a calcOpticalFlowSF eljárást valósítja meg (ismét a sűrű áramlás kiszámítása), és számos rejtélyes paraméterrel rendelkezik alapértelmezett értékek nélkül, és általában jelenleg az oldalon található információk nagyon tömörek. Próbáljuk meg kitalálni. Az első 3 bemeneti kép és kétcsatornás kimenet; rétegek – a piramis rétegeinek száma, azaz hányszor méretezzük át az eredeti képet; averaging_block_size – annak az ablaknak a mérete, amelyben a pixel energiafüggvényét kiszámítottuk; max_flow – az a maximális eltolódás, amit minden lépésnél meg akarunk határozni, lényegében az ablakméret határozza meg (bár nem teljesen világos, hogy miért int). Itt abbahagyhatod, vagy beállíthatsz még néhány paramétert, ezek közül néhánynak nem tudom értelmezni.

Az oldal egy példát kínál a használatára, amelyben a következő paraméterekkel indul: calcOpticalFlowSF(frame1, frame2, flow, 3, 2, 4, 4.1, 25.5, 18, 55.0, 25.5, 0.35, 18, 55.0, 255. , 10) ;

Az én algoritmusom sokkal lassabban működik, mint mások, körülbelül 9-12 másodperc 512x512-es képenként. A munka eredménye hihetőbbnek tűnik, mint a Farneback, az egyenletes képeken legalább jobban meghatározható a váltás, nagy eltolásoknál pedig érezhetően jobban működik.

Következtetések

Ha valahol optikai áramlást szeretne használni, először mérlegelje, hogy szüksége van-e rá: egyszerűbb módszerekkel sokszor meg lehet boldogulni. Érdemes néhányszor átgondolni egy folyamat saját maga valósítását: minden algoritmusnak sok trükkje, finomsága és optimalizálása van; Bármit is tesz, valószínűleg jobban fog működni az OpenCV-ben (persze, feltéve, hogy ott van). Ezen túlmenően teljes mértékben kihasználják a logikai és hardveres optimalizálásokat, például az SSE utasítások használatát, a többszálú feldolgozást, a számítási lehetőségeket CUDA-val vagy OpenCL-lel stb. Ha csak egy bizonyos ponthalmaz eltolódását kell kiszámítani (azaz ritka adatfolyamot), akkor biztonságosan használhatja a calcOpticalFlowPyrLK funkciót, jól, megbízhatóan és meglehetősen gyorsan működik. A sűrű áramlás kiszámításához jó a calcOpticalFlowSF függvényt használni, de az nagyon lassú. Ha a teljesítmény kritikus, akkor a calcOpticalFlowFarnebacket, de továbbra is meg kell győződnie arról, hogy a munkájának eredménye megfelel Önnek.

Címkék hozzáadása

1 Agafonov V. Yu. 1

Agafonov Vladislav Jurijevics - a Volgogradi Állami Műszaki Egyetem "Számítógéppel segített tervezési és keresőtervezési rendszerek" tanszékének végzős hallgatója,

Volgográd Megjegyzés: Ez a cikk a videofolyamban lévő képek közötti eltolások megtalálásának két megközelítését tárgyalja. Az első megközelítés a hiba minimalizálásán alapul a legkisebb négyzetek módszerével, amikor a kép kulcspontjainak elmozdulását keresik. A második megközelítés azon alapul, hogy az egyes pixelek egy-egy tartományát egy másodfokú polinommal közelítjük, ami jól használható mozgásbecslésben. Leírjuk a módszerek megvalósításának főbb szakaszait. A feladat sajátosságait figyelembe véve tesztképsorozatokat készítettem. E tesztek eredményeit ismertetjük.

Kulcsszavak: képfeldolgozás, képeltolódás keresés

OPTIKAI ÁRAMLÁSI MÓDSZEREK ALKALMAZÁSA KÉPELTOLÁS BECSLÉSÉRE

Agafonov V.U. 1

1 Agafonov Vladislav Urevics - posztgraduális hallgató a „Számítógéppel segített tervezési és keresőtervezési rendszerek” szakon,

Volgograd Állami Műszaki Egyetem, Volgograd

Absztrakt: ebben a cikkben a képeltolódás becslésének módszereit ismertetjük. Az első megközelítés az átlagos négyzetes hiba minimalizálásán alapul, amikor a kép kulcspontjainak elmozdulását keresik. A második megközelítés mindkét keret minden környezetének másodfokú polinomokkal való közelítésén alapul, ami hatékonyan elvégezhető a polinomkiterjesztési transzformáció használatával. Leírjuk ezen módszerek megvalósításának főbb szakaszait. A tesztképsorozatokat a probléma sajátos jellegének figyelembevételével készítik el. A munka eredményeit bemutatjuk.

Kulcsszavak: képfeldolgozás, képeltolódás becslés

UDC 004.932.2

Bevezetés

A számítógépes látásproblémák megoldása során gyakran felmerül egy tárgy képkockákban való mozgásának vagy két egymást követő képkocka elmozdulásának becslése egy videofolyamban. A jelenet mozgási paramétereinek képkockákban való pontos becslése számos algoritmus számára fontos tényező, ezért a mozgásérzékelési módszereknek szubpixel pontosságot kell biztosítaniuk.

Számos megközelítés létezik a képeltolódás becslésére. A főbbek a következők: a kép legfontosabb jellemzőinek azonosítása, majd a kulcspontok összehasonlítása, a képjel és az optikai áramlás frekvenciaábrázolása fáziskorrelációjának meghatározása. Ez utóbbi fő formájában nem a képelmozdulások keresésére szolgál, hanem a képen belüli mozgás jelenlétének meghatározására. Így az optikai áramlást az objektumok észlelésére és követésére szolgáló rendszerekben használják.

Az optikai áramlás a tárgyak, felületek vagy a jelenet szélei látszólagos mozgásának mintázata, amelyet a megfigyelő (szem vagy kamera) a jelenethez viszonyított relatív mozgása okoz. Az optikai áramlás alapú algoritmusok – például a mozgásérzékelés, az objektumszegmentálás és a mozgáskódolás – az objektumok, felületek és élek ezen mozgását használják.

Ebben a munkában két megközelítést veszünk figyelembe, amelyek közül az egyik lehetővé teszi az egyes kulcspontok eltolásainak elérését, a második pedig minden egyes pixel esetében.

Optikai áramlás Lucas-Kanade módszerrel

A módszer alapkoncepciója az, hogy feltételezzük, hogy a pixelértékek egyik képkockáról a másikra mozognak anélkül, hogy változnának:

Ahol. A maradék tag figyelmen kívül hagyásával megkapjuk a ???? közelítés képletét:

ahol meghatározza az eltolást. A feltevésnek megfelelően azt kapjuk. Ezután a (4) egyenletet úgy írjuk fel

Kiderül, hogy a parciális deriváltak összege nulla. Mivel azonban csak egy egyenletünk és két ismeretlenünk van, további feltételeket kell szabnunk. Az egyik gyakori módszer a közeli képpontok korlátozása. Tegyük fel, hogy a szomszédos pixelek egyformán mozognak. Nyilvánvalóan nem létezhet olyan eltolás, amely minden pixelt kielégít, ezért a legkisebb négyzetek módszerével minimalizáljuk a hibát.

ahol egy szimmetrikus mátrix, egy vektor és egy skalár. Az együtthatók kiszámítása súlyozott legkisebb négyzetek használatával történik az adott környék jelértékeihez. A súlyozási függvény két összetevőből áll, amelyeket bizonyosságnak és alkalmazhatóságnak neveznek. A bizonyosság a jel értékét a szomszédságban lévő értékekhez viszonyítja. Az alkalmazhatóság meghatározza a pontok relatív hozzájárulását a szomszédságban elfoglalt helyük szerint. Általában a középpontnak van a legnagyobb súlya, a többi pont súlya sugárirányban csökken. Mivel a kép egy bizonyos környéken másodfokú polinomként van kibontva, meg kell érteni, hogyan viselkedik a polinom ideális eltolás esetén. Legyen egy másodfokú polinom, amelynek alakja:

A másodfokú polinomok megfelelő együtthatóinak egyenlővé tétele a következő:

Ez minden jelre igaz.

Nyilvánvalóan irreális az a feltételezés, hogy a jel egyetlen polinommal ábrázolható. A (10) reláció azonban használható valós jelekre, még akkor is, ha hibák lépnek fel. A fő kérdés az, hogy a hibák elég kicsik-e ahhoz, hogy az algoritmus hasznos legyen.

Cseréljük le a globális polinomiális reprezentációt egy lokálisra. Számítsuk ki az első és a második kép polinomiális együtthatóit. A (9) pont szerint így kell lennie, de a gyakorlatban a közelítést használják:

ahol a globális elmozdulás helyébe térben változó elmozdulást tükrözi.

A gyakorlatban a (11) egyenlet elemenként megoldható, de az eredmények túl zajosnak bizonyulnak. Ehelyett azt feltételezzük, hogy az eltolási tartomány lassan változik, így a szomszédos pixelek segítségével integrálni tudjuk az információkat. Így megpróbáljuk megtalálni, kielégítve (11) a szomszédságban, vagy formálisabban:

A módszer fő problémája az a feltételezés, hogy a polinomok azonosak, kivéve az eltolást. Mivel a polinom lokális polinomi kiterjesztése a környezettől függően változik, ez hibát fog bevinni a (11)-be. Kis elmozdulások esetén ez nem fontos, de az elmozdulás növekedésével a hiba növekszik. Ha eleve ismerjük a torzítást, összehasonlíthatunk két polinomot: az első in, a második in, ahol ez az előzetes torzítás, egész értékre kerekítve. Így iteratív módon hajthatjuk végre a metódust. A jobb előzetes torzítás viszonylag kisebb torzítást jelent, ami viszont növeli a valós torzítás jó becslésének esélyét.

Optikai áramlási módszerek alkalmazása képeltolódások keresésének problémájára

Ezen módszerek tesztelésére mesterséges adathalmazon végeztek tesztelést, pl. torzított képgenerátor segítségével kapjuk meg. A szubpixeleltolás eléréséhez az eredeti képről az egymáshoz képest enyhe eltolódású területeket vágtuk ki. Ezt követően a kapott tesztképeket ennek megfelelően többször tömörítettük, a rajtuk lévő információk egy része eltűnt, és az elmozdulás szubpixelre csökkent.

A Lucas-Kanade módszerhez sok kulcspontot kell kiválasztani, amelyek elmozdulását meg kell találni. Erre a célra a klasszikus határ- és sarkkeresési módszert alkalmazzák. Ezen pontok mindegyikének eltolása után átlagolni kell a kapott eredményt.

A Farneback módszerhez elegendő az eltolási értékek átlagolása minden pixelben.

A kísérletet 20 tesztpárból álló mintán végeztük, és mindegyik módszer esetében kiszámítottuk a szórását.

OP Lucas-Kanada

OP Farnebaca

1. táblázat – Az elmozdulások szórása

A kísérleti eredményekből látható, hogy mindkét módszer nagy pontossággal becsüli meg a képek elmozdulását. A Farneback módszerének eredménye gyengébb eredményt mutat, mivel a módszer minden pixelre becsüli az elmozdulást, és a kép monokromatikus részein hibákat okozhat.

Mindegyik módszernek megvannak a maga előnyei és hátrányai, valamint hatóköre és korlátai. A Lucas-Kanade módszer ritka optikai áramlást valósít meg és

szubpixel pontosságot érhet el. De a nem síkpárhuzamos mozgásnál egy másik probléma is felmerül, hogyan lehet megbecsülni a nem kulcsfontosságú pontok elmozdulását. Az első megoldás egy Voronoi-diagram megalkotása a képsíkra adott kulcspontokkal. Ez a megközelítés azon a feltételezésen alapul, hogy a kulcspontokhoz közel található területek ugyanúgy mozognak, mint a kulcspontok. Általában ez nem mindig igaz. A gyakorlatban a kulcspontok többnyire éles színátmenet-változások területei, ami azt jelenti, hogy a kulcspontok többnyire a részletes objektumokra koncentrálódnak. Ezért az egyszínű területek eltolása nagy hibával jár. A második megoldás két kép homográfiájának megtalálása. Ez a megoldás a kép széleinél tapasztalható elmozdulás pontatlan becslésétől is szenved.

A Farneback optikai áramlási módszer előnye, hogy az elmozdulást minden pixelre megtaláljuk. Ez a módszer azonban hibázik a periodikus és gyengén textúrájú objektumokon is, de lehetővé teszi a nem sík párhuzamos mozgások értékelését.

Következtetés

Ez a cikk a képelmozdulás becslésének optikai áramlási módszereken alapuló megközelítését tárgyalja. A módszerek alkalmazhatósága bizonyítást nyert, és egy összehasonlító elemzés eredményeit mutatom be. A módszerek kísérleti vizsgálatai kimutatták, hogy ez a megközelítés rendkívül pontos, és felhasználható a jelenet mozgási paramétereinek becslésére.

Hivatkozások/ Hivatkozások

  1. Fleet D., Weiss Y. Optical flow estimation //Matematical modellek kézikönyve számítógépes látásban. - Springer USA, 2006. - 237-257.
  2. Farnebäck G. Kétkockás mozgásbecslés polinomkiterjesztés alapján //Képelemzés. - 2003. - P. 363-370.

Ez a vizuális jelenet tárgyak, felületek és élek mozgásának látható nyomának ábrázolása, amely akkor figyelhető meg, ha a megfigyelő (például emberi szem vagy kamera) és a jelenet között relatív mozgás van.

Az optikai áramlás fogalmát James J. Gibson amerikai pszichológus javasolta az 1940-es években annak a vizuális ingernek (jelnek) leírására, amely azokban az állatokban fordul elő, amelyek a térben a környezetükhöz képest mozognak.

James Gibson hangsúlyozta az optikai áramlás fontosságát az észlelési képességben, a korlátok és cselekvési lehetőségek felismerésében a környezetben. Gibson robotjának és a pszichológia ökológiai megközelítésének követői ezt követően meg tudták mutatni az optikai áramlási inger szerepét a megfigyelő mozgásának észlelésében a környező világhoz képest; a környező tárgyak alakjának, távolságának és mozgásának érzékelése; és mozgásszabályozás.

A közelmúltban az optikai áramlás kifejezést a robotika választotta ki, hogy magában foglalja a képfeldolgozás és a navigációs vezérlés releváns technikáit, például mozgásérzékelést, tárgyszegmentálást, időkontaktus-információkat, fókusztágulási számításokat, fénysűrűséget, mozgáskompenzált kódolást és sztereót. eltérés mérések.

A közelmúltban az optikai áramlás kifejezést a robotikusok közösen választották ki, hogy magában foglalja a képfeldolgozás és a navigációs vezérlés releváns technikáit, mint például a mozgásérzékelést, az objektum szegmentálását, az érintkezési időre vonatkozó információkat, a tágulási fókusz számítását, a fénysűrűséget, a mozgáskompenzált kódolást és sztereó eltérésmérés.

Számítás

A rendezett képek sorozata lehetővé teszi a mozgás becslését akár pillanatnyi képsebesség formájában, akár a képeltolódás diszkrét értékei formájában. Vannak tananyagok lecke formájában a gradienseken alapuló optikai áramlási módszerről. A kutatók elemezték a különböző optikai áramlási technikák összehasonlítását, valamint elemezték a mérések pontosságát és gyakoriságát.

Az optikai mozgásszámítási módszerek megkísérlik megbecsülni az adott pillanatban látható két képkocka közötti mozgást tés minden voxel pozícióban. Az ilyen módszereket differenciálisnak nevezzük, mert a Taylor-sor képjelre vonatkozó lokális becslésein alapulnak, azaz parciális deriváltokat használnak a térbeli és időbeli koordináták tekintetében.

2D + méret esetén t(ugyanez a 3D ill n-D esetek) egy voxel helye olyan intenzitással, amely továbbhalad, és két képkocka között, és az azt követő megszorításokkal fényesség állandóságaállandósági kényszer) felírható:

Feltételezve, hogy az elmozdulás jelentéktelen volt, a kép közelítését a Taylor-sorozat segítségével kiszámítva a következő eredményt kaphatjuk:

… (magasabb rendű tagok)

Ezekből az egyenletekből az következik, hogy:

ami azt eredményezi

ahol ezek a komponensek és a sebesség vagy az optikai áramlás, és a kép származékai a megfelelő irányban. És tovább írható a származékokra.

Így:

Ez az egyenlet két ismeretlennel önmagában nem oldható meg. Ez az úgynevezett rekesznyílás (membrán) probléma optikai áramlási algoritmus. Az optikai áramlás kiszámításához más egyenletkészletre van szükség, amelyet néhány további feltétel határoz meg. Az optikai áramlás kiszámítására szolgáló összes módszer további feltételeket vezet be a tényleges áramlás becsléséhez.

Optikai áramlásérzékelő

Az optikai áramlásérzékelő olyan látóérzékelő, amely képes optikai áramlást vagy vizuális mozgást mérni, és az optikai áramlás alapján mérési eredményt készíteni. Az ilyen érzékelőknek sokféle konfigurációja létezik. Ez lehet egy olyan processzorhoz csatlakoztatott képérzékelő, amelyre az optikai áramlási algoritmus programozva van. Egy másik konfiguráció integrált áramkörként tervezett vizuális chipet használ, amely az érzékelőt és a processzort is egyetlen chipen tartalmazza egy kompakt eszközben. Példa erre az optikai egerekben használt hagyományos optikai egérérzékelő. Egyes esetekben analóg vegyes jelű áramköröket használó számítási áramkörök használhatók az optikai áramlás gyors kiszámítására minimális áramfelvétel mellett.

A jelenlegi kutatások egyik területe a neuromorf mérnöki technikák alkalmazása olyan áramkörök megvalósítására, amelyek érzékelik az optikai áramlást, és így optikai érzékelőként használhatók. Az ilyen áramkörök a biológiai neurális hálózatokból veszik az ötleteket, és hasonló elv alapján érzékelik az optikai áramlást.

Kapcsolódó képek

Az optikai áramlás a tárgyak, felületek vagy a jelenet éleinek látszólagos mozgásának képe, amely a megfigyelő (szem vagy kamera) jelenethez viszonyított mozgásából ered. Az optikai áramlás alapú algoritmusok – mint például a mozgásérzékelés, az objektumszegmentálás, a mozgáskódolás és a sztereó eltérés számítása – kihasználják az objektumok, felületek és élek mozgását.

Optikai áramlásbecslés

Az optikai áramlás alapú módszerek kiszámítják a mozgást két képkocka között, amelyek egy adott pillanatban és minden pixelnél készülnek. Ezeket a módszereket differenciálisnak nevezzük, mert a Taylor-soros szegmensjel közelítésén alapulnak; így parciális deriváltokat használnak az idő és a térbeli koordináták tekintetében.

2D+ méret esetén t(nagyobb dimenziójú esetek hasonlóak) az egy képkockán belüli intenzitású pozícióban lévő pixel átkerül a és -be, és a következő egyenlet írható fel:

Feltételezve, hogy az elmozdulás kicsi, és a Taylor sorozatot használva a következőket kapjuk:

Ezekből az egyenlőségekből az következik:

innentől az derül ki

Optikai áramlási sebesség összetevői -ban,

Származtatott képek a megfelelő irányban.

Így:

Az eredményül kapott egyenlet két ismeretlent tartalmaz, és nem lehet egyértelműen feloldani. Ezt rekesznyílás-problémának nevezik. A problémát további megszorítások - a rendszeresítés - oldják meg.

Az optikai áramlás meghatározásának módszerei:

    A fáziskorreláció a normalizált keresztspektrum inverziója.

    Blokk módszerek - a négyzetösszeg vagy a különbségek modulusának minimalizálása

    Differenciális módszerek az optikai áramlás becslésére a jel részleges származékai alapján:

    A Lucas-algoritmus – Kanade – a kép egyes részeit és a mozgás affin modelljét veszi figyelembe

    Horn–Schunck - egy olyan funkcionális minimalizálása, amely leírja az állandó fényerő feltételezésétől való eltérést és a kapott vektormező simaságát.

    Buxton–Buxton - az objektumhatárok mozgásának modelljén alapul egy képsorozatban

    Az általános variációs módszerek a Horn-Schunck módszer olyan módosításai, amelyek különböző adat- és különböző simasági megszorításokat használnak.

    Diszkrét optimalizálási módszerek - a keresési teret kvantálják, majd a kép minden pixeléhez hozzárendelnek egy címkét, hogy az egymást követő képkockák közötti távolság minimális legyen. Az optimális megoldást gyakran algoritmusok segítségével találják meg a minimális vágás és a maximális áramlás meghatározására egy gráfban, lineáris programozással vagy hiedelemterjesztéssel.

Az optikai áramláskövetést gyakran használják rögzített kamerákkal, például repülőterek vagy épületek kameráival vagy rögzített műszerfalakkal.

Ebben a munkában a Lucas-Kanade algoritmust használó módszert alkalmaztuk (4-6. ábra)

Rizs. 4 A modell fő ablaka



Rizs. 5 Model blokkok

Rizs. 6 A modell eredménye

Ez a modell egy optikai áramlásbecslési módszert használ a mozgásvektorok meghatározására a videofájl egyes képkockáiban. A mozgásvektorok korlátozásával és morfológiai közelítésével a modell bináris jellemzőképeket hoz létre. A modell minden bináris képen talál egy autót a „Blob Analysis” blokkon keresztül. A Draw Shapes blokk ezután zöld téglalapot rajzol a fehér vonalon áthaladó autók köré.

A módszer hátránya, hogy a kamerának álló helyzetben kell lennie, különben a felismerés és a követés eredménye kiszámíthatatlan lesz.