Professional Documents
Culture Documents
Racunarske Vezbe
Racunarske Vezbe
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);
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])
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)
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;
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')
Wienerov filtar
W=((abs(F).^2)./(abs(F).^2+1))./F;
Uf=Un.*W;
Yw=ifft2(Uf).*I;
6. Poglavlje
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)