Bildetransformer Lars Aurdal FORSVARETS FORSKNINGSINSTITUTT
Lars Aurdal. Forsvarets forskningsinstitutt (FFI), Kjeller. 5 ansatte. Ca. 3 forskere og ingeniører. Tverrfaglig institutt med vekt på arbeide rundt militære problemstillinger. Jobber med bildebehandling i forbindelse med NSM. Førsteamanuensis II ved IDI. lau@ffi.no
Siste gang... Innføring i grunnleggende teori om Fourier-transformen. Innføring i den diskret Fourier-transformen (D og 2D). Egenskaper (konvolusjon) til Fourier-transformen.
Plan Rask repetisjon av forrige kurs. Noen flere egenskaper ved Fourier-transformen. Punktprøving (sampling). Hurtig algoritme for Fourier-transformen (the Fast Fourier Transform, FFT). Et annet synspunkt på transformer. Innledning. Hadamard-transformen.
Repetisjon Fourier transformpar. F{ } F [ 2π ] f( x) = F( u) = f( x)exp j ux dx { F( )} ( ) ( )exp[ 2π ] u = f x = F u j uxdu Fourier-transformen av den kontinuerlige funksjonen f(x), F(u), gir midlere frekvensinnhold i funksjonen f(x). F(u) er generelt en kompleks funksjon. Kan lett utvides til å gjelde funksjoner f(.) av to variable, f(x,y).
Jean-Baptiste Joseph Fourier Fransk fysiker og matematiker. Levde i Paris (768-83). Deltok i Napoleons felttog i Egypt. Brukte Fourier-rekker første gang i verket Théorie analytique de la chaleur.
Repetisjon Fourier transformpar. N Fu N fx j2πux ( ) = ( )exp[ ] N x= N j2πux fx ( ) = Fu ( )exp[ ] N u= Fourier-transformen av den diskret funksjonen f(x), F(u), gir midlere frekvensinnhold i funksjonen f(x). F(u) er generelt en kompleks funksjon. Kan lett utvides til å gjelde funksjoner f(.) av to variable, f(x,y).
Repetisjon M N ux vy Fu (, v) = fxy (, )exp[ j2π( + )] MN M N x= y= M N ux vy fx (, y) = Fuv (, )exp[ j2π( + )] M N u= v= Fourier transformpar. Fourier-transformen av den diskret funksjonen f(x,y), F(u,v), gir midlere frekvensinnhold i funksjonen f(x,y). F(u,v) er generelt en kompleks funksjon.
C-implementering (konsept) M N ux vy Fuv (, ) = fxy (, )exp[ j2π( + )] MN M N x= y=... for(u=;u<m;u++) { for(v=;v<n;v++) { FRe[u][v]=; FIm[u][v]=; for(x=;x<m;x++) { for(y=;y<n;y++) { FRe[u][v]=FRe[u][v]+f[x][y]*cos(2*PI*(u*x/M+v*y/N)); FIm[u][v]=FIm[u][v]-f[x][y]*sin(2*PI*(u*x/M+v*y/N)); } } } }...?
Eksempel Original Fourier-transform
Eksempel Original Fourier-transform
Plan Rask repetisjon av forrige kurs. Noen flere egenskaper ved Fourier-transformen. Punktprøving (sampling). Hurtig algoritme for Fourier-transformen (the Fast Fourier Transform, FFT). Et annet synspunkt på transformer. Innledning. Hadamard-transformen.
Dynamikk Dynamikken i det transformerte bildet er ofte stor. Dersom det transformerte bildet skal plottes eller på annen måte vises lønner det seg å plotte: Dynamikken reduseres. Null-gjennomgangene bevares. Duv (, ) = log ( + Fuv (, ))
Dynamikk F(u,v) D(u,v)=log (+ F(u,v) )
Dynamikk F(u,v)
Dynamikk D(u,v)=log (+ F(u,v) )
Dersom en generell transform: Separabilitet kan omskrives: M N Fuv (, ) = f(, xykxyuv )(,,, ) x= y= M N 2 x= y= Fuv (, ) = f( xyk, ) ( xuk, ) ( yv, ) sies transformen å ha en separabel kjerne
Separabilitet Den diskret 2D Fourier-transformen har separabel kjerne: M N ux vy Fuv (, ) = fxy (, )exp[ j2π( + )] MN M N x= y= kxyuv (,,, ) = exp[ j2π( ux vy + ] MN M N ) k(,) x u = exp M ux vy j2π M k2( y, v) = exp[ j2π )] N N
Separabilitet Den praktiske konsekvensen av dette er primært at transformen kan utføres i to trinn, radvis og så kolonnevis. M N ux vy Fuv (, ) = fxy (, )exp[ j2π( + )] MN M N x= y= Transformer hver kolonne separat M Fuv M Fxv j ux (, ) = (, )exp[ 2π ] M x=
Separabilitet Reduserer også beregningskompleksitet: Rett-fram-etter-nesen : O(N 4 ). Utfør transformen radvis og så kolonnevis: O(N 3 ).
Periodisitet Den diskret Fourier-transformen og dens inverse er periodiske med periode N. F(, u v) = F( u+ N, v) = F(, u v+ N) = F( u+ N, v+ N) Merk: Bare en periode av transformen F(u,v) er nødvendig for å spesifisere f(x,y) på bakgrunn av F(u,v). Er f(x,y) reell gjelder også: og: * Fuv (, ) = F( u, v) Fuv (, ) = F( u, v)
Translasjon fxy (, )exp[ jπ ( ux+ vy)/ N] Fu ( u, v v) 2 fx ( x, y y) Fuv (, )exp[ j2π( ux + vy)/ N] Flyttes origo for f(x,y) endres ikke modulen F(u,v). Merk også at med u =v =N/2 gjelder: og: exp[ j2π( u x+ v y) / N] = exp[ jπ( x+ y)] = ( ) fxy Fu N x y N (, )( ) + (, v ) 2 2 x+ y
Translasjon
Translasjon
Rotasjon Bruk polare koordinater: x = rcos θ, y = rsin θ, u= ω cos φ, v = ω sinφ Da gjelder: fr (, θ + θ ) F( ω, φ + θ ) Roteres f(x,y) med en gitt vinkel roteres F(u,v) med den samme vinkelen
Rotasjon
Plan Rask repetisjon av forrige kurs. Noen flere egenskaper ved Fourier-transformen. Punktprøving (sampling). Hurtig algoritme for Fourier-transformen (the Fast Fourier Transform, FFT). Et annet synspunkt på transformer. Innledning Hadamard-transformen.
Punktprøving (sampling) f[v] t[s] Merk: f er kontinuerlig både i tid og amplitude
Punktprøving (sampling) Punktprøvingsintervall: t f[v] f d [V] t[s] t[s] Merk: f d er diskret i tid og kontinuerlig i amplitude
Punktprøving (sampling) Kvantisering: Benytt et endelig antall diskret nivåer for å beskrive amplituden til hver punktprøve, dette gir pulstoget f dq. f d [V] f dq [V] t[s] t[s] 8 bits kvantisering: 256 nivåer, hver punktprøve representeres ved 8 bit (en byte). Dette innfører kvantiseringsstøy.
Punktprøving (sampling) Anta at f(t) løper fra t=- til t=. Anta at F(u) (Fourier-transformen av f(t)) er null for alle u utenfor intervallet [-W,W]. f(t) sies å være båndbegrenset (band limited). f(t) F(u) t -W W u
Punktprøving (sampling) Det går an å vise at dersom: t 2W kan det båndbegrensede signalet f(t) gjenskapes fullstendig på bakgrunn av punktprøvene. Dette kalles Whittaker-Shannons punktprøvingsteorem. Punktprøvingsraten 2W kalles Nyquist-raten.
Plan Rask repetisjon av forrige kurs. Noen flere egenskaper ved Fourier-transformen. Punktprøving (sampling). Hurtig algoritme for Fourier-transformen (the Fast Fourier Transform, FFT). Et annet synspunkt på transformer. Innledning. Hadamard-transformen.
FFT Hvor lang tid tar det å utføre en diskret D Fouriertransform: O(N 2 ) Den tilsvarende 2D transformen: N Fu N fx j2πux ( ) = ( )exp[ ] N x= er O(N 4 ). N N ux vy Fuv (, ) = fxy (, )exp[ j2π( + )] 2 N N N x= y=
FFT For et 256*256 bilde må vi utføre 256 4 = 4294967296 operasjoner (mer enn 4 milliarder operasjoner). Benyttes metoden der transformen utføres radvis og så kolonnevis er kompleksiteten (N 3 ). Dette gir 256 3 = 677726 operasjoner (mer enn 6 millioner operasjoner). Vi skal se at det finnes en algoritme (FFT) som kan beregne den samme transformen med kompleksitet O(N 2 logn). Gevinsten for et 256*256 bilde er at beregningen går mer enn 8 ganger så fort i forhold til O(N 4 ) algoritmen.
FFT Illustrerer med D transformen (husk en 2D transform kan utføres som D transformer over radene og så kolonnene). Definer: N Fu N fx j2πux ( ) = ( )exp[ ] N W x= N = j2π exp[ ] N slik at F(u) kan skrives: N Fu ( ) = N fxw ( ) N x= ux
FFT Anta N=2 n slik at N=2M (M et positivt heltall). Vi har nå at: N 2M Fu N fxw ux ( ) = ( ) M fxw N = ( ) 2 x= x= ux 2M M M 2 = 2 2 + 2 + 2 M f x W u x ( ) = M f x W M ( ) x x= ( ) u( 2x+ ) 2M der vi altså har brutt den opprinnelige summen ned i to delsummer (over like og odde indekserte elementer).
Observer at: W Derfor kan vi nå omskrive: M M = 2 + 2 + 2 M f x W ux = M f x W ux ( ) W M ( ) M x x= Definer nå: F Da gjelder: FFT π jm ux j2π exp[ 2 ] = exp[ 2 M ux ] = W 2 2 ux 2M = M M Fu M f x W u 2x ( ) = ( 2 ) M f x W 2M + ( 2 + ) 2 x= x= like M ( u) = M f ( 2 x ) W x= ux M u { like odde 2M} Fu ( ) = F ( u) + F ( uw ) 2 ux M ( ) u( 2x+ ) 2M u 2M M og F u M f x W ux odde( ) = ( 2 + ) M for u,,,..., M x= for u= 2,,,..., M = 2
FFT Observer til slutt at: slik at: W W u+ M M 2π jm u 2π jm M j2π = exp[ ]exp[ ] = exp[ ] = M 2π jm u 2π jm M j2π = exp[ ]exp[ ] = exp[ 2 2 2M u ] W u M = W u+ M u 2M 2M Fu ( + M) = F ( u) F ( uw ) 2 { u } like odde 2M
FFT, oppsummering En N-punkts transform kan beregnes ved å dele det opprinnelige uttrykket for F(u) i to deler. Den første delen er: Fu { u ( ) = F u F uw } like( ) + odde( ) 2M, u= 2,,,..., M 2 Beregning av den første delen krever at vi beregner 2 N/2 punkts transformer, F like (u) og F odde (u). Beregning av den andre delen skjer deretter slik: Fu M { u ( + ) = F u F uw } like( ) odde( ) 2M, u= 2,,,..., M 2
FFT, oppsummering Denne splittingen kan vi fortsette rekursivt inntil vi i siste instans bare beregner 2-punkts transformer. Disse settes så systematisk sammen for å bygge opp det endelige resultatet for N-punkts transformen. Dette er en Fast Fourier Transform (FFT). Det kan lett vises at beregning av en D Fourier-transform med denne algoritmen er O(NlogN).
Plan Rask repetisjon av forrige kurs. Noen flere egenskaper ved Fourier-transformen. Punktprøving (sampling). Hurtig algoritme for Fourier-transformen (the Fast Fourier Transform, FFT). Et annet synspunkt på transformer. Innledning. Hadamard-transformen.
Et annet synspunkt på transformer D Diskret Fourier-transformen er definert ved: N Fu N fx j2πux ( ) = ( )exp[ ] N x= Legg merke til at sammenhengen mellom F(u) og f(x) er lineær, det vil si at den samme transformen kan uttrykkes som en matrisemultiplikasjon: F = Af
Et annet synspunkt på transformer Eksempel: N=4, f()=, f()=,f(2)=2 og f(3)=3. F = Af F( ) F() F( 2) F() 3 = 4 j j 2 j j 3 5. j = 5. + 5. 5. 5. 5. j
Et annet synspunkt på transformer Helt tilsvarende har vi at den inverse transformen kan uttrykkes ved: f A F = Fourier-transformen tilhører klassen unitære transformer, det vil si transformer der transform-matrise A har egenskapen: A * = A T
Et annet synspunkt på transformer Eksempel: N=4, f()=, f()=,f(2)=2 og f(3)=3. F Af F F F F j j j j j j = = = + ( ) () ( ) ()...... 2 3 4 2 3 5 5 5 5 5 5 f A F A F f f f f j j j j j j T = = = + = 2 3 4 5 5 5 5 5 5 2 3 * ( ) () ( ) ()......
Et annet synspunkt på transformer 2D Diskret Fourier-transformen er definert ved: N N ux vy Fuv (, ) = fxy (, )exp[ j2π( + )] 2 N N N x= Legg merke til at også nå er sammenhengen mellom F(u,v) og f(x,y) lineær, det vil si at den samme transformen kan uttrykkes som en matrisemultiplikasjon: F y= N N ux vy = exp[ j2π ] fxy (, )exp[ j2π ] 2 N N N x= = AfA T y=
Et annet synspunkt på transformer Dette er et generelt resultat, for 2D-transformer med separabel kjerne (og der de to leddene i den separerte kjernen har samme funksjonelle form), gjelder: F = AfA T
a k *...og enda et synspunkt... La være kolonne k i matrisen. * * * T Definer A = a a. kl, k l A * T La indreproduktet av to N*N matriser være definert ved: N N * PQ, = pxyq (, ) ( xy, ) x= y= Vi får da en rekkeutvikling for bildet f(x,y) gitt ved: f = N N * F(, u v) A uv, u= v= der * Fuv (, ) =,, fa kl
...og enda et synspunkt... Bildet f(x,y) kan altså skrives som en vektet sum av N*N matriser. Disse matrisene kalles basisbilder. Vektene er ganske enkelt projeksjonen av bildet f(x,y) ned på hvert basisbilde. f = N N * F(, u v) A uv, u= v= der * Fuv (, ) =,, fa kl
...og enda et synspunkt... Basisbilder for Fourier-transformen Reell del Imaginær del
Sidesprang Vi vil sende dette bildet over en lavrate datakanal. Bildet er 256*256 pixler stort, hver pixel er representert ved 8 bit, altså må vi sende 65536 byte over kanalen. På en 64kbit/s kanal vil dette ta ca. 8 s. Kan vi gjøre noe for å øke overføringsraten?
Sidesprang Hva om sender og mottaker seg imellom avtaler et sett byggeklossbilder. Senderen overfører instruksjoner for hvordan disse byggeklossbildene skal settes sammen for å gjenskape det bildet sender egentlig ønsker å sende. Kan instruksjonene sendes på mindre tid enn selve bildet?
Sidesprang Hva med byggeklosser av denne typen: Det vil si byggeklosser av typen B x,y som er av samme størrelse som bildet vi vil sende og som er null overalt unntatt pixel (x,y) som settes lik.
Genial ide... Regelen for rekonstruksjon av det sendte bildet er: N N fxy (, ) = α ij, B, i= j= ij α ij Problem: Koeffisientene, er nødvendigvis lik (grå-)verdien til pixel i,j. Vi må sende like mange koeffisienter som der er pixler. Problem: Byggeklossbildene fanger ikke opp globale egenskaper ved bildet.
Sidesprang Kan dette gjøres bedre? Hva med disse byggeklossbildene:
Vi prøver med et 8*8 bilde: Sidesprang
Sidesprang Vi bruker følgende 9 koeffisienter: 8. 38 77. 38 88. 734. 69. 64. 53. 3. 78.
Hadamard-transformen Disse byggeklossbildene er selvfølgelig ikke tilfeldig valgt. De er basisbildene assosiert med den såkalte Hadamardtransformen. Kjernen i denne transformen er gitt ved: b x b u i kxyuv (,,, ) = ( ) + = N [ ( ) ( ) b ( y) b ( v)] i i i i der b i (x) er i-te bit i den binære representasjonenav x. Med i=3 og x=6 ( in binary) er b (x)=, b (x)= og b 2 (x)=. N
Hadamard-transformen Med N=8 er basisbildene:
Tilbake til Fourier-transformen Vi bruker følgende 9 koeffisienter: 84.. j. 544 26. + j. 23. + j45. 9. j3. 24. + j5. 2. + j9. 5. j7.. + j7. Re Im
Hadamard vs. Fourier (første 9 av 64 koeff.) Hadamard Fourier