Cmputer Visin Catalin Stean catalin.stean@inf.ucv.r http://inf.ucv.r/~cstean
Filtrarea imaginilr Obiective Filtrarea imaginilr flsind filtrare Omgena Gausiana Mediana Sbel utilizat pentru detectare de margini Laplace utilizat pentru detectare de margini Bilaterala
Filtrarea imaginilr Filtrarea are principalul rl de a elimina zgmtul din imagini. Este utilizata si pentru a extrage anumite caracteristici vizuale Este metda bisnuita de preprcesare a imaginilr in vederea imbunatatirii rezultatelr finale. Termenii utilizati in engleza pentru acest gen de prcesare: Smthing Blurring
Filtrarea imaginilr Filtrarea se btine aplicand un kernel (filtru) asupra unei imagini prin transfrmarea valrii pentru fiecare pixel intr- valare bazata pe kernel si pe pixelii din vecinatate in imaginea riginala. Matematic, spunem ca are lc cnvlutie intre imagine si kernel.
Exemple kernele Cel mai simplu: bx-filter nrmalizat Cel mai flsit: Gaussian 1 1 1 1 1 1 4 7 4 1 1/5 1 1 1 1 1 1 1 1 1 1 1/273 4 16 26 16 4 7 26 41 26 7 1 1 1 1 1 4 16 26 16 4 1 1 1 1 1 1 4 7 4 1 Numarul de linii si clane trebuie sa fie impar (3x3, 7x7, 11x17, etc) Cand marimea kernelui creste, timpul de prcesare creste.
Filtrarea imaginilr Imaginile pt fi analizate dupa Dmeniul spatial: bservarea distributiei nivelului de gri (sau a culrilr) Dmeniul frecventelr: variatiile din imagini Unele au parti cu intensitati cnstante (de exemplu un cer albastru), in altele apar variatii rapide (ex: numerase biecte mici).
Dmeniul frecventelr Imaginea este descmpusa de la cele mai jase la cele mai ridicate frecvente. Frecventele jase crespund regiunilr unde intensitatile variaza usr Frecvente ridicate in regiuni unde sunt schimbari bruste in intensitati. Frecventa jasa Frecventa ridicata
Filtre pentru frecventa jasa O mdalitate simpla de a reduce amplitudinea variatiilr este de a inlcui fiecare pixel cu valarea medie a pixelilr din jur. Marimea kernelului afecteaza direct prprtinal cat de mari sunt mdificarile in imagine. Se citeste pza, se afiseaza in fereastra, dupa care se afiseaza in fereastra rezblur.
blur Flseste bx filter nrmalizat.
blur vid blur( InputArray src, OutputArray dst, Size ksize, Pint anchr=pint(-1,-1), int brdertype = BORDER_DEFAULT ) src - imaginea sursa. (depth pentru imagine este unul dintre urmatarele: CV_8U, CV_16S, CV_16U, CV_32F r CV_64F) dst - rezultatul ksize - marimea kernel-ului (valri impare, pzitive) anchr - Pint(-1,-1) inseamna ca ancra este in mijlcul kernel-ului brdertype - afecteaza pixelii din margine. ptiuni; BORDER_DEFAULT, BORDER_REFLECT, BORDER_REPLICATE, BORDER_TRANSPARENT, BORDER_REFLECT_101
Filtrare Gaussiana Pixelii care sunt mai aprpiati pt fi cnsiderati sa influenteze mai mult valarea pixelului curent.
Filtrare Gaussiana vid GaussianBlur( InputArray src, OutputArray dst, Size ksize, duble sigmax, duble sigmay=0, int brdertype=border_default ) src si dst- imaginile sursa si destinatie ksize - marimea kernel-ului sigmax - deviatia standard in directia lui X. Daca se flseste 0, se calculeaza autmat din ksize. sigmay - Similar cu sigmax, dar in directia Y. brdertype - afecteaza pixelii din margine. ptiuni; BORDER_DEFAULT, BORDER_REFLECT, BORDER_REPLICATE, BORDER_TRANSPARENT, BORDER_REFLECT_101
Redimensinare Redimensinarea pzelr flseste filtre pentru frecventa jasa. O idee de redimensinare: eliminam liniile si clanele din 2 in 2 Imaginea ar fi deterirata Daca insa aplicam filtrare si api eliminam astfel linii si clane, rezultatul este bun. Acest lucru este realizat de metda de mai sus.
Redimensinare
Redimensinare Metda pyrdwn flseste un filtru Gaussian pentru imagine. Exista si pyrup. De asemenea, exista si functia mai generala resize care ne permite sa specificam marimea imaginii rezultat (mai mare sau mai mica).
Filtrul median Este neliniar. Se flseste in cadrul algritmilr pentru detectarea marginilr pentru ca pastreaza relativ bine marginile si elimina zgmtul. Este util pentru eliminarea zgmtului, cum ar fi pixelii albi intrdusi in prezentarea a dua.
Filtrul median vid medianblur( InputArray src, OutputArray dst, int ksize ) src - imaginea de intrare. Depth pate fi CV_8U pentru rice valare a "ksize". Pentru ksize = 3 sau ksize = 5, depth pate fi si CV_16U si CV_32F. dst - imaginea de iesire ksize - marimea filtrului ( impar si mai mare decat 1 )
Median blur are zgmtul eliminat. Filtrul median
Filtrul median Opereaza asupra pixelilr din vecinatate pentru a determina valarea pixelului curent. Se calculeaza mediana pixelilr din vecinatate (inclusiv cel curent) si aceasta inlcuieste valarea curenta Acesta este mtivul pentru care functineaza atat de bine la eliminarea zgmtului
Filtre directinale - Sbel Este un filtru pentru frecvente ridicate Se aplica dar asupra frecventelr aflate pe rizntala sau verticala unei imagini, in functie de kernelul selectat Da aprximare a gradientului imaginii prin diferentierea pixelilr pe rizntala sau verticala
Filtrul Sbel Se realizeaza imagine pe 8 biti, unsigned (CV_8U). Seamana cu efectul embss.
Sbel vid Sbel(InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, duble scale=1, duble delta=0, int brdertype=border_default ) src si dst = imaginile de intrare si iesire ddepth = tipul de imagine (CV_8U, CV_16S, CV_32F, CV_64F) dx, dy = specificatii ale kernelului cu privire la rdinul derivatei pe rizntala/verticala ksize = marimea kernelului (1, 3, 5 sau 7) scale = factr de scalare pentru derivate. Implicit, este fara scalare delta = valare care se adauga la rezultat in dst brdertype - afecteaza pixelii din margine. ptiuni; BORDER_DEFAULT, BORDER_REFLECT, BORDER_REPLICATE, BORDER_TRANSPARENT, BORDER_REFLECT_101
Filtrul Sbel Filtrele care calculeaza derivate pentru imagini sunt pentru frecvente ridicate In exemplul nstru, ultimul parametru 128 face sa fie imaginile pe un fundal gri Daca era 0, ar fi fst negru Orizntal (parametrii 4 si 5): 1,0 Vertical: 0,1
Filtrul Sbel Kernelul sau cntine atat valri pzitive, cat si negative, prin urmare rezultatul de la Sbel este adesea pus calculat in CV_16S (signed integer). Cele dua rezultate (verticala si rizntala) se cmbina api pentru a btine nrma filtrului Sbel
Filtrul Sbel Pentru a putea vedea nrma Sbel, trebuie sa cnvertim la CV_8U. Mai mult, putem face cnvertire in care valrile de 0 crespund la alb, iar cele mai mari sa crespunda la nunte de gri. in.cnvertt (ut, depth, scale, shift) ut(i) = in(i) * scale + shift
Filtrul Sbel
Filtrul Sbel Pentru a fi mai clar vizibile marginile din pza, se pate aplica un threshlding in care cntururile sa fie desenate cu negru.
Filtrul Scharr Alt filtru care se bazeaza tt pe gradient si da estimari mai precise este Scharr.
Filtrul Scharr
Filtrul Laplace Este un filtru pentru frecvente ridicate Calculeaza derivate de rdinul II. Cream clasa dedicata.
Calculul pentru Laplacian este facut pentru imagine CV_32F. Pentru a vedea imaginea, realizam scalare 0 este schimbat in 128 Filtrul Laplace
Este sensibil la zgmt Filtrul Laplace Pentru mai buna exemplificare de extragere de cntururi, schimbam imaginea cu una care are si sectiuni cu variatii mici. Cltul selectat va fi studiat in special.
Filtrul Laplace Imaginea (Mat) care se btine dupa ce se apeleaza cmputelaplace cntine valri pzitive si negative. Cele negative vr fi eliminate, iar cele pzitive cntin elementele de interes.
Desenare cntururi Imagine de ansamblu asupra valrilr care se gaseau in cltul din acperisul casei de mai devreme.
Filtrul Laplace Ultima metda din clasa LaplacianZC Flsita pentru a detecta valrile negative
main.cpp Am inclus aici si extragerea sectiunii din imagine si afisarea numerelr din ROI. getlaplacianimage si deseneazacntururi pt primi diferite valri pentru parametri.
Filtrul detecteaza tate marginile, si cele imprtante si cele neimprtante. Este sensibil la zgmt.
Filtrul bilateral Reduce zgmtul unei imagini, dar pastreaza marginile. Filtrarea nu depinde dar de distanta Euclidiana dintre pixeli, dar si de diferente intre intensitati de culri, de prfunzime. Dureaza mai mult prcesarea insa.
Filtrul bilateral vid bilateralfilter( InputArray src, OutputArray dst, int d, duble sigmaclr, duble sigmaspace, int brdertype=border_default ) src si dst imaginile de intrare/iesire (pt fi clr) d - diametrul vecinatatii pentru fiecare pixel. Daca d < 0, se calculeaza din sigmaspace sigmaclr - sigma in spatiul culrilr. O valare mai mare = culri mai indepartate din vecinatatea pixelului vr fi mixate sigmaspace - sigma in spatiul crdnatelr. O valare mai mare = pixeli mai indepartati vr influenta daca au culri aprpiate in functie de sigmaclr brdertype - afecteaza pixelii din margine. ptiuni; BORDER_DEFAULT, BORDER_REFLECT, BORDER_REPLICATE, BORDER_TRANSPARENT, BORDER_REFLECT_101
Filtrul bilateral
Priecte 1/2 1. Faceti un priect care sa citeasca imagine si sa ii aplice acesteia filtrare cu diferite valri pentru kernel. Sa se afiseze pe imagine ce marimi de kernel s-au utilizat. Pentru a scrie pe imagine se utilizeaza puttext. 2. Faceti un priect cu GUI care sa permita sa se mdifice tti parametrii unui anumit tip de filtrare pentru imagine citita. Imaginea rezultata trebuie sa se pata salva.
Priecte 2/2 3. O aplicatie cu GUI care sa flseasca filtrul Sbel pentru a gasi marginile dintr- imagine de intrare. Valrile pentru parametrii de intrare trebuie sa se pata stabili de catre utilizatr. 4. Aplicati pentru frame-urile unui clip vide un filtru Sbel pentru a btine un clip in care fiecare frame cntine numai marginile din clipul initial.