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?