A gyors Hough-transzformáció ( Fast Hough Transform , röv . FHT) a Hough-transzformáció olyan módosítása, amely lehetővé teszi vonalak (valamint további módosításokkal szegmensek és négyszögek ) paraméteres azonosítását a tény felhasználása miatt kisebb számítási bonyolultsággal. a figyelembe vett diszkrét vonalak önmetszéspontja.
Az algoritmust először M. L. Brady javasolta 1992-ben, [1] később különböző szerzők többször is újra feltalálták. [2] [3]
Adjunk meg egy méretű képet . Tekintsünk diádikus vonalakat (egyenes vonalakat), amelyek a képen egyenként pixelekből állnak (oszloponként egy pixel).
Legyen a paraméterek által megadott diadikus egyeneshez tartozó th pixel intenzitása ; — Ennek a diadikus vonalnak a félképe.
A diszkrét Hough-transzformáció képét a következő képlet határozza meg:
Az összes érték közvetlen kiszámítása műveleteket igényel : a paraméterek különböző értékeinek felsorolása , , az egyes értékpárok felsorolása .
Az FHT algoritmus viszont, amely a szegmensek egymás közötti metszéspontjainak figyelembevételén alapul, műveleteket igényel , műveletek szükségesek egy egyeneshez (négyzetes képekhez ). A T. M. Khanipov [4] által megfogalmazott tétel szerint lehetetlen aszimptotikusan kisebb számítási bonyolultságú diádikus sorokat összeadni.
Az algoritmus az „ oszd meg és uralkodj ” elvén alapul. A probléma az, hogy megtaláljuk a pixelértékek összegét a kép „bal” és „jobb” szélét összekötő szegmensek mentén. A kép felére van osztva, minden részben önállóan oldják meg a problémát. Az egyes szegmensek végösszegének kiszámításához a „bal” és a „jobb” felén lévő válaszokat összeadjuk.
Az FHT algoritmusban tetszőleges vonalak képpontjait diszkréten diádikus vonalakkal közelítik. Az egyenes diádikus közelítésének képpontjai a képméretben legfeljebb képponttal távolodnak el az eredeti egyenestől. [5]
A szegmenseket az összekapcsolt pixelek középpontja paraméterezi. Ezért egy szegmens részszegmensekre bontása csak megközelítőleg alkotja az eredeti szegmenst. A közelítési hiba rekurziós lépésekkel kumulatív, de legfeljebb pixel. [5] A szegmens így megszerkesztett képpontokká diszkretizálását diádikus közelítésnek nevezzük .
Továbbá a minta pixelek halmaza, amely a kép minden függőleges részén tartalmaz egy elemet. A minta eltérése lesz az érték , és a koordináta lesz az érték . A mintaváltást halmaznak nevezzük
p ↗ ( a , b ) = { ( x én + a , y én + b ) | ( x én , y én ) ∈ p } {\displaystyle p\narrow (a,b)=\lkapcsos zárójel \left(x_{i}+a,y_{i}+b\right)\ |\ (x_{i},y_{i})\in p \rbrace } A szélesség és lejtés generatív diadikus mintái rekurzív módon vannak definiálva. A esetén a minta egy pixelből áll, a esetén pedig -ben fejeződik ki .
A túlnyomórészt vízszintes, felfelé irányuló, diadikus vonalak az összes függőlegesen eltolt generatív mintából származnak , amelyek a kép összes lehetséges koordinátájával épülnek fel .
A Hough-transzformáció hozzávetőleges kiszámításához meg kell találni a kép összes diadikus vonalának összegét. Ebben a vonalak összegében minden egyes pont szerepel. A rekurzív átmenet miatt ez az összegzés a bal, külön a jobb felek külön-külön történő számlálására redukálódik, ami lehetővé teszi, hogy a számítást lecsökkentsük a pontok feletti összegek kiszámítására.
Tekintsük a 0 és 1 számokból álló bináris szavakat. A diadikus szavak halmazát rekurzívan definiáljuk. diádikus szónak nevezzük, ha a vagy alakja van , ahol egy üres vagy diadikus szó. Minden háromnál nem hosszabb diádikus szó: 0, 1, 000, 010, 101, 111.
Minden diadikus szóra a kumulatív összeget veszik figyelembe . Azt fogjuk mondani, hogy a pixelsorozat egy diadikus egyenes, amely összeköti a pixelek középpontját és .
Vannak pontosan diadikus hosszúságú vonalak . Minden és párhoz egy .
Az FHT algoritmus a következőképpen épül fel: [6]
A mátrix kezdeti állapota a méret eredeti képe . Ezután a számítás a -edik szinteken sorra történik, az elsőtől kezdve: a -edik szinten az aktuális állapotú mátrixot csoportokra osztják a második tengely koordinátájának egész részének egyenlőségének elve szerint. -vel való osztás után ; almátrixokat kapunk ; egyesítsd a szomszédosakat párokba (metszéspontok nélkül ez lehetséges, mivel a mátrix mérete kettő hatványa), és ebben a párban hívjuk az első almátrixot, amely a mátrix második koordinátája mentén kisebb koordinátákon található , és a másik - a második; minden párban az első helyett az összegét a megfelelő másodikkal írjuk, a második helyett pedig az első és a második összegét egy ciklikus eltolással balra. Így az ilyen vonalak Hough-képe olyannak tekinthető, hogy bármely pontpárra, amelynek koordinátái ebből az egyenesből származnak , teljesül a diádikus egyenesekkel történő közelítéssel. A többi sor képének kiszámításához elegendő a képet elforgatni, elvégezni ugyanazt a műveletet, majd hozzáadni az eredményeket.
Az így kapott mátrixok minden szinten az FHT piramis elemei. Az FHT-piramis formális leírása : Az FHT-piramis nulladik szintje az eredeti kép (nagyságú , az utolsó pedig a Hough-kép, amely hosszúságú diádikus egyenesek mentén összegeket tartalmaz . A piramis 0. szintjének leírása , az eredeti kép vízszintes csíkokra van felosztva , ahol a csík száma, Minden csíkhoz az FHT piramis th szintje tárolja az összes lehetséges csíkminta összegét hosszával és paramétereivel . Az ilyen minták száma egy csíknál : tehát a piramis edik szintje annyi memóriát foglal el, mint az eredeti kép.
Az elhasznált memória mennyiségének változatlansága és az, hogy az egyes szinteket az eredeti képpel azonos méretű mátrixban tárolhatjuk, az értelmezhetőség elvesztése nélkül, a következő tulajdonságot adják: lehetséges az FHT piramist egy formában tárolni. mátrix, amelynek mérete eggyel nagyobb, mint az eredeti kép mérete (egy tengely mentén - a szintek száma, ), a többinél - a kép mérete).
Egy példa megvalósítás a pythonban:
import numpy mint np W = 2 ** 5 H = 2 ** 5 img = np . véletlenszerű . véletlenszerű ([ H , W ]) def calc_sums ( img , xmin , xmax ): res = np . nullák ([ W , xmax - xmin ]) , ha xmax - xmin == 1 : res [:, 0 ] = img [:, xmin ] else : mid = ( xmin + xmax ) // 2 ans1 = calc_sums ( img , xmin , mid ) ans2 = calc_sums ( img , mid , xmax ) x esetén tartományban ( W ) : tartomány eltolásánál ( xmax - xmin ) : res [ x , shift ] = ans1 [ x , shift // 2 ] + ans2 [ _ ( x + shift // 2 + shift % 2 ) % W , shift // 2 ] return res res = calc_sums ( img , 0 , W )
Az algoritmus az opencv könyvtárban [8] van implementálva, és felhasználható például az eltűnési pont gyors megtalálására . [9]
A probléma megoldása egy algoritmus használatát jelenti a kétdimenziós esethez.
A síkok haf-képe is háromdimenziós lesz (a síkot a vektor rá merőleges három koordinátáján keresztül adjuk meg). Adjuk meg a paraméterezéssel , ahol a sík és a sugáron lévő képhatár metszéspontjának koordinátája , a metszéspont koordinátája a síkban lévő sugárral párhuzamos képhatárral , és a különbség a sík második és első metszéspontjának koordinátái a képhatárokkal. Az első pont a képhatárt tartalmazó síkok és a vele párhuzamos sík metszéspontjában van . A második pont a kép határát tartalmazó síkok metszéspontjában van, párhuzamosan és -vel .
A koordinátatengelyre túlnyomóan merőleges síkot akkor fogunk nevezni, ha a vele való normális kisebb szöget zár be ezzel a tengellyel, mint a másik kettővel. Csak azokat a síkokat vesszük figyelembe, amelyek túlnyomórészt merőlegesek az y tengelyre. A 4. ábrán látható módon 4 lejtőtípusra vannak felosztva. Az általánosság elvesztése nélkül feltételezzük, hogy a vizsgált síkok I. típusúak.
A Hough-kép sík felsorolással történő felépítése aszimptotikus bonyolultságú (a síkok száma szorozva az egy síkot összegző műveletek számával), ahol m, n, k a kép méretei az egyes dimenziókban.
A gyors Hough-transzformáció ebben az esetben a következő algoritmus lesz:
Egy ilyen transzformáció bonyolultsága az első lépés összetettségének ( ) és a második lépés összetettségének ( ) összege , amelyeket a figyelembe vett síkok számának és a síkonkénti műveletek számának szorzataként számítunk ki. Összesen, , egy síkra vonatkoztatva .
Egy háromdimenziós vonal félképe négydimenziós lesz (két paraméter a vonal két pontjához). Adjuk meg paraméterezéssel . a síkon lévő pont x , y koordinátái , a síkkal párhuzamos egyenes képhatárának metszéspontjának x, y koordinátái .
A Hough-kép háromdimenziós vonalak felsorolásával történő felépítése aszimptotikus bonyolultságú (a sorok száma szorozva az egy sor összegzéséhez szükséges műveletek számával), ahol m, n, k a kép méretei az egyes dimenziókban.
A gyors Hough-transzformáció ilyen esetre a kétdimenziós esethez hasonlóan van megfogalmazva. A kétdimenziós esetben csak egy tengely mentén volt az eltolás lehetősége, most viszont egy tengely mentén, a második tengely mentén és két tengely mentén lesz az eltolás egyszerre.
A kettős hosszúságú minták megszámlálásához (összesíthető síkok csoportjainak száma) szorozva (összeadások összetettsége minden csoporthoz) műveletek szükségesek. A 4 hosszúságú számlálási minták műveleteket igényelnek. Mintahosszak — , ahol definíciója: , azaz a figyelembe vett mintahossz száma. A kifejezéseket (a vizsgált kép lehetséges mintahosszainak számát) a geometriai progresszió összegének képletével összegezve megkapjuk az algoritmus összetettségét és egy egyenesben a bonyolultságát . A komplexitás állandó lesz.
A BPH és a négy orosz elv kombinációjaAnnak ellenére, hogy az egy soronkénti műveletek száma minden dimenzióban azonos képméret esetén állandó, minden sorra költeni kell . De ha nincs szükség minden sorra, hanem csak egy részükre, akkor az első lépéseket [10] előre ki lehet számítani, eltárolni a memóriában, majd csak azokra a sorokra számítani az összegeket, amelyekre szükség van.
Ezt a koncepciót négy orosz módszere rögzítette. A módszert V. Arlazarov , M. Kronrod, E. Dinits, I. Faradzhev felfedezőkről nevezték el.
A háromdimenziós vonalak eredeti FHT-algoritmusában minden szinten számítást végeznek bizonyos hosszúságú vonalak esetén. Másrészt csak az első lépésekre végezhet előkalkulációt, majd a szükséges sorokra számíthat.
Az előreszámítási lépések optimális számának meghatározásához meg kell oldani a következő egyenletet ( az a sorok száma, amelyet az algoritmusnak meg kell találnia):
A bal oldalon az előszámítás elvégzéséhez szükséges műveletek száma látható. A jobb oldalon a kért sorok mentén összegek kereséséhez szükséges műveletek száma látható. Ha az összes egyenest meg kell keresni , akkor az egyenlet megoldása lesz , és a bal és a jobb oldal egyenlő , ami kisebb, mint előszámítás nélkül. Mindazonáltal a műveletek számának csökkentése érdekében annyi memóriával kell fizetni, amennyit a Hough-kép elfoglal (az FHT algoritmus által a foglalt memória invarianciájának tulajdonsága minden számlálási szinten).
A számítási elv nemcsak az FHT piramis utolsó szintjének (vagyis magának a Hough-képnek), hanem az FHT piramis más szintjeinek az értékeinek használatán is alapul.
A feladat két részfeladatra oszlik:
Az általánosság elvesztése nélkül feltételezzük, hogy . Itt csak a túlnyomóan függőleges mintákat fogjuk figyelembe venni, amelyek jobbra dőlnek, azaz és . A -paraméterezés is használatos , és az érték egyenlő , ahol a kép mérete a tengely mentén .
Nézzük a diádikus egyenes paraméter bináris kiterjesztését így: Ekkor a minta a következőképpen írható fel ( - kerekítés a legközelebbi egész számra):
feladat adataiból számítjuk ki. a vizsgált minta eltolódásainak száma a sávban , amely szintén ismert. Így csak a biteket kell visszaállítani .
Egy mohó algoritmust használnak a helyreállításhoz: Minden bit nulla először. Mivel ezért a felsorolás nagyobb számú eltolásról kisebbre, szintről 0 szintre történik. Ha , akkor az ennek a szintnek megfelelő bit 1-re áll, és -kal csökken . A lépést addig ismételjük, amíg 0-ra nem változik.
A paraméter értékét a . Ezen a paraméteren keresztül a paraméter kiszámítása a következő képlet szerint történik:
, tehát az algoritmus összetettsége . [7]
Az ábrára hivatkozva látható, hogy egy tetszőleges szakaszt egy egyenesen úgy számítunk ki, hogy megkeressük azoknak a diadikus mintáknak a minimális számát, amelyek a sor elejétől az adott szakasz végéig tartó részeket tartalmaznak, és a minimális számú szakaszt. olyan minták, amelyek az egyenes elejétől az adott szegmens elejéig tartó szakaszt tartalmazzák, kivéve az eredeti szegmens első pixelét. Vagyis meg kell találni az összegeket két olyan szegmenshez, amelyeknek a kezdete a kép határán van, és a végkoordináták eltérőek.
Az ilyen típusú hosszúságú szegmens összegének kiszámításához (bináris kiterjesztése ) , ahol az FHT=piramis -edik szintjének -edik sávjában lévő minta összege egy paraméterekkel rendelkező egyenesre .
A belső összeg nem igényel minden lépésben teljes számítást, mivel azt az előzőből kapjuk állandó időben. Így az algoritmus összetettsége arányos a külső összegben lévő tagok számával, azaz . Mivel az eredményt két ilyen típusú szegmensre számítjuk ki, az algoritmus eredő összetettsége is . Sőt, érdemes megjegyezni, hogy egy pixel lehet többcsatornás is. [7]
2. módszerA szegmens a szegmensen belüli minimális számú mintából állhat össze. Az ilyen minták kereséséhez meg kell nézni az FHT piramis szintjeit, kezdve az utolsókkal és az elsőkkel bezárólag. Azonnal kiszűrheti azokat a mintákat, amelyek nem szerepelnek a szegmensben. Ha olyan mintát találunk, amely teljesen a szegmensen belül van, akkor annak összege beleszámít a szükséges összegbe, és a következő szinteken lévő felosztásokat nem veszi figyelembe. Ez a módszer számításilag összetettebb, mint az első, mivel minden olyan mintát megkövetel, amely több mint .
Hasonlóan a szegmens összegének kiszámításához a négyszögre vonatkozó összeg kiszámításához a Hough-kép síkokra vonatkozó közbenső számításaiból, más szóval az FHT-piramisból síkok esetén.
Feltételezve, hogy annak a síknak a paraméterei, amelyen az adott négyszög található, a kívánt összeget a befogadás-kizárás képlettel számítjuk ki úgy, hogy az összeget négy téglalapra vesszük, amelyek egyik csúcsa a diádikus sík sarokcsúcsa (mi jelölje a betűvel , az ezzel a csúcstal rendelkező szakaszokat pedig a sarokszegmensekkel ). Jelöljük az adott négyszög csúcsaihoz legközelebbi és legtávolabbi pontok koordinátáit ill. A megjelölt sarokszegmensek és csúcsú sarokszegmensek összegét pluszjellel , a és ponttal rendelkezők összegét mínuszjellel vesszük.
Egy tetszőleges szögszegmens összegének megtalálásához fel kell osztani az FHT piramisban lévő szegmensekre. Figyelembe kell venni a szegmens szélességének és magasságának bináris kiterjesztését. Az egydimenziós esethez hasonlóan a szegmens vízszintesen függőleges csíkokra, függőlegesen legfeljebb vízszintes csíkokra van felosztva. A metszéspontjuk nem ad többet, mint a háromdimenziós FPH piramis szegmensei. Így egy tetszőleges szegmensre vonatkozó összeg kiszámításának bonyolultsága műveleteknek felel meg. [7]
Bár van némi hiba az egyenes diádikus mintával való közelítésében, a kísérletek azonban azt mutatják, hogy ez a hiba elég kicsi ahhoz, hogy a problémamegoldás során a hagyományos Hough-transzformációs algoritmust ki lehessen cserélni az FHT-algoritmusra. [tizenegy]
Az M-becslések lineáris regressziós feladatra történő alkalmazásával radiális bázisfüggvényeket kaphatunk . Ezek egy "folyamatos" képet alkotnak, amelyből viszont mintát vesznek egy 2D hisztogrammá.
Ezután a kép konvolúcióját a kiválasztott M-becslőnek megfelelő diszkretizált kernellel hajtjuk végre. A kapott Hough-kép alapján FHT segítségével számítjuk ki. A maximum koordinátája a paraméterek terén - és lesz a kívánt M-becslés.
A feladat a következőképpen fogalmazódik meg: meg kell találni egy hipersíkot, amely 2 osztályra osztja a képet. A kép normalizált kép hisztogramjaként jelenik meg .
a kívánt hipersík, amely a képeket két osztályra osztja , a hisztogram összes elemének osztálya.
Használt összeadó statisztika ( - -edik koordináta ):
A klaszterszétválasztási problémák megoldására számos, a priori ismert tulajdonságokkal rendelkező, ugyanakkor additív statisztika szempontjából kiszámítható funkcionális létezik. Érdemes még egyszer megemlíteni, hogy ezek a funkcionálisok általában nem konvexek, és optimális értékük meghatározásának egyetlen megbízható módja az elválasztó felületek paraméterterében a rácson történő kimerítő felsorolás.
Naiv algoritmus: A hisztogramot lineáris méretű diszkrét vonalak metszik . Mindegyiknél el kell végezni a súlyok, a kovarianciamátrixok és végül a kritériumértékek kiszámítására szolgáló műveleteket. Így a naiv algoritmus számítási bonyolultsága műveletek. Hasonlóképpen kimutatható, hogy háromdimenziós esetben az algoritmus számítási bonyolultsága .
Ebben a szakaszban kumulatív összegzést alkalmazunk: a bemeneti kép összes rétegének megfelelő elemeinek összegét, amelynek indexe nem haladja meg, a kimeneti kép számát tartalmazó rétegelemre írjuk .
A képpontértékek összege a kimeneti kép bármely sorában megegyezik az eredeti kép azon részének összegével, amely nem e sor alatt van. Ezenkívül a kimeneti kép bármely túlnyomórészt vízszintes egyenes vonala mentén az összeg megegyezik az eredeti képen általa határolt felső félsík összegével. A bal oldali félsíkok feletti összegek túlnyomóan függőleges egyenes vonalakon történő hasonló kifejezéséhez a függőleges helyett a kép vízszintes kumulatív összegét kell elvégezni.
Algoritmus:
Ha egyszerűen összegezzük az összes hipersíkot, akkor kétdimenziós esetben a komplexitás , háromdimenziós esetben . ( dimenziós )
A hipersíkok feletti összegzés (egyenesek 2D-ben, síkok 3D-ben...) FHT segítségével végezhető el. Ez segít csökkenteni az egyes képek bonyolultságát. Vagyis most a komplexitás a kétdimenziós esetben van, a háromdimenziósban .
Tehát a végső algoritmus:
Bonyolultság: idő , memória .
A kétdimenziós esetben részletesebben:
Végső nehézség:
3D-s esetben részletesebben:
Végső nehézség:
Az alábbiakban csak néhány olyan probléma található, amelyek a Hough-transzformációval megoldhatók.