Gabori filter

**Gabori filter** on lineaarfilter, mida kasutatakse paljudes pilditöötlusrakendustes servade tuvastamiseks, tekstuurianalüüsiks ja tunnuste eraldamiseks. Nende filtrite abil saab ligikaudselt hinnata teatud rakkude omadusi. On leitud, et Gabori filtril on optimaalsed lokaliseerimisomadused nii ruumilises kui ka sagedusvahemikes ja seega sobivad need hästi tekstuuri eraldamiseks. Gabori filter on ribapääsfiltrite eriklass, ehk nad lubavad teatud sageduste ribasid läbi ja lükkavad teised tagasi. Gabori filtrit võib vaadelda kui kindla sageduse ja orientatsiooniga siinussignaali, mida kontrollib Gaussi laine. Gabori filtrid on orientatsioonitundlikud filtrid, mida kasutatakse serva- ja tekstuuri analüüsimiseks. See on nimetuse saanud Dénes Gábori järgi. Gabori filter on matemaatiliselt struktureeritud nii, et see suudab hallata pildi erinevaid kujusid, suuruseid ja sujuvustasemeid. Teatud suunas orienteeritud Gabori filter annab tugeva vastuse määratud suunas sihtkujutiste asukohtadele.

## Parameetrid
Gabor filtri parameetrid näitavad, kuidas ta töötab ja millistele funktsioonidele reageerib. Filtril on reaalne ja imaginaarne komponent, mis tähistavad suundasid. Neid saab kasutada koos kompleksarvuna või eraldi imaginaar ja reaalarvuna. Lainepikkus kontrollib Gabori funktsiooni ribade laiust, mida suurem lainepikkus, seda paksemad ribad. Normaali orientatsioon kontrollib Gabori funktsiooni suunda, 90 kraadine orientatsioon viitab horisontaalsele suunale, 0 kraadine, vertikaalsele suunale. Kuvashe kontrollib funktsiooni pikkust, mida suurem kuvasuhe määratakse, seda lühemana kujutatakse Gabori funktsiooni. Standardhälve kontrollib funktsiooni laialivalguvust, ehk mida väiksem on standardhälve, seda rohkem on ribad kokkusurutud, ja mida suurem, seda laiemate vahedega näeb funktsiooni ribasid. 

Pilditöötluses on Gabori funktsioonid ideaalsed mitmekeelses dokumendis oleva sõna tuvastamiseks. Komplekssetest dokumendipiltidest (nii hallidest kui ka värvilistest) on kasutatud erineva sagedusega ja eri suundadega Gabori filtreid, mis on mõeldud ainult tekstipiirkondade lokaliseerimiseks ja eraldamiseks, kuna tekst on rikas kõrgsageduskomponentide poolest. Gabori filtreid on laialdaselt kasutatud ka mustrite analüüsi rakendustes. Gabori ruum on väga kasulik pilditöötlusrakendustes, nagu optiline märgituvastus, silma iirise tuvastuseks ja sõrmejäljetuvastus.

## Koodi näited
Gabori kernelit saab ehitada Pythonis kasutades OpenCV teeki kasutades järgnevat koodirida: 

    import cv2 as cv2
    gabor_kernel = cv2.getGaborKernel(ksize, sigma, theta, lambda, gamma, psi)

Antud näites viitab *ksize* kerneli suurusele (x,z), mis tähendab, et meil oleks x * z kernel. Sigma on standardhälve, theta on orientatsioon, lambda on lainepikkus, gamma on kuvasuhe ja psi on faasinihe.

Gabori filtri saab ka üles ehitada ilma OpenCV teeki kasutamata, kasutades järgnevat Pythoni koodi.

    def gabor(sigma, theta, Lambda, psi, gamma):
        sigma_x = sigma
        sigma_y = float(sigma) / gamma
        nstds = 3
        xmax = max(abs(nstds * sigma_x * np.cos(theta)), abs(nstds * sigma_y * np.sin(theta)))
        xmax = np.ceil(max(1, xmax))
        ymax = max(abs(nstds * sigma_x * np.sin(theta)), abs(nstds * sigma_y * np.cos(theta)))
        ymax = np.ceil(max(1, ymax))
        xmin = -xmax
        ymin = -ymax
        (y, x) = np.meshgrid(np.arange(ymin, ymax + 1), np.arange(xmin, xmax + 1))
        x_theta = x * np.cos(theta) + y * np.sin(theta)
        y_theta = -x * np.sin(theta) + y * np.cos(theta)
        gb = np.exp(-.5 * (x_theta ** 2 / sigma_x ** 2 + y_theta ** 2 / sigma_y ** 2)) * np.cos(2 * np.pi / Lambda * x_theta + psi)
        return gb

## Kasutusalad
Gabori filtereid on kasutatud ja kasutatakse tänapäeval erinevates valdkondades. 

* Tekstuuride eraldamine: Gabori filtreid kasutatakse pildil mitme tekstuuri eraldamiseks. See analüüs on kriitiline paljudes valdkondades, sealhulgas kosmosemissioonidel.
* Märgituvastus: käsitsi kirjutatud tähtede, numbrimärkide, stendide automaatne tuvastamine.
* Objekti tuvastamine: Gabori filtreid ja nende muudetud versioone kasutatakse arvutite visuaalses valdkonnas laialdaselt. Kuna need võivad täpselt jäljendada inimese visuaalset süsteemi, kasutatakse neid objektituvastussüsteemide kujundamisel.
* Fraktaalimõõtmete haldamine: Fraktaalid on sarnased mustrid.
* Servade tuvastamine: kujutise servade tuvastamine on tihtipeale pilditöötluses eeltöötlemine.
* Võrkkesta tuvastamine: inimeste võrkkesta usaldusväärne tuvastamine.
* Piltide kodeerimine: piltide kodeerimist kasutatakse edastamiseks peaaegu kõikjal.

## Viited