You are on page 1of 13

Raunarske vebe iz predmeta Digitalna obrada slike

i predmeta Osnovi mainske vizije


Osnovne komande za manipulaciju slikom i promenljivama
Uitavanje slike
X=imread('Z:\DIP\Slike\Lena.bmp');
X=double(X);
(omoguava floating point operacije na slici)
[M,N,K]=size(X)
(dimenzije slike K=1 kod sive, a 3 kod slike u boji)
L=256;
(broj nijansi u slici - 28)
Snimanje slike
X=uint8(X);
imwrite(X,'d:\DIP\lena.tif')
Prikaz slike
imshow(X,[0,L-1])
imshow(X,[])
imshow(X,[],notruesize)
Brisanje promenljivih
clear
clear X Y

(brisanje svih promenljivih)


(brisanje promenljivih X i Y)

Otvaranje i zatvaranje prozora za prikaz slike


figure
close all
Snimanje i uitavanje radnog okruenja i promenljivih
save radni
(snima ceo radni prostor u fajl radni.mat)
save promenljive X Y
(snima promenljive X i Y u fajl promenljiva.mat)
load radni
(uitava sadraj fajla radni.mat u radni prostor - Workspace)
Minimum i maximum i srednja vrednost slike
min(min(X))
max(max(X))
mean2(X)
Dodavanjem znaka ; na kraju komande izbegava se ispis na ekranu (npr. velikih matirca)!!!

2. Poglavlje
Decimacija (downsampling) sa korakom a (a=2n, n=2,4,6)
for i=1:M/a
for j=1:N/a
Xdown(i,j)=X(a*i,a*j);
end
end
Interpolacija (upsampling) replikacijom sa korakom a (a=2n, n=2,4,6)
for i=1:M
for j=1:N
Xup(i,j)=Xdown(ceil(i/a),ceil(j/a));
end
end
Kvantizacija amplitude sa korakom a (a=2n, n=2,4,6,8)
Y=a*round(X/a);
Odreivanje rastojanja izmeu piskela
Euklidsko rastojanje
for i=1:25
for j=1:25
De(i,j)=sqrt((i-13)^2+(j-13)^2);
end
end
figure
imshow(De,[],'notruesize')
D4 rastojanje
for i=1:25
for j=1:25
D4(i,j)=abs(i-13)+abs(j-13);
end
end
figure
imshow(D4,[],'notruesize')
D8 rastojanje
for i=1:25

for j=1:25
D8(i,j)=max(abs(i-13),abs(j-13));
end
end
figure
imshow(D8,[],'notruesize')

3. Poglavlje
Negativ
Y=L-1-X;
imshow(Y,[0,L-1])
Log-transformacija
Y=log10(1+X);
Y=round((L-1)*Y/max(max(Y)));
imshow(Y,[0,L-1])
Gama korekcija
Y=X.^5;
Y=round((L-1)*Y/max(max(Y)));
imshow(Y,[0,L-1])
Y=X.^0.2;
Y=round((L-1)*Y/max(max(Y)));
imshow(Y,[0,L-1])
Naglaavanje amplitudskog opsega (deo-po-deo linearne trans.)
r=1:L;
T(1:100)=0.5*r(1:100);
T(101:150)=3*r(101:150)-250;
T(151:L)=0.53*r(151:L)+120;
figure
plot(T)
Y=round(T(X+1))-1;
imshow(Y,[0,L-1])
Dekompozicija na bitske ravni
TEMP=X;
for i=1:8
Y(:,:,i)=TEMP>2^(8-i);
TEMP=TEMP-(TEMP>2^(8-i))*2^(8-i);
end
clear TEMP
imshow(Y(:,:,1),[0,1])

imshow(Y(:,:,2),[0,1])
imshow(Y(:,:,4),[0,1])
imshow(Y(:,:,8),[0,1])
Ekvalizacija histograma
HIST_X=zeros(1,L);
for i=1:M
for j=1:N
HIST_X(X(i,j)+1)=HIST_X(X(i,j)+1)+1;
end
end
bar(HIST_X)
for i=1:L
TRANS(i)=sum(HIST_X (1:i))/(M*N);
end
plot(TRANS)
Y=round((L-1)*TRANS(X+1));
imshow(X,[])
figure
imshow(Y,[])
HIST_X=zeros(1,L);
HIST_Y=zeros(1,L);
for i=1:M
for j=1:N
HIST_Y(Y(i,j)+1)=HIST_Y(Y(i,j)+1)+1;
end
end
bar(HIST_Y)
Logike operacije-- maskiranje slike
(neophodno je prethodno formirati 3D matricu sa bitskim ravnima slike)
Generisanje maske
MASK=zeros([M,N]);
MASK(301:400,301:400)=ones([100,100]);
AND sa maskom po bitskim ravnima slike
Z=zeros(size(X));
for i=1:8
TEMP=double(2^(8-i)*(Y(:,:,i)&MASK));
Z=Z+TEMP;
end
clear TEMP

imshow(Z,[])
OR sa invertovanom maskom po bitskim ravnima slike
Z=zeros(size(X));
for i=1:8
TEMP=double(2^(8-i)*(Y(:,:,i)|(~MASK)));
Z=Z+TEMP;
end
clear TEMP
imshow(Z,[])
Oduzimanje slika uoavanje razlika
Y=log10(1+X);
Y=round((L-1)*Y/max(max(Y)));
Z=X-Y;
Z1=round((Z+(L-1))/2);

(poreenje sa slikom nakon log transformacije)

(transformacija u opseg od 0 do L-1- 1. metoda)

TEMP=Z-min(min(Z));
(transformacija u opseg od 0 do L-1- 2. metoda)
Z2=round((L-1)*TEMP/max(max(TEMP)));
imshow(Z2,[0,L-1])
figure
imshow(Z1,[0,L-1])
Sabiranje slika
(redukcija uma sabiranjem 10 istih slika s razliitim signalima uma iste raspodele)
for i=1:10
Y(:,:,i)=X+20*randn([M,N]);
end
Z=sum(Y(:,:,1:5),3);
imshow(Z,[])
figure
Z=sum(Y(:,:,1:10),3);
imshow(Z,[])
Ublaavanje slike
(Aritmetiki usrednjiva sa prozorom 7x7)
A=ones([7,7]);
Y=conv2(X, A)/49;
Y=Y(4:515,4:515);
imshow(Y,[0,255])

Izotravanje slike Laplasijan u prostornom domenu


Izdvajanje VF sadraja
A=[0,1,0;1,-4,1;0,1,0]
Y=conv2(X, A);
Y=Y(2:513,2:513);
imshow(Y,[])
B=[1,1,1;1,-8,1;1,1,1]
Y=conv2(X, B);
Y=Y(2:513,2:513);
figure
imshow(Y,[])
Izotravanje slike u jednom prolazu
A=[0,-1,0;-1,5,-1;0,-1,0]
Y=conv2(X, A);
Y=Y(2:513,2:513);
imshow(Y,[0,255])
B=[-1,-1,-1;-1,9,-1;-1,-1,-1]
Y=conv2(X, B);
Y=Y(2:513,2:513);
figure
imshow(Y,[0,255])
Gradijentni operatori
Robertsov gradijent
R1=[-1,0;0,1]
R2=[0,-1;1,0]
Y=abs(conv2(X, R1))+abs(conv2(X, R2));
Y=Y(1:513,1:513);
imshow(Y,[])
Sobelov gradijent
S1=[-1,-2,-1;0,0,0;1,2,1]
S2=[-1,0,1;-2,0,2;-1,0,1]
Y=abs(conv2(X, S1))+abs(conv2(X, S2));
Y=Y(2:513,2:513);
figure
imshow(Y,[])

4. Poglavlje
Dizajn filtara u frekvencijskom domenu
Rastojanje D od centra slike dimenzija MxN
for i=1:M
for j=1:N
D(i,j)=sqrt((i-M/2-1)^2+(j-N/2-1)^2);
end
end
Dizajn idealnog NF filtra
F=D<D0;
Dizajn Batervortovog NF filtra n-tog reda
F=1./(1+(D/D0).^(2*n));
Dizajn Gausovog NF filtra
F=exp(-(D.^2)/D0^2);
Dizajn VF filtra
F1=1-F;
figure
mesh(F)

(3D prikaz karakteristike filtra)

Furijeova transformacija
U=fft2(IMG);
imshow(log10(abs(U)),[])
Centriranje spektra
for i=1:M
for j=1:N
I(i,j)=(-1)^(i+j);
end
end
U=fft2(IMG.*I);
imshow(log10(abs(U)),[])
Filtriranje
Uf=U.*F;

Inverzna Furijeova transformacija


Y=ifft2(Uf).*I;
imshow(Y,[])
Laplasijan u frekvencijskom domenu
for i=1:M
for j=1:N
H(i,j)=-((i-M/2+1)^2+(j-N/2+1)^2);
end
end
figure
mesh(H)
Uf=U.*H;
Y=ifft2(Uf).*I;
imshow(Y,[])
L=ifft2(H.*I).*I;
imshow(L(250:264, 250:264),[],notruesize)
L(250:264, 250:264)

5. Poglavlje
Raunanje odnosa signal um
SNR=10*log10((L-1)^2/mean2((ORG-RES).^2));
Filtriranje Gausovog uma
NOIMG=X+10*randn([M,N]);
imshow(NOIMG,[],'notruesize')
Q=conv2(NOIMG,[1,1,1;1,1,1;1,1,1])/9;
Q=Q(2:513,2:513);
figure
imshow(Q,[],'notruesize')
Q=conv2(NOIMG,[1,2,1;2,4,2;1,2,1])/16;
Q=Q(2:513,2:513);
figure
imshow(Q,[],'notruesize')

Filtriranje impulsnog uma


Uitavanje slike sa umom
X=imread('d:\DIP\lenasnp.tif');
X=double(X);
imshow(X,[])
Median filtar
A=ordfilt2(X,5,ones([3,3]));
Min filtar
B=ordfilt2(X,1,ones([3,3]));
Max filtar
C=ordfilt2(X,9,ones([3,3]));
Razmazivanje slike usled pokreta (motion blur)
U=fft2(IMG.*I);
for k=1:M
for j=1:N
if (0.1*(k-M/2+1)+0.1*(j-N/2+1))==0
H(k,j)=1;
else
H(k,j)=sin(pi*(0.1*(k-M/2+1)+0.1*(j-N/2+1))).*exp(-i*pi*(0.1*(kM/2+1)+0.1*(j-N/2+1)))./(pi*(0.1*(k-M/2+1)+0.1*(j-N/2+1)));
end
end
end
Uf=U.*H;
Y=ifft2(Uf).*I;
Wienerov filtar (primer sa degradacijom nastalom Batervortovim filtrom drugog reda sa D0=50
i Gausovim umom varijanse 100)
Degradacija slike
U=fft2(X.*I);
F=1./(1+(D/50).^4);
Uf=U.*F;
Y=ifft2(Uf).*I;
NOIMG=Y+10*randn([M,N]);
Inverzno filtriranje
Un=fft2(NOIMG.*I);
Uf=Un./F;
Yi=ifft2(Uf).*I;

Wienerov filtar
W=((abs(F).^2)./(abs(F).^2+1))./F;
Uf=Un.*W;
Yw=ifft2(Uf).*I;

6. Poglavlje

X=imread('d:\DIP\ Uitavanje slike u boji lenacolor.tif');


[M,N,K]=size(X)
X=double(X);
L=256
imshow(X,[])
Prikaz R G B komponenata
figure
imshow(X(:,:,1),[])
figure
imshow(X(:,:,2),[])
figure
imshow(X(:,:,3),[])
Konverzija u HSI (hsv) i prikaz komponenata
Y=rgb2hsv(X);
figure
imshow(Y(:,:,1),[])
figure
imshow(Y(:,:,2),[])
figure
imshow(Y(:,:,3),[])
Konverzija HSI u RGB
Z=hsv2rgb(Y);
Primer ukidanja crvene komponente u slici preko HSI sistema
X=imread('Z:\DIP\Slike\Cupamerica.tif');
Y=rgb2hsv(X);
imshow(X,[])
Y(:,:,1)=(Y(:,:,1)<0.8&Y(:,:,1)>0.2).*Y(:,:,1)+0.5*(1-(Y(:,:,1)<0.8&Y(:,:,1)>0.2));
Z=hsv2rgb(Y);
figure
imshow(Z,[])

7. Poglavlje
Kompresija slike maskiranjem DCT podopsega sa maskom A
A=[1,1,1,0,0,0,0,0;
1,1,1,0,0,0,0,0;
1,1,1,0,0,0,0,0;
0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0]
for i=1:64
for j=1:64
D(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=A.*dct2(X(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
Y(8*(i-1)+1:8*i,8*(j-1)+1:8*j)=idct2(D(8*(i-1)+1:8*i,8*(j-1)+1:8*j));
end
end
imshow(IMG,[0,L-1],'notruesize')
figure
imshow(Y,[0,L-1],'notruesize')
SNR=10*log10((L-1)^2/mean2((X-Y).^2))
Zonsko kodovanje sa DCT 4x4 transformacijom
k=1
for j=1:128
for i=1:128
D3_4x4(:,:,k)=dct2(X(4*(i-1)+1:4*i,4*(j-1)+1:4*j));
k=k+1;
end
end
V=round(var(D3_4x4,0,3));
A=[1,1,1,0;1,1,0,0;0,0,0,0;0,0,0,0]
Amin=min(D3_4x4,[],3)
Amax=max(D3_4x4,[],3)
Q=[8,4,2,1;4,2,1,0;2,1,0,0;1,0,0,0]
Qstep=ceil((Amax-Amin)./(2.^Q))

for i=1:128
for j=1:128
D(4*(i-1)+1:4*i,4*(j-1)+1:4*j)=A.*Qstep.*round(dct2(X(4*(i-1)+1:4*i,4*(j1)+1:4*j))./Qstep);
Y(4*(i-1)+1:4*i,4*(j-1)+1:4*j)=idct2(D(4*(i-1)+1:4*i,4*(j-1)+1:4*j));
end
end

8. i 9. Poglavlje
Uitavanje slike elementi.bmpu boji
original=imread('elementi.bmp');
figure,imshow(original)
elementi=double(original);
Segmentacija slike u HSV prostoru
Konverzija iz RGB u HSV
HSV=rgb2hsv(elementi);
Izdvajanje obojenih elemenata pomou saturacije
C=HSV(:,:,2)>0.3;
figure,imshow(C)
Izdvajanje utih elemenata (ija je Hue vrednost izmeu 0.07 i 0.13)
Y=HSV(:,:,2)>0.3 & HSV(:,:,1)<0.13 & HSV(:,:,1)>0.07;
figure,imshow(Y)
Ovo se moze raditi na drugi nacin u RGB prostoru
Izdvajanje obojenih elemenata (svi osim sivih)
elemmean=(elementi(:,:,1) + elementi(:,:,2) + elementi(:,:,3))/3;
dev=(abs(elementi(:,:,1)-elemmean) + abs(elementi(:,:,2)-elemmean) + abs(elementi(:,:,3)elemmean))/3;
CLR=dev>20;
SE = strel('disk',1);
CLR=imclose(CLR,SE);
CLR=imopen(CLR,SE);
figure,imshow(CLR)
Izdvajanje samo crvenih elemenata
CRV= elementi(:,:,1)>75 & elementi(:,:,2)<90 & CLR;
CRV=imclose(CRV,SE);
CRV=imopen(CRV,SE);
figure,imshow(CRV)

Izdvajanje i labeliranje povezanih komponenti iz binarne slike


Glavni alat je funkcija bwlabel koja u binarnoj slici pronalazi (redno numerie) povezane komponente
K=bwlabel(CLR);
figure,imshow(K,[])
L=bwlabel(CRV);
figure,imshow(L,[])
L1=L==1;
figure,imshow(L1,[])
L2=L==2;
figure,imshow(L2,[])
Odredjivanje raznih osobina povezanih komponenata u binarnoj slici korienjem regionprops
Rp=regionprops(L,'all');
Izdvajanje kuglinih krajeva crvenih elemenata
SE2 = strel('disk',18);
KUG=imopen(CRV,SE2);
SE3 = strel('disk',2);
KUG=imdilate(KUG,SE3) & CRV;
figure,imshow(KUG)
Izdvajanje viljuskastih krajeva crvenih elemenata
SE4 = strel('disk',12);
CRV4=imopen(CRV,SE4);
VILJ= xor(CRV,CRV4);
VILJ=imopen(VILJ,SE3);
figure,imshow(VILJ)

You might also like