Flater, kanter og linjer INF 160-11.03.2003 Fritz Albregtsen Tema: Naboskaps-operasjoner Del 3: - Canny s kant-detektor - Rang-filtrering - Hybride filtre - Adaptive filtre Litteratur: Efford, DIP, kap. 7.4.3-7.8 Hvis alle pikslene i et sammenhengende område har omtrent like pikselverdier, v, og alle pikslene som grenser opp til dette området har verdier som er forskjellige fra v, kaller vi dette området for en homogen flate. Hvis en flate er karakterisert ved middelverdien µ og standardavviket σ,såvil testen i(x, y) µ > 3σ med 99% konfidens avgjøre om pikslet i(x,y) tilhører samme intensitets-populasjon som pikslene i flaten. Merk at vi her har beskrevet horisontale flater, ikke ramper der gradienten er konstant. En kant definerer vi som overgangen mellom to områder med forskjellig midlere verdi. Merk at en linje består av to kanter. 1 2 Kant-deteksjon Støy-fjerning Det er vanligvis tre steg i kant-deteksjon: Støy-reduksjon Vi forsøker å fjerne så mye støy som mulig, uten å smøre ut kantene. Dette vil typisk være et lavpass-filter, eventuelt et hybrid filter. Kant-filtrering Vi anvender ett eller flere filtre som gir mest respons der hvor det finnes kanter. Dette kan være et høypass-filter eller lignende. Gradient-filter gir to gradient-komponenter. Kan da beregne gradient-magnitude og gradient-retning. Kant-lokalisering Vi må etter-behandle resultatet fra kant-filtreringen for å finne de posisjonene i bildet som svarer til virkelige kanter. Vi vil fjerne mest mulig av støyen uten å ødelegge vital informasjon i bildet. Det er de sjeldne hendelsene (i bilder: kanter og linjer) som bærer den vesentlige informasjonen. For å avgjøre om et piksel er et kant-piksel eller ikke, kan vi bruke en gradient- eller Laplace-operator. Men vi kan også sepå verdien av senter-pikslet og nabo-pikslene innenfor et vindu. Har alle relativt lik verdi, kan vi regne med at vinduet ikke inneholder en kant, og ut-pikslet får en verdi lik gjennomsnittet av inn-pikslene i vinduet. Er senter-pikslet veldig forskjellig fra naboene, kan vi regne med at det er et støy-piksel. Vi glatter dette ut. Hvis nabo-pikslene er svært ulike, kan det gå en kant/linje gjennom vinduet. Dette setter større krav til filtreringen. Vi må velge de riktige pikslene i vinduet, og midle over disse, slik at støyen i flatene glattes ut, samtidig som kantene bevares. Dette er adaptiv filtrering. 3 4
Canny s kant-detektor En optimal kant-detektor som gir oss et best mulig kompromiss mellom støyreduksjon og kant-lokalisering. Lavpass-filtrering med Gauss-funksjon (parameter σ). Finner gradient-magnitude og -retning etter lavpass-filtrering. Kan disse stegene kombineres? Hvis ja, er operatorene separable? Kant-lokalisering: Tynning (non-maximal suppression) Hvis et piksel har en nabo med høyere pikselverdi, settes pikselverdien ned. Hysterese-terskling (to terskler, T h, T l ) Vanskelig/umulig å finne en god gradient-terskel for hele bildet. 1 Merk alle piksler der G>T H 2 Scan alle piksler der G [t l,t h ] 3 Hvis et slikt piksel er nabo til et merket piksel, såmerkerviogsådette pikslet. 4 Gjenta fra steg 2 til stabilitet oppnås. Tema: 4/8-naboskap? Nabo bare for gitt θ? Tema: Valg av [t l,t h ]? Prosedyrene kan gjentas for flere verdier av σ Finn optimal σ, eller kombiner resultatene fra flere σ. Rang-filtrering Vi lager en en-dimensjonal liste av alle piksel-verdiene innenfor vinduet. Vi sorterer listen i stigende rekkefølge. Vi velger en piksel-verdi fra et bestemt sted i den sorterte listen. Denne piksel-verdien er resultatet av filtreringen, og skrives ut til tilsvarende piksel-posisjon i ut-bildet. 5 6 Median-filter Ut-verdi = median av verdiene i et vindu rundt inn-pikslet. Vindu: kvadrat, rektangel, pluss-formet. Rask implementasjon v.hj.a. histogram, med histogram-oppdatering etter hvert som vinduet flyttes. Et av de mest brukte kant-bevarende støy-filtre. Spesielt godt til å fjerne impuls-støy ( salt og pepper ) Problemer: tynne linjer kan forsvinne hjørner kan rundes av objekter kan bli litt mindre Valg av vindus-størrelse og -form kan være viktig! Trimmede Median-filtre Middelverdi-filtret fjerner støy effektivt, men glatter ut kanter. Median-filtret bevarer kanter, men reduserer ikke støyen så godt som middelverdi-filtret Et kombinasjons-filter beholder de gode egenskapene fra begge begrepene. Ut-verdi = middelverdien av alle piksler innenfor naboskapet (vinduet) hvis gråtone-verdi ligger innenfor et intervall omkring median-verdien. For et n n vindu sentrert om (x, y) med inn-verdier f i,i [1,..., n n] får vi f.eks. ut-verdien g(x, y) 1 n 2 2α n 2 α i=α+1 f i, α 0, n2 1 2 eller n n i=1 g(x, y) = W ( f i M )f i n n i=1 W ( f i M ) M = median{f i }, i =1,..., n n MAD = median{ f i M }, i =1,..., n n 1 hvis f W ( f i M ) = i M konst MAD 0 ellers Dette ligner på Sigma-filtret. 7 8
Ny median ved histogram-oppdatering 1 Skal oppdatere median-verdien mens vi flytter et vindu med 2m + 1 rader og 2n + 1 kolonner rundt i bildet. Sett th =(2m+ 1)(2n +1)/2. 2 Sett vinduet ved venstre bildekant, sorter og finn medianen med, og antall piksler med gråtone f med, le-med. 3 For j=-m to m do begin H[f(x-n,y-j)] = H[f(x-n,y-j)] - 1 if f(x-n,y-j) < med then le-med = le-med - 1 end 4 Flytt vinduet ett piksel til høyre For j=-m to m do begin H[f(x+n,y-j)] = H[f(x+n,y-j)] + 1 if f(x+n,y-j) < med then le_med = le_med + 1 end 5 if le_med > th then go to 6 Repeat le_med = le-med + H[med] med = med + 1 until le-med >= th. Go to 7. 6 Repeat med = med - 1 le_med =le-med - H[med] until le-med <= th 7 Hvis filtermasken ikke er ved høyre kant av bildet, gå til 3. 8 Hvis filtermasken ikke er ved nedre kant av bildet, gå til 2. Andre implementasjoner av Median Vanligvis finner vi medianen (og andre rang-verdier) ved sortering (e.g. QuickSort). Da er median-filtrering langsommere enn middelverdi. Ser vi på bit-ene til pikslene (msb til lsb) er det omvendt! Vi skal finne det T =5. av 7 piksler med bit-mønster Bi: i B1 B2 B3 B4 1 0 0 1 1 f1 = 1+2 = 3 2 1 1 0 1 f2 = 1+4+8=13 3 1 1 0 0 f3 = 4+8 =12 4 0 1 1 0 f4 = 2+4 = 6 5 1 0 0 0 f5 = 8 = 8 6 0 1 1 0 f6 = 2+4 = 6 7 1 1 1 0 f7 = 2+4+8=14 La Si være en bit-vektor for forkastede piksler. N er en kumulativ sum av piksler; skal konvergere mot T. Sett N =0ogfyllB0 og S0 med 1. B0 S0 B1 S1 B2 S2 B3 S3 B4 S4 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 0 0 N = 0 3 4 6 5 1 N = n0 =3<T. De tilhørende piksler forkastes (s1 =0). Den pikselverdien vi jakter på har 1 som msb. 2 N = n0 + n10 =4<T. Tilhørende piksel forkastes (s2 =0). Vårt piksel skal ha 11 som ledende bits. 3 N = n0 + n10 + n110 =6>T. Vi skal ha 110 som ledende bits, og alle andre kan forkastes. 4 N = n0 + n10 + n110 n1101 =5 T. Gir oss pikslet med bit-mønster 1100. 9 10 Min og Max filtre Disse filtrene finner hhv laveste og høyeste pikselverdi innfor et vindu. Begge gir en ikke-lineær blurring av bildet. Krever ikke sortering av pikslene i vinduet. Raskere enn full sortering. n 1 sammenligninger mot n log 2 (n) Vi skal møte igjen disse filtrene senere!!! Kombinasjoner av Min- og Max-filtre La min w (f(x, y))) og max w (f(x, y))) bety den minste og største verdien f har innenfor et vindu w sentrert om (x, y). La vinduet flytte seg gjennom alle mulige posisjoner i bildet. Da vil to-pass operasjonen g 1 (x, y) =max(min(f(x, y))) fjerne topper som er mindre enn vinduet, mens g 2 (x, y) =min(max(f(x, y))) fyller daler som er mindre enn vinduet. Vil vi forsterke alle strukturer som er mindre enn vinduet, tar vi g = f + α(2f max(min(f)) min(max(f))) Min- og Max-operasjonene på rektangulære (m n) vinduer er separable i den forstand at de kan utføres itopassmedet(n 1) og et (1 m) vindu. 11 12
Mode-filter Max-Min filter Ut-verdi = hyppigst forekommende verdi i et vindu rundt inn-pikslet. Implementeres v.hj.a. histogram, med histogram-oppdatering etter hvert som vinduet flyttes. Anvendes mest på klassifikasjons-resultater, for å fjerne isolerte piksler (bilde-generalisering). Forutsetter noen få mulige verdier, og brukes derfor sjelden på gråtone-bilder. Også kalt Range-filter. Output er differansen mellom høyeste og laveste pikselverdi innenfor et lokalt vindu. Raskt filter. Ny verdi ved oppdatering. Fungerer som en kant-detektor uten retningsangivelse. Kan kombineres med tynning og hystereseterskling til pseudo-canny. Kan brukes til high-boost. Bør ikke brukes med store vinduer. 13 14 KNN-filtret KNCN-filtret KNN = K Nærmeste Nabo. Ut-verdi = gjennomsnitt (eller median) av de k pikslene i vinduet som ligger nærmest senterpikslet igråtone-verdi. Kan sees som en modifikasjon av middelverdi-filtret (eller median-filtret), der man tar med de k mest aktuelle av nabo-pikslene. Problem: K er konstant for hele bildet. Velger vi for liten k blir filtret lite effektivt som støyfjerner. For stor k fjerner tynne linjer og hjørner, og glatter ut kanter. k = 1 : ingen effekt k < n : bevarer tynne linjer k < ( n 2 +1)2 : bevarer hjørner k < ( n 2 +1)n: bevarer rette kanter KNCN = K Nearest Connected Neighbour. Ligner på KNN, men tar mer hensyn til pikslenes plassering. Bruker ikke vindu. Vi ønsker å midle over sammenhengende piksler med homogen intensitet. Algoritme: f(x,y) = pikselverdi i (x,y) merk(x,y); for i := 1 to k do begin sammenlign pikslene som 1) er nabo til de merkede pikslene 2) ikke er merket; merk(pikslet som ligner mest p} f(x,y)); end; g(x,y) = middelverdi(merkede piksler); Nabo kan her være 4- eller 8-nabo. Fordel: Bevarer alle homogene sammenhengende objekter > k-1. 15 16
Sigma-filtret Invers gradient filtre Ut-verdi = middelverdien av alle piksler innenfor naboskapet (vinduet) hvis gråtone-verdi ligger innenfor f(x,y) ±tσ, der t er en valgt parameter, og σ er estimert i homogene områder i bildet. m n g(x, y) = i= m j= n w(i, j)f(x + i, y + j) m n i= m j= n w(i, j) w(i, j) = 1 hvis f(x, y) f(x + i, y + j) tσ 0 ellers Minner om et KNN-filter der filtret selv finner k for hver posisjon av vinduet. Problem: Fjerner ikke isolerte støypiksler. Løsning: Finn M = antall piksler med w = 1. Bruk middelverdi av naboene hvis M<T. g 1 (x, y) = M = m n i= m j= n w(i, j) g(x, y) hvis M>T middelverdi(f) ellers Det finnes flere varianter av denne typen filtre. En av de enkleste er g(x, y) = 1 2 f(x, y)+1 w(k, l)f(k, l) 2k,l n8 der vektene w i naboskapet n8 er gitt ved δ(k, l) w(k, l) = i,j n8 δ(i, j) δ(i, j) = f(x+i, y + j) f(x, y) 1 δ(i, j) =2 hvis f(x + i, y + j) f(x, y) = 0 Hvis f(x, y) =pog f n8 = q, får senterpikslet w = 1 2 og hvert av nabopikslene w = 1 16, også hvisp=q: g= 1 2 p+1 δ 2n88δ q g= 1 2 p+ 1 n816 q = 1 (p + q) 2 Vi får vekter som er avhengig av hvor nær pikslene ligger senterpikslet i verdi. 17 18 Gradient-masker Max Homogenitet filtre Gitt maskene M 1 - M 4 x2 x3 x1 P y1 y3 y2 x1 x2 x3 P y3 y2 y1 x1 x2 y3 P x3 y2 y1 y3 x1 y2 P x2 Beregn gradientene R i = (x 1 + x 2 + x 3 ) (y 1 + y 2 + y 3 ) for maskene M i, i [1,.., 4]. Finn den masken, som gir lavest gradient, og sett utverdi lik middelverdien over denne masken. g(x, y) = 1 6 3 j=1 x j + 3 y1 y j j=1 x3 Del opp vinduet i sub-vinduer som alle inneholder senterpikslet. Finn det mest homogene sub-vindu, dvs middelverdi nærmest f(x,y), (max similarity) lavest varians (max homogeneity) Ut-verdi = middelverdi over det mest homogene sub-vindu. x x 19 20
Adaptive filtre Fler-oppløsnings metoden Hvis en flate er karakterisert ved fordelingen N(µ, σ), så vil testen i(x, y) µ > 3σ med 99% konfidens avgjøre om pikslet i(x,y) tilhører samme intensitetspopulasjon som pikslene i flaten. Et piksel betraktes altså som støy dersom det er signifikant forskjellig fra sine naboer. if abs( f(x,y) - middelverdi ) > t then g(x,y) := middelverdi else g(x,y) := f(x,y) endif; MMSE-filteret er et godt alternativ hvis vi har et estimat av støy-variansen σn 2 : g(x, y) =f(x, y) σ2 [ ] n f(x, y) f(x, y) σ 2 (x, y) De to ytterpunktene for dette filteret er σ 2 (x, y) σ n g(x, y) f(x, y) σn 2 << 1 f(x, y) σ 2 (x, y) Hovedproblemet er å finne kanter i et støy-fylt bilde. En liten kant-detektor slår kraftig ut både på kant og støy, mens en stor gir mindre utslag på støy. Hovedidé : Beregn gradient i ulike retninger med store og små matriser. Beregn produktet av gradientene fra matriser med ulike størrelser i samme retning. Kant-styrke = Max(produktene i ulike retninger). 21 22 Iterasjon Mange filtre kan kjøres flere ganger (itereres). La inn-bildet være ut-bildet fra forrige iterasjon. Det kan være nødvendig å endre filter-parametre for hver iterasjon. Eksempel: KNN(3x3, k=6) k 0.75n 2 KNN(5x5, k=12) k 0.5n 2 KNN(7x7, k=12) k 0.25n 2 Vi går opp gjennom bilde-pyramiden (mot lavere oppløsning) ved å øke vindu-størrelsen, mens vi reduserer effekten av støy-piksler ved å redusere k/n 2. ANVENDELSE KATEGORI METODE Støy- Bilde- Kantreduksjon skjerping deteksjon Lavpass Homogen lavpass filtrering Gauss-filter Høypass Gradient-operatorer filtrering Høypass (punkt) High Boost Unsharp Masking Laplace-operator LoG-operator Canny-detektoren Rang Median filtrering Min og Max Kombinasjoner av Min og Max Mode Range Hybrid α-trimmet median filtrering MMADTM Adaptiv KNN filtrering KNCN Sigma Invers gradient Gradient-masker Max Homogenitet MMSE 23 24