Vaja 1: Interpolacija in decimacija slik

Transcription

Vaja 1: Interpolacija in decimacija slik
Univerza v Ljubljani, Fakulteta za elektrotehniko
četrtek, 7. marec 2013
Laboratorijske vaje pri predmetu Biomedicinske slikovne tehnologije
Vaja 1: Interpolacija in decimacija slik
S postopkom interpolacije slik lahko priredimo sivinsko
vrednost poljubni točki v slikovni ravnini. Na ta način lahko
povečamo vzorčno frekvenco ter s tem velikost slik ter tako
zmanjšamo velikost slikovnih elementov. Glede na to, koliko
sosednjih slikovnih elementov upoštevamo pri izračunu
sivinske vrednosti v podani točki, delimo postopke
interpolacije na:
 ničti red ali interpolacija najbližjega soseda –
upoštevamo le najbližji slikovni element,
 prvi red ali (bi)linearna interpolacija – upoštevamo le
štiri sosednje slikovne elemente,
 višji red, npr. (bi)kubična interpolacija (drugi red), ki upošteva 16 sosednjih slikovnih
elementov.
Linearna interpolacija
f(x)
b
xi
xi-1
a
x
xi+1
Bilinearna interpolacija
x
(xi, yj)
(xi+1, yj)
c
(x, y)
a
b
d
(xi, yj+1)
y
(xi+1, yj+1)
f(x,y)
Računska zahtevnost interpolacijskih postopkov 2D slik v grobem raste s kvadratom reda
interpolacije, kar pomeni, da je bikubična interpolacija (drugi red) približno štiri krat bolj
Univerza v Ljubljani, Fakulteta za elektrotehniko
četrtek, 7. marec 2013
Laboratorijske vaje pri predmetu Biomedicinske slikovne tehnologije
Vaja 1: Interpolacija in decimacija slik
zahtevna (počasnejša) od bilinearne (prvi red) interpolacije. Naštete interpolacijske postopke je
mogoče posplošiti, tako da delujejo tudi za večrazsežne slike. Trilinearno interpolacijo je
mogoče razčleniti na dve biliniarni in eno linearno interpolacijo, kot to prikazuje spodnja slika:
Trilinearna interpolacija
(xi, yj, zk)
(xi, yj+1, zk)
(xi+1, yj, zk)
(x, y, zk)
Bilinearna interpolacija
pri zk in zk+1
(xi, yj)
(x, y, z)
(x, y, zk+1)
(xi, yj+1)
(x, y, zk)
(x, y, z)
c
(x, y)
a
b
(xi+1, yj, zk+1)
y
(xi, yj+1, zk+1)
bz
d
x
z
(xi+1, yj)
Linearna interpolacija
v smeri z osi
az
(xi+1, yj+1)
(x, y, zk+1)
(xi+1, yj+1,
z )
bilinearna
interpolacija
v xy slikovni ravnini
pri zk in zk+1
Računska zahtevnost interpolacije 3D slik raste s tretjo potenco reda interpolacijskega
postopka.
S postopkom decimacije slik zmanjšamo vzorčno frekvenco ter s tem velikost slik. Skladno z
Nyquistovim vzorčnim teoremom je pred postopkom decimacije sliko potrebno filtrirati z nizko
prepustnim sitom in na ta način odstraniti visoko frekvenčno informacijo. Pri decimaciji se
pogosto uporablja piramidna shema, kjer se vzorčna frekvenca izvirne slike zaporedoma
zmanjšuje s celoštevilsko vrednostjo, običajno dva.
Univerza v Ljubljani, Fakulteta za elektrotehniko
četrtek, 7. marec 2013
Laboratorijske vaje pri predmetu Biomedicinske slikovne tehnologije
Vaja 1: Interpolacija in decimacija slik
Piramidna decimacijska shema
Primer dveh jeder nizko prepustega
sita
4
f(x,y), 21 x 21
2
2
f(x,y), 2 x 2
2
3
1
f(x,y), 2 x 2
3
Filtriranje slike lahko izvedemo s postopkom 2D diskretne konvolucije med podano sliko S
velikosti [m, n] in konvolucijskim jedrom K velikosti [a, b], ki jo glede na naslavljanje v Matlabu
lahko zapišemo kot:
Sc (i, j )   k 1  k
a
1
b
2 1
K (k1 , k2 )  S (i  (k1  kc1 ), j  (k2  kc 2 ))
Na področju, kjer slika ni definirana, v skladu z definicijo konvolucije, predpostavimo sivinsko
vrednost 0. Konstanti kc1 in kc2, ki določata središče konvolucijskega jedra naj bosta definirani
kot floor((size(K)+1)/2);. V programskem okolju Matlab je 2D konvolucijo mogoče
neposredno izvesti s štirimi for zankami. Dve zunanji zanki uporabimo za sprehajanje po
slikovnih elementih, dve notranji zanki pa za sprehajanje po konvolucijskem jedru.
1. Ustvarite funkcijo [oY] = interp1D(iData, iX, iMethod), ki bo interpolirala vrednosti pri iX.
Predpostavite, da so podatki iData ekvidistantni (dx=1), ter da je koordinata prvega
elementa v iData enaka 1. Parameter iMethod definira tip interpolacije, in sicer naj
'nearest' označuje ničti red interpolacije z najbljižjim sosedom, ‘linear’ pa linearno
interpolacijo. Vhodni parameter iX lahko vsebuje poljubno število elementov. Velikost
izhodnega parametra tipa double oY naj bo enaka velikosti matrike iX.
2. Ustvarite funkcijo [oImg] = imInterp2D(iImg, iX, iY, iMethod), ki bo interpolirala
vrednosti pri T(iX, iY). Predpostavite, da so slikovni elementi vhodne slike iImg
ekvidistantni (dx=1, dy=1), ter da je koordinata prvega slikovnega elementa v iImg(1, 1)
enaka (x=1, y=1). Parameter iMethod naj ima enak pomen kot pri funkciji interp1D.
Vhodna parametra iX in iY lahko vsebujeta poljubno, a enako število elementov, velikost
izhodne slike tipa double oImg naj bo enaka velikosti matrike iX.
3. Ustvarite funkcijo [oImg] = imInterp3D(iImg, iX, iY, iZ, iMethod), ki bo interpolirala
vrednosti pri T(iX, iY, iZ). Predpostavite, da so slikovni elementi vhodne slike iImg
ekvidistantni (dx=1, dy=1, dz=1), ter da je koordinata prvega slikovnega elementa v
iImg(1, 1, 1) enaka (x=1, y=1, z=1). Parameter iMethod naj ima enak pomen kot pri
Univerza v Ljubljani, Fakulteta za elektrotehniko
četrtek, 7. marec 2013
Laboratorijske vaje pri predmetu Biomedicinske slikovne tehnologije
Vaja 1: Interpolacija in decimacija slik
funkciji interp1D. Vhodni parametri iX, iY, iZ lahko vsebujejo poljubno, a enako število
elementov, velikost izhodne slike tipa double oImg naj bo enaka velikosti matrike iX.
4. Ustvarite funkcijo [oImg] = imConv2D(iImg, iKernel), ki bo izračunala konvolucijo vhodne
slike iImg s konvolucijskim jedrom iKerne ter vrnila rezultat oImg tipa double.
5. S pomočjo funkcije imConv2D ustvarite funkcijo [oImg] = imDecimate2D(iImg, iKernel,
ilevel), ki bo zaporedoma (iLevel krat) decimirala vhodno sliko za dva.
Vprašanja
Na vprašanja odgovorite, tako da odgovore zapišete v .m datoteko, ki naj vsebuje tudi vse
potrebne ukaze za izračun rezultatov ter prikaz zahtevanih slik. Pri reševanju smiselno
uporabite že ustvarjene funkcije.
1. Kaj so prednosti in slabosti interpolacije slik z metodo najbližjega soseda?
2. Kaj so prednosti in slabosti (bi,tri)linearne interpolacije slik?
3. Interpolirajte sliko vaja1-256x256-8b.raw, tako da podvojite število slikovnih elementov
v obeh dimenzijah (velikost interpolirane slike bo tako 512 x 512 slikovnih elementov).
Mrežo interpolacijskih točk boste najenostavneje ustvarili z vgrajenima funkcijama
meshgrid ter linspace (namig: [iX, iY] = meshgrid(linspace(…, …, …), linspace(…, …, …)) ).
4. Slika vaja1-128x256-8b.raw je nastala z neenako frekvenco vzorčenjem v smeri x in y osi.
Slikovni element v smeri x osi je dvakrat večji kot v smeri y osi. Sliko interpolirajte, tako
da bo vzorčenje popravljene slike ekvidistantno. Pri tem spremenite vzorčno frekvenco
le v eni osi! Uporabite funkcijo imInterp2D z bilinearno interpolacijo.
5. Interpolirajte sliko vaja1-181x217x181-8b.raw v prerezni ravnini x = 110.3. Število
slikovnih elementov v y in z osi naj se podvoji. Uporabite funkcijo imInterp3D. Mrežo
interpolacijskih točk boste najenostavneje ustvarili z vgrajenima funkcijama meshgrid ter
linspace (namig: [iX, iY, iZ] = meshgrid(x, linspace(…, …, …), linspace(…, …, …)) ).
Potrebovali boste še vgrajeno funkcijo squeeze, ki odstrani vse dimenzije matrike enake
ena.
6. Decimirajte sliki vaja1-256x256-8b.raw ter vaja1-decimacija-256x256-8b.raw, tako da bo
velikost decimirane slike 64 x 64. Uporabite funkcijo imDecimate2D s konvolucijskim
jedrom velikosti 3 x 3. Izvedite decimacijo tudi brez filtriranja (za vhodni parameter
iKernel uporabite [1]) ter primerjajte dobljeni sliki. Kaj opazite?