Termovizijski sistemi MS1TS Vežbe 03 primer 1 Odredjivanje konvolucije numeričkom integracijom. x=(-2:0.01:2)'; f=triangle_function(x); y=zeros(length(x),1); for brojac=1:length(x) xt=x(brojac); r_f=@(u)triangle_function(u).*triangle_function(u-xt); y(brojac)=quad(r_f,-2,2); plot(x,f,x,y),xlabel('\itx'),ylabel('{\itf}({\itx}), {\itf}({\itx})*{\itf}({\itx})'), ylim([0 1.1*max(max([abs(f) abs(y)]))]), legend('{\itf}({\itx})=tri({\itx})','{\itf}({\itx})*{\itf}({\itx})'); primer 2 Odredjivanje konvolucije numeričkom integracijom. x=(-2:0.01:2)'; f=triangle_function(x); g=rectangle_function(x); y=zeros(length(x),1); for brojac=1:length(x) xt=x(brojac); r_f=@(u)rectangle_function(u).*triangle_function(u-xt); y(brojac)=quad(r_f,-2,2); plot(x,f,x,g,x,y),xlabel('\itx'), ylabel('{\itf}({\itx}), {\itg}({\itx}), {\itf}({\itx})*{\itg}({\itx})'), ylim([0 1.1*max(max([abs(f) abs(g) abs(y)]))]), legend('{\itf}({\itx})=tri({\itx})','{\itg}({\itx})=rec({\itx})','{\itf}({\itx})*{\itg}({\itx})');
primer 3 Odredjivanje konvolucije numeričkom integracijom i preko conv funkcije. x=(-2:0.01:2)'; f=triangle_function(x); g=gaus_function(x-.2); y=zeros(length(x),1); for brojac=1:length(x) xt=x(brojac); r_f=@(u)gaus_function(u-.2).*triangle_function(u-xt); y(brojac)=quad(r_f,-5,5); h=0.01*conv(f,fliplr(g),'same'); plot(x,f,x,g,x,y,x,h,':'),xlabel('\itx'), ylabel('{\itf}({\itx}), {\itg}({\itx}), {\itf}({\itx})*{\itg}({\itx})'), ylim([0 1.1*max(max([abs(f) abs(g) abs(y) abs(h)]))]), legend('{\itf}({\itx})=tri({\itx})','{\itg}({\itx})=gaus({\itx}- 0.2)','{\itf}({\itx})*{\itg}({\itx}) - NI','{\itf}({\itx})*{\itg}({\itx}) - conv f-ja');
primer 4 Odredjivanje konvolucije numeričkom integracijom - komutativnost. x=(-3:0.001:3)'; f=triangle_function(x); g=gaus_function(x-.5); y=zeros(length(x),1); z=zeros(length(x),1); for brojac=1:length(x) xt=x(brojac); r_f=@(u)gaus_function(u-.5).*triangle_function(u-xt); y(brojac)=quad(r_f,-5,5); for brojac=1:length(x) xt=x(brojac); r_f=@(u)gaus_function(u-.5+xt).*triangle_function(u); z(brojac)=quad(r_f,-5,5); plot(x,f,x,g,x,y,x,z,':'),xlabel('\itx'),ylabel('{\itf}({\itx}), {\itg}({\itx}), {\itf}({\itx})*{\itg}({\itx}), {\itf}({\itg})*{\itf}({\itx})'), ylim([0 1.1*max(max([abs(f) abs(g) abs(y) abs(z)]))]), legend('{\itf}({\itx})=tri({\itx})','{\itg}({\itx})=gaus({\itx}- 0.5)','{\itf}({\itx})*{\itg}({\itx})','{\itg}({\itx})*{\itf}({\itx})');
primer 5 Odredjivanje konvolucije dvodimenzionalne funkcije koja "razdvaja" promenljive. g g g x, y = g x g y ( ) ( ) ( ) ( ) x, y = ( f ( x) h ( x) )( f ( y) h ( y) ) ( x, y) = f ( x, y) h( x, y) = f ( u) f ( t) h ( x u) h ( y t) = f ( u) h ( x u) du f ( t) h ( y t) dt = ( f ( x) h ( x) )( f ( y) h ( y) ) clc dx=0.05; x=(-5:dx:5)'; dy=0.05; y=(-2:dy:2)'; [,]=meshgrid(x,y); f=rectangle_function().*rectangle_function(); h=rectangle_function(/2).*rectangle_function(/2); g1=dx*conv(rectangle_function(x),rectangle_function(x/2),'same'); g2=dy.*conv(rectangle_function(y),rectangle_function(y/2),'same'); for brx=1:length(x) for bry=1:length(y) g(bry,brx)=g1(brx)*g2(bry); figure,subplot(3,2,1),mesh(,,f),xlabel('\itx'),ylabel('\ity'),zlabel('{\itf}({\itx},{\ity})'); subplot(3,2,2),mesh(,,f),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx})*rect({\ity})'); subplot(3,2,3),mesh(,,h),xlabel('\itx'),ylabel('\ity'),zlabel('{\ith}({\itx},{\ity})'); subplot(3,2,4),mesh(,,h),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx}/2)*rect({\ity}/2)'); subplot(3,2,5),mesh(,,g),xlabel('\itx'),ylabel('\ity'),zlabel('{\itg}({\itx},{\ity})'); subplot(3,2,6),mesh(,,g),xlabel('\itx'),ylabel('\ity'),view([0 90]); title('{\itg}({\itx},{\ity})={\itf}({\itx},{\ity})*{\ith}({\itx},{\ity})'); dudt
primer 6 Odredjivanje konvolucije dvodimenzionalne funkcije koja "razdvaja" promenljive, MATLAB funkcija conv2. dx=0.05; x=(-5:dx:5)'; dy=0.05; y=(-2:dy:2)'; [,]=meshgrid(x,y); f=rectangle_function().*rectangle_function(); h=rectangle_function(/2).*rectangle_function(/2); g=dx*dy*conv2(f,h,'same'); figure,subplot(3,2,1),mesh(,,f),xlabel('\itx'),ylabel('\ity'),zlabel('{\itf}({\itx},{\ity})'); subplot(3,2,2),mesh(,,f),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx})*rect({\ity})'); subplot(3,2,3),mesh(,,h),xlabel('\itx'),ylabel('\ity'),zlabel('{\ith}({\itx},{\ity})'); subplot(3,2,4),mesh(,,h),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx}/2)*rect({\ity}/2)'); subplot(3,2,5),mesh(,,g),xlabel('\itx'),ylabel('\ity'),zlabel('{\itg}({\itx},{\ity})'); subplot(3,2,6),mesh(,,g),xlabel('\itx'),ylabel('\ity'),view([0 90]); title('{\itg}({\itx},{\ity})={\itf}({\itx},{\ity})*{\ith}({\itx},{\ity})');
primer 7 Odredjivanje konvolucije dvodimenzionalne funkcije koja "razdvaja" promenljive. dx=0.05; x=(-5:dx:5)'; dy=0.05; y=(-5:dy:5)'; [,]=meshgrid(x,y); f=rectangle_function().*rectangle_function(); h=gaus_function(-2).*gaus_function(-2); g1=dx*conv(rectangle_function(x),gaus_function(x-2),'same'); g2=dy.*conv(rectangle_function(y),gaus_function(y-2),'same'); for brx=1:length(x) for bry=1:length(y) g(bry,brx)=g1(brx)*g2(bry); figure,subplot(3,2,1),mesh(,,f),xlabel('\itx'),ylabel('\ity'),zlabel('{\itf}({\itx},{\ity})'); subplot(3,2,2),mesh(,,f),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx})*rect({\ity})'); subplot(3,2,3),mesh(,,h),xlabel('\itx'),ylabel('\ity'),zlabel('{\ith}({\itx},{\ity})'); subplot(3,2,4),mesh(,,h),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=gaus({\itx}-2)*gaus({\ity}-2)'); subplot(3,2,5),mesh(,,g),xlabel('\itx'),ylabel('\ity'),zlabel('{\itg}({\itx},{\ity})'); subplot(3,2,6),mesh(,,g),xlabel('\itx'),ylabel('\ity'),view([0 90]); title('{\itg}({\itx},{\ity})={\itf}({\itx},{\ity})*{\ith}({\itx},{\ity})');
primer 8 Odredjivanje konvolucije dvodimenzionalne funkcije koja "razdvaja" promenljive, MATLAB funkcija conv2. dx=0.05; x=(-5:dx:5)'; dy=0.05; y=(-5:dy:5)'; [,]=meshgrid(x,y); f=rectangle_function().*rectangle_function(); h=gaus_function(-2).*gaus_function(-2); g=dx*dy*conv2(f,h,'same'); figure,subplot(3,2,1),mesh(,,f),xlabel('\itx'),ylabel('\ity'),zlabel('{\itf}({\itx},{\ity})'); subplot(3,2,2),mesh(,,f),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=rect({\itx})*rect({\ity})'); subplot(3,2,3),mesh(,,h),xlabel('\itx'),ylabel('\ity'),zlabel('{\ith}({\itx},{\ity})'); subplot(3,2,4),mesh(,,h),xlabel('\itx'),ylabel('\ity'),view([0 90]), title('{\itf}({\itx},{\ity})=gaus({\itx}-2)*gaus({\ity}-2)'); subplot(3,2,5),mesh(,,g),xlabel('\itx'),ylabel('\ity'),zlabel('{\itg}({\itx},{\ity})'); subplot(3,2,6),mesh(,,g),xlabel('\itx'),ylabel('\ity'),view([0 90]); title('{\itg}({\itx},{\ity})={\itf}({\itx},{\ity})*{\ith}({\itx},{\ity})');
primer 9 Dvodimenzionalna DFT. F f j2π [ xξ + yη ] ( ξ, η) f ( x, y) e = dxdy j2π [ xξ + yη ] ( x, y) F( ξ, η) e = dξdη Za funkcije koje razdvajaju promenljive: F ξ, η = F f x F f y ( ) { ( )} { ( )} N=128; M=256; slika1=zeros(m,n); slika2=zeros(m,n); for n=1:n for m=1:m slika1(m,n)=cos(2*pi*m/16); slika2(m,n)=cos(2*pi*n/4); figure,subplot(2,2,1),mesh(slika1),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,2),mesh(slika1),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,3),mesh(slika2),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]),ylim([0 M]), title('slika 2'); subplot(2,2,4),mesh(slika2),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 2'); colormap gray figure,subplot(2,2,1),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))), subplot(2,2,2),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))),view([0 90]), subplot(2,2,3),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))), subplot(2,2,4),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))),view([0 90]), colormap jet
primer 10 Dvodimenzionalna DFT. N=128; M=256; slika1=zeros(m,n); slika2=zeros(m,n); for n=1:n for m=1:m slika1(m,n)=cos(2*pi*m/32)*cos(2*pi*n/8); slika2(m,n)=cos(2*pi*m/4)*cos(2*pi*n/64); figure,subplot(2,2,1),mesh(slika1),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,2),mesh(slika1),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,3),mesh(slika2),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]),ylim([0 M]), title('slika 2'); subplot(2,2,4),mesh(slika2),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 2'); colormap gray figure,subplot(2,2,1),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))), subplot(2,2,2),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))),view([0 90]), subplot(2,2,3),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))), subplot(2,2,4),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))),view([0 90]), colormap jet
primer 11 Dvodimenzionalna DFT. N=256; M=256; slika1=zeros(m,n); slika2=zeros(m,n); for n=1:n for m=1:m slika1(m,n)=cos(2*pi*(m+n)/16); slika2(m,n)=cos(2*pi*(m+n)/16/sqrt(2)); figure,subplot(2,2,1),mesh(slika1),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,2),mesh(slika1),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 1'); subplot(2,2,3),mesh(slika2),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]),ylim([0 M]), title('slika 2'); subplot(2,2,4),mesh(slika2),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 N]), ylim([0 M]),title('slika 2'); colormap gray figure,subplot(2,2,1),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))), subplot(2,2,2),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))),view([0 90]), subplot(2,2,3),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))), subplot(2,2,4),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))),view([0 90]), colormap jet
primer 12 Dvodimenzionalna DFT. N=256; M=256; slika1=zeros(m,n); slika2=zeros(m,n); for n=1:n for m=1:m slika1(m,n)=cos(2*pi*(m+n)/16); slika2(m,n)=cos(2*pi*(m+n)/16/sqrt(2)); figure,subplot(2,2,1),mesh([slika1 slika1; slika1 slika1]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 1'); subplot(2,2,2),mesh([slika1 slika1; slika1 slika1]),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 1'); subplot(2,2,3),mesh([slika2 slika2; slika2 slika2]),xlabel('{\itn}'),ylabel('{\itm}'), xlim([0 2*N]),ylim([0 2*M]),title('slika 2'); subplot(2,2,4),mesh([slika2 slika2; slika2 slika2]), view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 2'); colormap gray figure,subplot(2,2,1),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))), subplot(2,2,2),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))),view([0 90]), subplot(2,2,3),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))), subplot(2,2,4),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))),view([0 90]), colormap jet
primer 13 Dvodimenzionalna DFT. N=256; M=256; slika1=zeros(m,n); slika2=zeros(m,n); for n=1:n for m=1:m slika1(m,n)=cos(2*pi*m/16)*cos(2*pi*n/5/pi); slika2(m,n)=cos(2*pi*(m+n)/16/sqrt(2)); figure,subplot(2,2,1),mesh([slika1 slika1; slika1 slika1]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 1'); subplot(2,2,2),mesh([slika1 slika1; slika1 slika1]),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 1'); subplot(2,2,3),mesh([slika2 slika2; slika2 slika2]),xlabel('{\itn}'),ylabel('{\itm}'), xlim([0 2*N]),ylim([0 2*M]),title('slika 2'); subplot(2,2,4),mesh([slika2 slika2; slika2 slika2]),view([0 90]),xlabel('{\itn}'),ylabel('{\itm}'),xlim([0 2*N]),ylim([0 2*M]),title('slika 2'); colormap gray figure,subplot(2,2,1),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))), subplot(2,2,2),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika1)))),view([0 90]), subplot(2,2,3),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))), subplot(2,2,4),mesh((-n/2:n/2-1),(-m/2:m/2-1),fftshift(abs(fft2(slika2)))),view([0 90]), colormap jet
primer 14 Dvodimenzionalna convolucija - odziv linearnog shift invarijantnog sistema. dx=0.05; dy=0.05; x=[-5:dx:5]; y=[-2:dy:2]; a=1; b=10^(-5); [,]=meshgrid(x,y); delta_2_f=(exp(-pi*((-a)/b).^2)/abs(b)+exp(-pi*((+a)/b).^2)/abs(b)); delta_f=exp(-pi*(()/b).^2)/abs(b); f=delta_2_f.*delta_f; % pobuda h=somb_function(x,y,0); % impulsni odziv g=somb_function(x+1,y,0)+somb_function(x-1,y,0); % teorijski odredjen odziv g1=dx*dx*conv2(f,h,'same'); % konvolucija pobude i impulsnog odziva figure,subplot(3,2,1),mesh(,,f),xlabel('{\itx}'),ylabel('{\ity}'), zlabel('{\itf}({\itx},{\ity})'),title('pobuda'); subplot(3,2,2),mesh(,,f), view([0 90]),xlabel('{\itx}'),ylabel('{\ity}'),zlabel('{\itf}({\itx},{\ity})'),title('Pobuda'); subplot(3,2,3),mesh(,,h),xlabel('{\itx}'),ylabel('{\ity}'),zlabel('{\itf}({\itx},{\ity})'), title('impulsni odziv'); subplot(3,2,4),mesh(,,h),view([0 90]),xlabel('{\itx}'),ylabel('{\ity}'),zlabel('{\itf}({\itx},{\ity})'),title('Impulsni odziv'); subplot(3,2,5),mesh(,,g1),xlabel('{\itx}'),ylabel('{\ity}'),zlabel('{\itg}({\itx},{\ity})'), title('odziv sistema na zadatu pobudu'); subplot(3,2,6),mesh(,,g1),view([0 90]),xlabel('{\itx}'),ylabel('{\ity}'),zlabel('{\itg}({\itx},{\ity})'), title('odziv sistema na zadatu pobudu');