25
MATLAB & IMAGE PROCESSING TOOLBOX

Matlab & Image Processing Toolbox

Embed Size (px)

Citation preview

Page 1: Matlab & Image Processing Toolbox

MATLAB & IMAGE

PROCESSING TOOLBOX

Page 2: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

MATLAB & IMAGE PROCESSING TOOLBOX

L1. Učitavanje i prikazivanje slike

L1.1 Što je MATLAB

Matlab je program, programski jezik i programski paket koji je namijenjen inžinjerima i

studentima. Pojavio se početkom 80.-tih kada je objedinio funkcije brojnih programa za numerička izračunavanja napisanih uglavnom u FORTRAN-u. Od tada je doživio više verzija. Danas je uglavnom napisan u C programskom jeziku za Windows okruženje. Ujedno, danas ima posebne toolbox-ove za različite namjene. Jedan od najznačajnih Matlab toolbox-ova je Images Processing toolbox. Prevashodno je namjenjen za specijaliste u ovoj oblast mada može poslužiti i laicima. Nama je bio dostupan u verziji 2.0. Jedan dio MATLAB naredbi i programa je bez posebnog uvoda dat u rješenjima nekih problemskih zadataka u prethodnim poglavljima. Ovaj prilog je prevashodno namjenjen za studente koji zahtjevaju postupniji uvod u materiju. L1.2 Učitavanje slike i tipovi podataka u toolbox-u

U ovoj verziji toolbox-a koristi se samo jedna naredba za učitavanje slike imread. Oblik ove naredbe je: A=imread(FAJL,EKS). Naredbom se iz FAJL-a u matricu A smješta slika koja se nalazi u tom fajlu. EKS specificira format fajla. Ovom naredbom se po disku traži fajl FAJL a ako se ne nađe traži se fajl FAJL.EKS. Pretraživanje se obavlja u tekućem i onim direktorijumima koji se nalaze u putu. U slučaju da je slika sivoskalirana, matrica A ima dimenzije slike u pikselima (MxN) dok je u slučaju slike u boji to trodimenzionalna matrica dimenzija MxNx3 koja predstavlja sliku dimenzija MxN za svaku od boja RGB modela (MxN;1 je crvena, MxN;2 je zelena, MxN;3 plava boja). Mogući tipovi slike su 'bmp' - Windows bitmapa, 'hdf' hijerarhiski format podataka, 'jpg' ili 'jpeg' - Joint Photographic Experts Group , 'pcx' - Paintbrush format zapisa, 'tif' ili 'tiff' - TIF format i 'xwd'. Pored osnovnog oblika naredbe imread postoje i drugi oblici. Ovdje ih pominjemo ukratko. Naredbom [A,map]=imread(FAJL,EKS) čita se indeksirana slika i smiješta u matricu A, dok se kolorna mapu smiješta u matricu map. Kolorna mapa se skalira da ima vrijednosti između 0 i 1. Naredba imread se može koristiti i sa izostavljenim članom EKS. Tada se pokušava pročitati fajl na osnovu informacija o formatu zapisanom u samom fajlu. U TIFF formatu zapisa može se smjestiti više slika. Redni broj slike se može navesti na kraju liste argumenata funkcije i iz slike se može pročitati bilo koja slika iz fajla. Npr., broj 3 na kraju liste argumenata bi iz TIFF slike pročitao treću sliku iz fajla. L1.3 Učitavanje i prikazivanje slike

A=imread('saturn.tif'); imshow(A)

Prethodnim naredbama se učitava slika (može se naći u poddirektorijumima MATLAB-a) sa

slikom planete Saturn. Naredba imshow(A) vrši prikazivanje učitane TIF slike. Naredbama:

B=imread('lenna256.bmp'); imshow(B)

264

Page 3: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

učitava se slika lenna256.bmp i smiješta u matricu B. Kod nas slika lenna256.bmp predstavlja standardnu test sliku Lena zahvaćenu šumom. L1.4 Veličina slike

Učitajmo, a zatim prikažimo sliku fruit.jpg:

C=imread('fruit.jpg');

imshow(C) Učitana matrica C ima tri dimenzije, odnosno tri dvodimenzionalne matrice od kojih svaka predstavlja jedan kanal boje.

size(C) ans =

414 487 3 Naredbom:

imshow(C(:,:,3)) prikazuje se samo sadržaj plave boje u slici (ovaj put u formi crno-bijele slike). Promjena veličine slike na onu koja će biti odštampana se obavlja naredbom truesize(h) gdje je h broj aktuelnog grafičkog prozora. L1.5 Zapisivanje slike u fajl

Slike se u fajl zapisuju naredbom imwrite. Osnovni oblik naredbe je imwrite(A,FAJL,EKS). Ovom naredbom se slika A zapisuje u grafički FAJL i to u formatu EKS. Vrijednosti za EKS su iste kao za naredbu imread. Indeksirane matrice se mogu smještati zajedno sa kolornom mapom map naredbom: imwrite(A,map,FAJL,EKS). Ako se u naredbi izostavi EKS MATLAB će na osnovu imena FAJL-a pokušati da sam odredi koji će format dodijeliti grafičkom fajlu. Nekim formatima zapisa (ovdje ćemo obraditi JPG i TIF format) mogu se specificirati i neki dodatni parametri. Tako za JPEG format zapisa može se specificirati: 'Quality' - broj između 0 i 100, veći brojevi daju veći kvalitet ali i veći fajl. Za TIFF format mogu se specificirati: 'Compession' - 'none' (bez kompresije), 'packbits', 'ccitt' (validna opcija samo za binarne slike), i 'Descrtiption' koja može biti bilo koji string i koji će se kasnije moći pročitati naredbom imfinfo.

Izvršimo konverziju slike na kojoj je prikazan Saturn u JPEG format.

A=imread('saturn.tif'); imwrite(A,'saturn.jpg')

U naredbi imwrite izostavljeno je navođenje tipa fajla, pa je računar izabrao na osnovu

ekstenzije JPEG format zapisa. Snimimo fajl fruit.jpg sa smanjenim kvalitetom:

C=imread('fruit.jpg'); imwrite(C,'voce.jpg','Quality',50)

O smanjenom kvalitetu se može suditi na osnovu naredbi:

C1=imread('voce.jpg');

imshow(C1)

265

Page 4: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

Treba uočiti razliku u veličini ova dva fajla, fruit.jpg ima 89844 bajta a voce.jpg 35158.

L1.6 Naredba warp

Po istim pravilima kao imshow naredba može se koristiti naredba warp. Naredba warp

može poslužiti za nanošenje slike na površ kao u sljedećem primjeru:

[x,y]=meshdom(-3:0.1:3,-3:0.1:3); z=x.^2-y.^2; warp(z,pic)

L1.7 Naredba getimage

Navedimo ovdje naredbu getimage kojom se dobija informacija o podacima koji se nalaze u tekućoj slici, A=getimage pridružuje matrici A vrijednosti koje se nalaze u pojedinim pikselima slike, dok naredbom [A,info]=getimage, pored matrice A dobijamo i informaciju o vrsti tekuće slike koja se prikazuje. Moguće vrijednosti parametra info su: 1 za indeksnu sliku, 2 za sliku intenziteta, 3 za skaliranu sliku, 4 za RGB sliku. U slučaju da se u tekućim osama ne nalazi slika vrijednost parametra info je 0. L1.8 Karakteristike sivoskaliranog displeja Na predavanjima smo se upoznali sa osnovnim karakteristikama sivoskaliranog displeja. Sivoskalirana fotografija se sastoji od 256 nijansi. Ljudsko oko ne razlikuje jasno sve ove nijanse. Ovo možemo da uočimo na jednostavnom primjeru slike koja se sastoji od 256 sivih nijansi.

for k=0:255 A(k+1)=k;

end B=zeros(16,16);

B(:)=A; pcolor(B),colormap(gray)

Displeji zbog diskretne strukture ne reprodukuju na idealan način velike površi uniformne boje. Naime, možemo imati utisak da boja nije ravna, da na slici postoje nijanse i u drugim bojama. Što se manje neravnine primjećuju displej je bolji.

imshow(0.5*ones(256)) Visokopropusni obrazac displeja predstavlja sposobnost razlikovanja različitih kontrasnih boja na maloj površi. Ovdje ćemo prvo demonstrirati dva oblika visokopropusnog obrazca. Prvi kod kojeg su crne i bijele linije naizmjenično raspoređene.

A=[]; for k=1:128

A=[A;zeros(1,256);ones(1,256)]; end

imshow(A) i drugi kod kojeg su crni bijeli pikseli raspoređeni kao šahovska polja.

266

Page 5: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

[k,l]=meshdom(1:256,1:256);

A=rem(k+l,2); imshow(A)

L1.9 Ukoliko slabo vladate MATLAB-om MATLAB je programski jezik koji je zapravo standard za inženjerske aplikacije. Ako ne mislite da radite kao inženjer on vam ništa neće trebati. Ali ako ćete nešto projektovati ili ispitivati onda vam ovaj alat može biti veoma korisan. Stoga nije loše ponešto naučiti o njegovom radu jer nema gotovo nijedne inženjerske oblasti koju nije pokrio posebnim toolbox-om. Da biste lakše pratili ovaj kurs moraćete da naučite nekoliko naredbi: - naredbe za baratanje vektorima i matricama, - funkciju help koja pruža informacije o svim MATLAB funkcijama, - funkcije za generisanje šuma rand i randn, - kreiranje crteža i njihovo eksportovanje u druge programe.

L2. Digitalna slika i šum

L2.1 Učitavanje i prikazivanje slike

Ponovimo ukratko osnovne detalje vezane za učitavanje i prikazivanje slike. Slika iz fajla baboon.jpg koji se nalazi u tekućem direktorijumu učitava se naredbom [pic,map]= imread(‘baboon’,’jpg’), koja vraća 2 matrice pic i map. Prva predstavlja samu sliku dok je druga kolorna mapa slike. Na isti način se mogu učitati i drugi formati grafičkog prikaza (TIFF, BMP, HDF, JPG, PCX ili XWD) i za grayscale i za RGB slike.

• Za sivoskaliranu sliku pic je MxN matrica, gdje su M i N dimenzije slike dok je map prazna

matrica. • Za kolornu sliku pic je MxNx3 matrica, gdje su M i N dimenzije slike, treća koordinata

odgovara kanalima. Map nije prazna matrica u opštem slučaju. Može imati tačno 3 kolone i bilo koji broj redova koji predstavljaju pojedinačne boje.

Slika se može prikazati komandama imshow(pic,map) ili imshow (pic). Za sivoskaliranu

sliku image(pic,[A B]) prikazuje pic piksele sa odsjecanjem preko ili ispod vrijednosti A i B. Za slike u boji imshow(pic,map) prikazuje indeksnu sliku pic sa kolornom mapom map.

Pored naredbe imshow može se koristiti naredba subimage kojom se prikazuje slika na isti način osim što se pored osa nanosi i dimenzije slike u pikselima. Treba napomenuti da se pored imread i imwrite za pojedine formate mogu koristiti funkcije bmpread, bmpwrite, gifread, gifwrite, pcxread, pcxwrite, tiffread, tiffwrite, xwdread i xwdwrite. Ove naredbe su zaostale iz ranijih verzija MATLAB-a.

L2.2 Generisanje šuma

Za dodavanje šuma slici koristi se naredba imnoise.

Da bi se dodao impulsni salt-pepper šum može se korisiti naredba:

pic1=imnoise(pic,'salt & pepper',D);

267

Page 6: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

imshow(pic1)

Rezultat operacije pic1 je slika kojoj je dodat impulsni šum intenziteta D. Ovo znači da je DxNxM piksela zahvaćeno impulsnim šumom. Ako se izostavi D podrazumijeva se 0.05. Vrijednost D mora biti broj u granicama 0 i 1.

Gaussovski šum slici se dodaje naredbom:

pic1=imnoise(pic,'gaussian',M,V); imshow(pic1)

Ovom komandom slici se dodaje Gausovski šum srednje vrijednosti M i varijanse V.

Vrijednosti M moraju biti između -1 i 1. Ako se M i V izostave podrazumijeva se M=0 i V=0.01.

Multiplikativni šum se može dodavati slici naredbom:

pic1=imnoise(pic,'speckle',V); imshow(pic1)

Ovom komandom se slici dodaje multiplikativni šum tako da važi: pic1=pic + n*pic, gdje je n uniformno distribuirani šum varijanse V. Ako se izostavi V pretpostavljena vrijednost je 0.04. L2.3 Kolorni sistemi Ovdje ćemo uvesti osnovne detalje vezane za MATLAB kolorni sistem. MATLAB koristi tri kolorna sistema: • RGB (Red Blue Green), • NTSC (National Television Systems Committee) • HSV (Hue Saturation Value).

Da bi razmatrali kolorne sisteme koristićemo kolornu sliku pic koju smo već učitali. Da bi je

pretvorili u HSV (HSL) model koristimo naredbu:

pic1=rgb2hsv(pic); imshow(pic1)

Transformacija kolornog prostora RGB u NTSC se obavlja naredbom:

pic1=rgb2ntsc(pic);

Ovo dovodi do konverzije RGB matrice u NTSC ekvivalent YIQ matricu. Matrica YIQ ima iste dimenzije kao odgovarajuća RGB (MxNx3).

Možemo npr., prikazati samo sivoskalirani kanal imshow(pic1(:,:,1));.

Za konverziju u sivoskaliranu sliku koristi se naredba:

pic1=rgb2gray(pic); imshow(pic1)

Ovo rezultira konverzijom MxNx3 matrice u odgovarajuću sivoskaliranu matricu dimenzija MxN .

268

Page 7: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

Koristeći funkciju colormap može se predstaviti indeksna slika. Ovo je tzv. look up tabela u kojoj stoje RGB vrijednosti pojedinih kodova. Kolorna mapa ima strogo 3 kolone dok je broj vrsta proizvoljan. Prva kolona označava crvenu, druga zelenu, a treća plavu boju. Naredbom colormap(map) tekuća slika se prebacuje u izabranu kolornu mapu. MATLAB posjeduje niz predefinisanih kolornim mapa: hsv, hot, bone, copper, pink, colorcube, jet, cool, autumn, spring, winter, summer:

colormap(hsv) colormap(hot) colormap(bone) colormap(copper) colormap(cool) colormap(winter) colormap(gray)

L2.4 Boja piksela

Za određivanje vrijednosti boje piksela koristi se naredba impixel. Npr., za neku učitanu sliku a vrijednosti u specificiranim pikselima se dobijaju naredbom:

rgb=impixel(a,[1 2 4],[34 123 34])

Slična je funkcija improfile kojom se mogu dobiti vrijednosti boja u slici. Postoji više opcija vezanih za ovu naredbu. Ovdje ćemo pomenuti samo jednu. Pretpostavimo da crtež u aktivnom prozoru predstavlja sliku. Ako se zada c=improfile može se crtati linija po crtežu. Kada se završi sa crtanjem dobija se grafik koji prikazuje vrijednosti kanala boja za izabrane tačke dok se u c smiještaju vrijednosti RGB kanala po izabranom pravcu. L2.5 Neke statističke karakteristike slike

Sa mean2(A) dobija se srednja vrijednost slike A, std2(A) je standardna devijacija slike, dok je kros-korelacija dvije slike corr2(A,B). L2.6 Indikacija tipa slike

MATLAB principski radi sa tri modela: crno-bijela slika, sivoskalirani tonovi i slike u punom koloru. Pomoću naredbi isbw(S), isgray(S) vrši se provjera da li je slika crno-bijela, sivoskalirana. U slučaju potvrdnog odgovora rezultat operacije je 1 a u suprotnom rezultat je 0. Slike u boji su veoma često u MATLAB-u indeksirane što će reći da osim podataka za vrijednosti pojedinih piksela posjeduju podatke i za boju koja odgovara pojedinoj vrijednosti piksela. Ta vrijednost se naziva i kolorna mapa. Na primjer:

[A,map]=imread('len256ok.bmp');

učitava sliku Lena koja je u boji i indeksirana je, što se provjerava naredbom:

isind(A) ans =

1

269

Page 8: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L2.7 Jednostavan program za konverziju u grayscale

U programu smo učitali sliku Baboon.jpg i smjestili je u matricu A. Ova matrica je trodimenzionalna. Pojedini kanali R, G i B su smješteni kao A(:,:,1), A(:,:,2) i A(:,:,3). Da bi ih sabrali prvo smo sliku pretvorili u klasu double, izvršili sabiranje pojedinih kanala sa vraćanjem u klasu uint8, i na kraju prikazali sliku.

A=imread('baboon.jpg'); A=double(A);

B=uint8((A(:,:,1)+A(:,:,2)+A(:,:,3))/3); imshow(B)

L3. Osnovne operacije sa slikom

L3.1 Osnove obrade slike

Učitajmo sliku Baboon [pic,map]=imread(‘baboon’,’jpg’). Posvjetljenje se može obaviti

množenjem svakog piksela slike konstantnom vrijednošću mada ima i drugih sofisticiranijih tehnika od kojih je jedna iskorišćena u realizaciji funkcije brighten. brighten(c) posvjetljuje sliku za c∈[0;1] i potamnjuje ako je c∈[-1; 0]. Rezultujuća kolorna mapa se može opisati komandom colormap. Mi možemo takođe da sračunamo svjetliju ili tamniju vrijednost specifične kolorne mape bez promjene prikaza naredbom:

newmapbab= brighten(map,c).

Inverzna slika se može dobiti naredbom invertpic. Sintaksa naredbe je invertpic(pic,map)

ili pic2=invertpic(pic,map). Ako nema ove funkcije može se koristiti naredba oblika pic2=uint8(255-double(pic)).

U cilju da se odredi slika poslije tresholdizacije može se koristiti naredba im2bw. Npr.

pic1=im2bw(pic,l) koja konvertuje sivoskaliranu sliku u binarnu sliku gdje je nivo 255*l. l je u granicama 0 i 1 l∈[0;1]. Za l>1 rezultujuća slika je crna, dok je za l<0 rezultujuća slika bijela. Rezultujuća slika se prikazuje sa imshow(pic1).

Neka su slike Lenna i Baboon učitane u matricama len i bab respektivno. Za miksovanje

slika može se koristiti naredba n=mixpic(bab,c1,len,c2) koja računa mješavinu len i bab, sa koeficijentima c1 i c2: n=c1*len+c2*bab. Ako na lokalnom sistemu ne postoji ova funkcija treba odraditi slijedeće n=uint8(c1*double(bab)+c2*double(len)).

Sabiranje dvije slike istih dimenzija se može obaviti funkcijom addpic, a u slučaju da na

računaru ne postoji ova funkcija može se koristiti naredba n=uint8(double(bab)+double(len)).

L3.2 Klipovanje slike i podešavanje histograma

Ako se želi izvršiti klipovanje slike može se koristiti funkcija clippic u obliku clippic(bab,a,b) gdje je bab slika dok su donja i granica za klipovanje a i b. U slučaju da na sistemu ne postoji naredba clippic ovo je veoma jednostavno isprogramirati kao na primjer:

a=63;b=150;

pic2=double(pic1); for i=1:size(pic2,1) for j=1:size(pic2,1)

270

Page 9: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

if(pic2(i,j)<a) pic2(i,j)=a;

elseif(pic2(i,j)>b) pic2(i,j)=b; end,end,end

imshow(uint8(pic2)) Za podešavanje histograma može se upotrijebiti funkcija imadjust u obliku

newbab=imadjust(bab,[LOW;HIGH],[BOT;TOP]); gdje se histogram širi sa pozicije [LOW;HIGH] do pozicije [BOT;TOP]. Sve ove vrijednosti trebaju biti u granicama 0 do 1. Naravno, operacija se može koristiti i za odsjecanje histograma tako da se sa npr., LOW=BOT=50/255 i HIGHT=TOP=150/255 vrši odsjecanje na zadate vrijednosti.

L3.3 Geometrijske operacije

Da bi se obavila operacija rotacije za 45 stepeni i prikazao rezultat treba unijeti naredbe:

bab45= imrotate(bab,45,'method'); imshow(bab45)

'Method' se odnosi na mogući oblik interpolacije koji može biti 'nearest', 'bilinear', ‘crop’ ili

'bicubic'. Po pravilu metod je 'nearest'. Metod 'crop' omogućava odsjecanje slike da bi ostala u granicama prije operacije. Postoje određene primjene bikubične operacije koje se mogu vidjeti na primjeru:

priv=zeros(256,256); priv(20:220,100:125)=ones(201,26);

imshow(priv) priv1=imrotate(priv,5); figure(1),imshow(priv1)

priv1=imrotate(priv,5,'bicubic'); figure(2),imshow(priv1);

Zumiranje slike se sprovodi naredbom imzoom nakon čijeg zadavanja u tekućoj slici je neophodno prevlačenjem odrediti zumiranu zonu. Desnim klikom se vrši dezumiranje.

Naredba za odsjecanje dijela slike je imcrop.

a=imread('lenna256.bmp'); imshow(a) B=imcrop; imshow(B)

Kada se zada naredba B=imcrop treba mišem prevući preko slike i označiti oblast. Sadržaj

oblasti smješten je u matricu B koja se zatim prikazuje. Naredba imcrop može da ima i druge oblike sa argumentima. Na primjer, oblik B=imcrop(A,[xp yp sirina visina]). A je matrica sa slikom koja se odsjeca, xp i yp su početne koordinate odsječenog dijela slike, a parametre sirina i visina ne treba posebno objašnjavati. Između ostalih oblika ove naredbe čini se najkorisniji [B,R]=imcrop. R je odsječeni pravougaonik slike, npr.:

[C,R]=imcrop;

271

Page 10: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

Naredba za promjenu veličine slike je imresize. Sa djelovanjem ove naredbe najlakše se upoznati na primjeru:

A=imread('fruit.jpg');

imshow(A) B=imcrop; imshow(B)

C=imresize(B,3,'bicubic'); imshow(C)

Objasnimo ukratko narebu imresize. U ovom primjeru smo sliku B uvećali tri puta koristeći

metod 'bicubic' za interpolaciju. Ako se umjesto tri zada neki drugi broj veći od 1 slika će biti uvećana toliko puta i po horizontali i po vertikali a u slučaju da se unese npr., 1/3 slika će biti smanjena tri puta. Ako se u naredbi izostavi metod podrazumjeva se 'nearest', a mogući metod je i 'bilinear'. Oblikom naredbe B=imresize(A,[M N],'metod') slika B će poslije ove operacije imati dimenzije MxN (odnosno toliki broj pixela). L3.4 Interpolacija slike

U okviru toolbox-a implementirano je nekoliko mogućnosti interpolacije slike. Veoma moćna naredba koju ćemo koristiti je naredba interp2. Opšti oblik ove naredbe je zi=interp2(x,y,z,xi,yi). Dakle, površ zadata kao z=f(x,y) treba interpolirati da prikaže vrijednosti u tačkama xi i yi. Naravno, najčešće se želi slika preodabrati tj., interpolirati nepostojeće tačke. Postoje još neki oblici ove naredbe kao što su zi=interp2(z,xi,yi) što pretpostavlja da je x=1:N i y=1:M gdje je [M,N]=size(z) i interpolacija N puta se obavlja kao zi=interp2(z,N). Na kraju ove naredbe se kao parametar može iskoristiti podatak o metodu koji se primjenjuje: zi=interp2(...,'metod') gdje metod može biti 'nearest', 'bilinear' i 'bicubic'. Kada su x i y ekvidistantno raspoređeni mogu se primjeniti metodi za brže izračunavanje '*nearest', '*bilinear' i '*bicubic'. U mnogim naredbama uključujući rotaciju primjenjuju se interpolacioni algoritmi odnosno funkcija interp2. Još jedan interesantan način interpolacije koji se može koristiti dobija se funkcijom zi= griddata(x,y,z,xi,yi,'metod') kojom se z=f(x,y) interpolira na tačke (xi,yi). Mogući metodi su 'linear', 'cubic', 'nearest' i 'invdist'. Po pravilu ako ništa nije izabrano uzima se 'linear'. Metodi 'linear' i 'nearest' imaju diskontinuitete koji mogu da vizuelno oštete podatke.

L.4 Transformacije slike L4.1 2D DFT

Primjenjivanje 2D DFT se obavlja naredbom fft2 dok se preuređivanje Fourierove transformacije u prirodan raspored koeficijenata obavlja naredbom fftshift. Opišimo ove naredbe na primjeru:

[a,map]=imread('baboon.jpg'); a=rgb2gray(a);

figure(1),imshow(a) A=fftshift(fft2(a));

figure(2),pcolor(abs(log(A))),colormap(gray),shading interp

Vrijednost 2D DFT kroz ωx=0 i njihov logaritam se mogu prikazati sa:

subplot(211),plot(abs(A(129,:))),title('DFT duz pravca kroz wx=0') subplot(212),plot(abs(log(A(129,:)))),title('log DFT duz pravca kroz wx=0')

272

Page 11: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

Za određivanje inverzne Fourierove transformacije koristi se naredba ifft2.

L4.2 2D DCT

Naredbom dct2(a) određuje se 2D DCT slike. Naredba idct2(a) služi za određivanje inverzne 2D DCT. Naredbe iz slijedećeg primjera prikazuju logaritam 2D DCT i nakon toga vrijednosti koficijenata C(k1,0).

A=dct2(a); figure(1),pcolor(log(abs(A))),colormap(hot),shading interp

title('logaritam 2D DCT') figure(2),plot(A(1,:)),title('DCT kroz nulti koerficijenat')

L4.3 Konvolucija slika

Ovdje ćemo demonstrirati konvoluciju slike Baboon sa 11x11 slikom sa vrijednostima 1. Da

bi izlazna slika imala istu energiju kao slika Baboon izvršeno je svođenje druge slike na energiju 1:

ex = ones(11)/121;

Za konvoluciju i prezentiranje rezultata konvolucije upotrijebićemo naredbe:

A=conv2(a,ex); size(A)

figure(1),imshow(uint8(a)) figure(2),imshow(uint8(A))

L4.4 Radonova transformacija.

Radonova transformacija se u MATLAB-u zadaje naredbom: A=radon(I,th) gdje je th ugao po kojem se traži projekcija. Evo jednog ilustrativnog primjera za proračun Radonove transformacije:

A=zeros(256); A(128,48:207)=ones(1,160); A=imrotate(A,30,'crop');

figure(1),imshow(A),title('Slika za koju racunamo Radonovu transformaciju') a=[];

for k=0:5:175 a(:,k/5+1)=radon(A,k);

end figure(2),contour(0:5:175,1:367,a),title('Radonova transformacija')

L5. Transformacije u obradi slike

L5.1 Poređenje DFT i DCT Već smo se upoznali sa DFT i DCT. Ovdje napravimo analizu na jednom proizvoljnom vektoru koncentracije DFT i DCT. Posmatrajmo vektor:

a=[1 3 4 2 1 5 -1 7 13] čija se DFT jednaka

273

Page 12: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

A=fft(a)

dok je DCT jednaka:

A1=dct(a) Odnos energije u maksimalnom koeficijentu DFT u odnosu na sve koeficijente se dobija kao:

max(abs(A))/sum(abs(A)) dok se ovaj odnos za DCT dobija kao:

max(abs(A1))/sum(abs(A1))

Pokazuje se da je ovaj odnos povoljniji za DCT a pored toga DCT je realna i zahtijeva duplo manje koeficijenata nego DFT i pravi realan odnos bi se dobio poređenjem dva najveća koeficijenta DCT sa jednim DFT (ili u opštem slučaju 2n koeficijenata DCT sa n koeficijenanta DFT). L5.2 Hadamardova matrica Hadamardova matrica je u MATLAB-u implementirana u vidu naredbe hadamard(n) koja može biti sračunata za n=2k odnosno ako je n djeljivo sa 12 ili 20. Matrica inverzne Hadamardove transformacije se može dobiti naredbom

inv(hadamard(8)) Kako je ova transformacija ortogonalna, inverzna transformacija je jednaka transponovanoj matrici direktne transformacije (pomnožena odgovarajućom konstantom) što se može provjeriti naredbom:

inv(hadamard(n))-(1/n)*hadamard(n)' Rezultat prethodne operacije je nula matrica. L5.3 Bazisne funkcije Poznato je da se sve slike odgovarajućih dimenzija mogu predstaviti kao suma odgovarajućih bazisnih funkcija. Pretpostavimo stoga Haarovu transformacionu matricu 8x8 koja se može zadati kao:

Har=[ones(1,8);ones(1,4),-ones(1,4);sqrt(2),sqrt(2),-sqrt(2),-sqrt(2),zeros(1,4);zeros(1,4),sqrt(2),sqrt(2),-sqrt(2),-sqrt(2);2,-2,zeros(1,6);0 0 2 -2

zeros(1,4);zeros(1,4),2 -2 0 0;zeros(1,6),2,-2]

Proračun i prikaz Haarovih bazisnih funkcija može se obaviti sljedećim setom naredbi:

for m=1:8 for n=1:8

baz=Har(m,:)'*Har(n,:); pcolor(baz),title(['bazisne funkcije za m=',num2str(m),' n=',num2str(n)])

pause end end

274

Page 13: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L5.4 Sopstvene i singularne vrijednosti Sopstvene vrijednosti kvadratne matrice A mogu se dobiti naredbom eig(A), dok se naredbom [a,b]=eig(A) dobija dijagonalna matrica sopstvenih vrijednosti i odgovarajući sopstveni vektori smješteni u matricu. Sljedeći primjer ilustruje ovu naredbu:

disp('sopstveni vektori i sopstvene vrijednosti se dobijaju naredbom eig:') A=[1 2 3;4 5 6;21 34 12]

[a,b]=eig(A)

Vrijednosti sopstvenih vrijednosti nijesu nužno realne što možemo vidjeti na slijedećem primjeru:

A=[1 -1 2;2 -1 3;0 -1 1] eig(A)

Dekompozicija po singularnim vrijednostima može se primjeniti na matrice koje nijesu kvadratne. Singularne vrijednost su uvijek realne. Naredba za određivanje singularnih vrijednosti je: [U,S,V]=svd(A) gdje su U i V matrice sopstvenih vektora matrica AAT i ATA dok je S dijagonalna matrica singularnih vrijednosti. Ilustrujmo ovo na primjeru:

A=[1 3 1;2 4 5] [U,S,V]=svd(A)

L5.5 Spektrogram U MATLAB-u postoji funkcija specgram kojom se vrši proračun i prikazivanje spektrograma. U sljedećem primjeru biće učitana matrica chirp koja sadrži cvrkut ptica i prikazan spektrogram ovog signala:

load chirp subplot(411),plot(y)

subplot(212) specgram(y),title('Vremenensko-frekvencijsko predstavljanje cvrkuta ptica')

L5.6 Wavelet transformacija Kao što smo već napomenuli postoji izuzetno veliki broj metoda u kojima se koristi wavelet transformacija. Stoga MATLAB posjeduje toolbox koji implementira većinu ovih funkcija. Pregled ovih funkcije može se dobiti startovanjem programa:

wavedemo

L6. Filtriranje i poboljšavanje slike L6.1. Slika sa šumom

MATLAB se može koristiti kao sredstvo za filtiranje slike. Da bi smo simulirali MATLAB-ove filtre koristićemo funkcije za dodavanje šuma slici. Učitajmo sliku Baboon i dodajmo joj "salt&pepper" šum.

[a,map]=imread('baboon','jpg'); pic1=rgb2gray(a);

275

Page 14: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

imshow(pic1) pic2=imnoise(pic1,'salt & pepper',0.03);

figure(2),imshow(pic2) L6.2. Filtriranje median filtrom Funkcija ze median filtriranje u MATLAB-u je medfilt2(sl,n,m) gdje je sl slika dok su nxm dimenzije filtra koje su pretpostavljene na 3x3. Razliku izlaza iz median filltra i slike sa šumom možemo dobiti naredbom:

a=uint8(double(pic3)-double(pic2)); U slučaju median filtra sa širim prozorom (npr. 5x5) doći će do zamagljivanja slike:

pic3=medfilt2(pic2,5,5);

L6.3 Filtriranje filtrom sa pokretnom sredinom

Primjenimo na sliku Gausov šum i izvršimo filtriranje filtrom sa pokretnom sredinom.

pic1=imnoise(pic,'gaussian',0,0.05); imshow(pic)

Filtar sa pokretnom sredinom se može kreirati pomoću naredbe fspecial:

av3=fspecial(‘average’,3);

što produkuje 3x3 matricu koja predstavlja filtar sa pokretnom sredinom. Za konvoluciono filtriranje može poslužiti naredba filter2 kojom se konvoluiraju dvije slike. U konkretnom primjeru to je:

pic2=filter2(av3,pic1); Funkcija fspecial može poslužiti za niz drugih filtrirajućih funkcija (Gausovski blur,

niskopropusnu, Sobel, Laplasovu, pokretnu sredinu).

Alternativno filtriranje sa poznatom konvolucionom matricom može se obaviti naredbom:

pic2=conv2(double(pic1),av3,'same'); L6.4 Histogramska ekvilizacija

Naredbom imhist(pic1) vrši se prikazivanje histograma slike pic1. Histogramska

ekvilizacija i prikazivanje nove slike obavlja se naredbama:

pic2=histeq(pic1); imshow(pic2)

Histogram dobijene slike dobija se naredbom:

imhist(pic2)

L.6.5 Filtriranje korišćenjem konvolucije

Definišimo masking filtar oblika:

276

Page 15: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

mask=[0,1,1;-1,0,1;-1,-1,0]

Filtriranje pomoću maske može se obaviti naredbom conv2. Na primjer:

pic2=conv2(pic1,mask,’same’); Prikazivanje se mora obaviti primjenom operatora (funkcije) uint8 koji pretvara dobijene

podatke ponovo u format slike:

imshow(uint8(pic2)). L6.6 Zumiranje slike

U MATLAB-u se može koristiti indeksiranje slike da bi se ostvarilo zumiranje. Npr., iz slike Baboon se izdvaja podslika sa 64x64 elementa sljedećom naredbom:

pic3=pic1(1:64,1:64);

Naredbom imresize može se izvršiti interpolacija slike. Npr., iz slike pic3 koja je dimenzija

64x64 sliku dimenzija 256x256 možemo dobiti naredbom:

pic4=imresize(pic3,4,'method');

gdje vrijednost 4 označava interpolaciju 4 puta dok metod može biti 'nearest', 'bilinear' i 'bicubic'. L6.7 Lokalni adaptivni filtar

Dodajmo slici Baboon Gausov šum varijanse 0.01:

pic2=imnoise(pic1,'gaussian',0.01); imshow(pic2)

Lokalni adaptivni filtar se dobija naredbom wiener2 u obliku:

pic3=wiener2(pic2,[M N]);

gdje je MxN veličina bloka korišćenog za računanje lokalne srednje vrijednosti i varijanse slike. Naredba u obliku [pic3,noise]=wiener2(pic2,[M N]), procjenjuje i šum koji se javlja u slici. L6.8 Dizajn linearnih filtara

Za dizajn linearnih filtara u MATLAB-u može se koristiti funkcija filter2. Za konvolucione

filtre može se koristiti i funkcija conv2. Takođe, postoji i funkcija fspecial2 koja ima slijedeće opcije: f=fspecial(‘type’,[M N]) gdje type su oblika: 'gaussian', 'sobel', 'prewitt', 'laplacian', 'log', 'average', ili 'unsharp'. Ovaj filtar vraća konvolucionu matricu koja se može naredbom freqz2(f) prikazati u Fourierovom domenu kao na primjer:

f=fspecial(‘sobel’,[3 5]);

freqz2(f)

277

Page 16: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L6.9 Nelinearno filtriranje

Za nelinearno filtriranje može se koristiti pored median filtra i naredba nlfilter. Oblik ove

naredbe je:

pic2=nlfilter(pic1,[5 5],F);

Koja primjenjuje za svakih 5x5 susjeda tekuće tačke funkciju F. Funkcija F može biti ime nekog M-fajla ili linijska komanda kao na primjer: F=inline (‘max(x(:))’);. L6.10 Procesiranje blokova

MATLAB se može koristiti za procesiranje različitih operacija na blokovima. Jedan od načina implementacije je pomoću naredbe blkproc koja ima oblik:

pic2=blkproc(pic1,[8 8],F);

Ovdje je veličina bloka 8x8 dok je funkcija F koja se koristi za procesiranje i koja može biti

naziv M-fajla ili neka inline funkcija:

F=inline(‘uint8(round(mean2(x)*ones(size(x))))’);

L7. Kompresija u JPEG formatu u MATLAB-u L7.1 Snimanje u JPEG formatu MATLAB snima sliku u JPEG format naredbom imwrite(pic1,'fajl','jpg','quality',k) gdje je fajl naziv fajla u koji se snima slika a k je subjektivni faktor kojim se mjeri kvalitet snimljene slike. U narednom primjeru vrši se učitavanje slike i njena kompresija na nivoe kvaliteta od 95% do 5%.

echo on pic1=imread('baboon','jpg');

imshow(pic1) pause

for k=95:-5:5

imwrite(pic1,'baboon1.jpg','jpg','quality',k) pic2=imread('baboon1','jpg');

imshow(pic2)

title(['Slika sa ',num2str(k),'% kvaliteta']) pause end

L7.2 DCTDEMO Dobru simulaciju rada DCT transformacije možete dobiti startovanjem programa dctdemo.

278

Page 17: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L8. Filmovi L8.1 Korišćenje naredbi za kreiranje filma

Naredbom immovie(A,map) vrši se prikazivanje filmova u MATLAB-u. Filmovi se sastoje

od pojedinačnih slika srodne sadržine. Matrica A mora biti dimenzija KxNx1xM gdje su KxN dimenzije slike a M broj frejmova (od kojih se slika sastoji). Na primjer, napravimo film koji se sastoji od deset frejmova u kome će se slika Lena postepeno izbljeđivati:

[A,map]=imread('len256ok.bmp'); A=ind2gray(A,map);

for i=1:10,A1(:,:,1,i)=max(max(A))*(A/max(max(A))).^i;end immovie(gray2ind(A1),gray);

Naredbom montage(A,map) po istim pravilima pripremljena pokretna slika prikazuje se kao

jedna slika koja se sastoji od pojedinačnih frejmova:

montage(gray2ind(A1),gray);

L8.2 Jednostavni program za procjenu brzine tijela na osnovu Fourierove transformacije Ovdje ćemo bez detaljnijih objašnjenja dati program koji se može u rudimentarnoj formi koristiti za procjenu brzine tijela. Zadaćemo bijelu pozadinu sa jednim pravougaonika koji će se kretati po njoj i dva koji će stajati na preciziranom mjestu.

clear [A,map]=imread('len256ok.bmp');

A=ind2gray(A,map); for i=1:10,A1(:,:,1,i)=max(max(A))*(A/max(max(A))).^i;end

immovie(gray2ind(A1),gray);

pause

clear Poz=255*ones(256);

Prav1=205*ones(32,24); Prav2=123*ones(44); Prav3=0*ones(21,37);

pp1=[121 107]; pp2=[47 65]; pp3=[183 64];

SlTr=Poz;

SlTr(pp1(1):pp1(1)+31,pp1(2):pp1(2)+23)=Prav1; SlTr(pp2(1):pp2(1)+43,pp2(2):pp2(2)+43)=Prav2; SlTr(pp3(1):pp3(1)+20,pp3(2):pp3(2)+36)=Prav3;

a=[1.013 0.704];

279

Page 18: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

PrSl=SlTr; Projx=[];Projy=[];

for k=1:1:100 k

SlTr=Poz; SlTr(round(pp1(1)+a(1)*k):round(pp1(1)+a(1)*k+31),round(pp1(2)+a(2)*k):round(pp1(2)+a(

2)*k+23))=Prav1; SlTr(pp2(1):pp2(1)+43,pp2(2):pp2(2)+43)=Prav2; SlTr(pp3(1):pp3(1)+20,pp3(2):pp3(2)+36)=Prav3;

imshow(SlTr/255)

Projx(k,:)=sum(double(SlTr)); Projy(k,:)=sum(double(SlTr'));

end Razx=Projx(2:100,:)-Projx(1:99,:); Razy=Projy(2:100,:)-Projy(1:99,:);

Razx=0.5*Razx+0.5*sign(Razx).*Razx; Razy=0.5*Razy+0.5*sign(Razy).*Razy;

mi=1.; subplot(211),imshow(Razx) subplot(212),imshow(Razy)

pause for ll=1:99

Matrx(ll)=sum(Razx(ll,:).*exp(-j*mi*(-128:127))); Matry(ll)=sum(Razy(ll,:).*exp(-j*mi*(-128:127)));

end subplot(211),plot(-49:49,abs(fftshift(fft(Matrx)))) subplot(212),plot(-49:49,abs(fftshift(fft(Matry))))

L9. Detekcija ivica

L9.1 Sobelov detektor ivica

Za Sobelov detektor ivica koristi se naredba oblika:

ivice=edge(pic,’sobel’,thresh,direction);

gdje je pic slika čije se ivice traže, thresh je prag detekcije koji predstavlja otpornost na šum dok smjer može biti 'horizontal', 'vertical', ili 'both'. Naredni set naredbi određuje ivice za sliku Baboon:

[pic,map]=imread('baboon','jpg');

pic=rgb2gray(pic); figure(1),imshow(pic)

bw1=edge(pic,'sobel','vertical'); figure(2),imshow(bw1)

bw2=edge(pic,'sobel','horizontal'); figure(3),imshow(bw2)

bw3=edge(pic,'sobel','both'); figure(4),imshow(bw3)

280

Page 19: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L9.2 Robertsov detektor

Ovaj detektor je veoma sličan Sobelovom i zadaje se naredbom:

ivice=edge(pic,’roberts’,thresh,direction); gdje je thresh prag detekcije, a direction pravac koji može biti kao kod Sobelovog detektora. L9.3 Log detektor ivica

Log metod je Laplasova metoda detekcije ivica slike filtrirane Gausovim filtrom. Može se dobiti naredbom:

ivice=edge(pic,’log’,sigma);

Vrijednost sig predstavlja standardnu devijaciju Gausovog filtra. Ako se izostavi

podrazumjeva se vrijednost 2.

L9.4 Konture slike

U ovom vježbanju učitaćemo sliku circuit.tif naredbom:

cir=imread(‘circuit’,’tif’);

Naredbom imcontour(cir,N) dobićemo N ekvidistantnih kontura slike. Za N=1 može da posluži i za detekciju kontrasnih ivica.

L10. Segmentacija regiona

L10.1 Segmentacija slike

Segmentacija slike pragom se obavlja naredbom grayslice. Naredba

g4bab=grayslice(bab,4) određuje segmentaciju slike u 4 ekvidistantna regiona. Četiri siva nivoa koji predstavljaju regione slike mogu se prikazati naredbom imshow(double(g4bab)/3). L10.2 Specificiranje regiona od interesa

Region od interesa je dio slike na koji se žele primjeniti specijalne operacije (npr. filtriranje). Ovaj region se definiše kao binarna maska istih dimenzija kao i sama slika. Prvi metod određivanja regiona od interesa je slijedeći. Pretpostavimo da je slika Baboon prikazana u prozoru. Tada se može otkucati naredba: bw=roipoly;. Oblast se zadaje kao poligon klikanjem mišem unutar slike. Zatim se pritisne Enter. Sa imshow(bw) može se prikazati izgled binarne maske.

Drugi metod je selekcija na osnovu boje. Zato se koristi funkcija roicolor. Npr., jedan mogući oblik je bw=roicolor(bab,180,250); gdje su segmentirane samo one vrijednosti koje se nalaze u granicama od 180 do 250.

281

Page 20: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L10.3 Modifikacija regiona od interesa U ovom vježbanju će biti odrađeno filtirtanje sa pokretnom sredinom veličine 9x9 na odabrani region. Ovakav filtar se definiše kao: h=fspecial(‘average’,9);. Filtriranje se obavlja naredbom bab2=mfilter2(h,bab,bw);. L10.4 Popunjavanje regiona od interesa MATLAB može popunjavati region od interesa interpolacijom ivica regiona. Ovo može biti korisno u čišćenju nekih detalja sa slike. Prvo se pozove naredba bab2=roifill(bab) i odredi region koji predstavlja oblast od interesa. Rezultat se može prikazati naredbom imshow(bab2).

L11. Opis oblika L11.1 Izdvajanje karakteristika

MATLAB posjeduje neka sredstva za ekstrahciju karakteristika iz crno-bijele slike. Da bi mogli određivati karakteristike neophodno je pomoću praga odrediti binarnu sliku (crno-bijelu sliku):

bwbab=im2bw(bab,150/255); imshow(bwbab)

L11.2 Oblast slike

Naredbom bwarea može se sračunati površ slike nastale thresholdizacijom:

area=bwarea(bwbab) kojim se vraća površina slike, dok se procentualna veličina bijelih polja prikazuje naredbom:

area/(size(bwbab,1)*size(bwbab,2))

L11.3 Eulerov broj

Eulerov broj je broj objekata minus broj rupa u tim objektima i u MATLAB-u se računa kao

bweuler(bwbab). L11.4 Određivanje obima

Učitajmo sliku SHAPE.JPG i smjestimo je u matricu ex:

ex=imread(‘shape’,'jpg'); imshow(ex)

Za ekstrahciju obima može se koristi naredba ex2=bwperim(ex) koja daje elemenate koji se nalaze na granicama objekta. Ova se operacija takođe može koristiti kao detektor ivica. L11.5 Računanje piramide slike

Za ekstrahciju piramide može se koristiti naredba bab2=pyramid(bwbab). Piramida se

može prikazati naredbom imshow(bab2,[0 1]). Alternativno, piramida se može proračunati i na osnovu dimenzija slike.

282

Page 21: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L11.6 Morfološke operacije

Morfološke operacije se u MATLAB-u mogu realizovati na više načina od kojih je

najjednostavnije koristiti naredbu bwmorph. L11.7 Tanjenje binarne slike

Učitajmo sliku circut.tif. Ovu sliku možemo učitati naredbom:

[pic,map]=imread('circuit','tif');

Iz ove slike možemo odrediti binarnu sliku na osnovu praga:

bwcir=im2bw(cir,0.25); Tanjenje N puta se obavlja naredbom: bwcir2=bwmorph(bwcir,'thin',N).

L11.8 Binarna erozija, dilatacija, otvaranje i zatvaranje

Poslužimo se ponovo slikom BABOON.JPG iz koje binarnu sliku možemo dobiti

naredbama: [pic,map]=imread('baboon','jpg');

pic=rgb2gray(pic); pic1=im2bw(pic,150/255);

Za eroziju služi naredba erode. Prethodno je neophodno definisati strukturni element. Neka

je to u ovom slučaju romb:

SE=[0,1,0;1,1,1;0,1,0]

Erozija se primjenjuje naredbom:

ebwbab=erode(pic1, SE);.

Dilatacija se obavlja sljedećom naredbom:

debwbab=dilate(pic1,SE);

Otvaranje se obavlja kao kombinacija erozije i dilatacije:

debwbab=dilate(erode(pic1,SE),SE);

dok se zatvaranje obavlja na suprotan način:

edbwbab=erode(dilate(pic1,SE),SE); Alternativan način za ove operacije je funkcija bwmorph za koju je strukturni elemenat uvijek kvadrat 3x3 sa svim vrijednostima 1.

ebw=bwmorph(pic1,'erode');

283

Page 22: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

dbw=bwmorph(pic1,'dilate'); obw=bwmorph(pic1,'open'); cbw=bwmorph(pic1,'close');

L11.9 Skeletonizacija

Funkcija bwmorph može se koristiti i za skeletonizaciju objekata. Učitajmo prethodni oblik

SHAPE.JPG, a zatim izvršimo skeletonizaciju:

ex=imread('shape','jpg'); ex2=bwmorph(ex,’skel’,Inf);

L11.10 Top-hat transformacija

Detalji slike se mogu ekstrahovati poznatom top-hat transformacijom koja je izrazito

nelinearan filtar. ex3=bwmorph(ex,’tophat’);

L11.11 Neke druge transformacije Opšti oblik neredbe bwmorph je sljedeći bw2=bwmorph(bw1,’option’) gdje opcije mogu biti: 'bridge', 'clean', 'diag', 'fill', 'hbreak', 'majority', 'remove', 'shrink', 'spur'.

L12. Zaštita digitalnih multimedijalnih informacija

L12.1 Ugradnja Digimarc watermarka

U Photoshop-u 4.0 može se naredbom Filter/Digimarc/Embed Watermark izvršiti ugradnja Digimarc-ovog watermarka. Ovdje se može podesiti i vidljivost watermarka. Ako ste pretplaćeni na ovaj watermark možete izabrati i opciju on-line personalizacije. Čitanje ovakvog watermarka se postiže naredbom Filter/Digimarc/Read Watermark. L12.2 Korišćenje Stirmark programa

Stirmark je jednostavan MS DOS program koji radi u režimu komandne linije. Primjenjuje atake na slike koje su zaštićene watermarkom. Program, detalje o njemu i testiranju možete naći na adresi: http://www.cl.cam.ac.uk/~fapp2 Help ovog programa možete dobiti naredbom: stirmark /? Ovaj program se može primjeniti na JPG slike. Najjednostavniji način primjene je: stirmark -Time imefajla.jpg

284

Page 23: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

kojim se fajl imefajla.jpg podvrgava svim atacima Stirmark sitema. Fajlovi sa atakovanim slikama imaće naziv ime sa nastavkom koji označava primjenjeni atak. Fajlovi nakon ataka zadržavaju JPEG format. Ako se u svim ili gotovo svim testiranjima watermark i dalje može pročitati u slici primjenjeni watermarking sistem je dobar.

L12.3 Maskiranje watermarka Watermark se veoma lako uočava u zonama gdje je slika stacionarna (gdje se osvjetljaj ne mijenja) dok se u okolini ivica i na teksturnim površima može dodati veća količina watermarka. Jedan prosti sistem za maskiranje polazi od mjerenja standardne devijacije u okolini posmatranog piksela (9x9) i normalizacije standardne devijacije što je pokazano u narednom primjeru.

[pic,map]=imread('baboon','jpg'); pic=double(rgb2gray(pic));

[m,n]=size(pic); for k=1:m for l=1:n

A=pic(max(k-4,1):min(k+4,256),max(l-4,1):min(l+4,256)); A=A(:);

R(k,l)=std(A).^2; end end

R=R/max(max(R)); imshow(1-R),colormap(gray)

L12.4. Prosta watermarking šema

Demonstrirajmo jednu prostu watermarking šemu. Dodajmo slici watermark u prostornom domenu kao pseudoslučajni šum:

[pic,map]=imread('baboon','jpg'); pic=double(rgb2gray(pic));

wat=randn(size(pic)); pic1=pic+0.05*wat;

Watermark detektujemo koreliranjem sa odgovarajućim ključem:

sum(sum(pic1.*wat))

Ako pokušamo detekciju sa nekim drugim ključem dobićemo mnogo manju detekcionu veličinu (odziv detektora):

wat1=randn(size(pic)); sum(sum(pic1.*wat1))

Na slijedeće tri slike prikazana je originalna slika, slika sa dodatim watermarkom i watermark (koji je zbog vidljivosti uvećan 25 puta).

figure(1),imshow(uint8(pic)) figure(2),imshow(uint8(pic1))

figure(3),imshow(uint8(25*(pic-pic1)))

285

Page 24: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

L12.5 SNR i PSNR odnos Watermark degradira vizuelni kvalitet slike. Kao mjera koliko watermark kvari vizuelno sliku koriste se SNR i PSNR odnos. Preporuka je da SNR bude veći od 35dB (minimalno dozvoljeno je 30dB), dok bi PSNR trebao biti veći od 40dB (minimalno dozvoljeno je 35dB). Naravno manji watermark (veći SNR i PSNR odnosi) se teže detektuje. Ovdje je dato kako se računa SNR i PSNR za jednu veoma prostu šemu:

for al=0.05:0.05:3 pic1=pic+al*wat;

SNR=10*log10(sum(sum(pic.^2))/sum(sum((al*wat).^2))) PSNR=10*log10(m*n*max(max(pic.^2))/sum(sum((al*wat).^2)))

end

286

Page 25: Matlab & Image Processing Toolbox

Igor Đurović: Digitalna obrada slike MATLAB & IMAGE PROCESSING TOOLBOX

16/195

287