co byste měli umět po dnešní lekci: používat funkce pro výpočet FFT (Fast Fourier Transformation) spočítat konvoluci/dekonvoluci pomocí FFT použít FFT při výpočtu určitých integrálů vědět co je nízko\vysoko frekvenční (Wienerův) filtr vědět, co je fázová korelace a k čemu je dobrá
Fouriérovy řady aproximace periodických funkcí pomocí F.řad
Fouriérova transformace (f(t) definována na intervalu < T/2; T/2>) základní, fundamentální, frekvence
Fouriérova analýza diskrétních dat mějme n hodnot nějaké funkce f(t), měřené v ekvidistatních časových intervalech ti, DFT: Fk reprezentují koeficienty F. řady pro funkci f(t) pro frekvence menší než Nyquistova frekvence
Příklad: Analýza časové série počtu slunečních skvrn na povrchu Slunce (Wolfovo číslo) octave:53>s=load('sunspot.dat'); octave:54> cas=s(:,1); octave:55> Wolf=s(:,2); octave:56> FTWolf=fft(Wolf); octave:57> FTWolf(1)=[]; % prvni cislo je suma hodnot v poli octave:58> n=length(ftwolf); octave:59> FTWolf2=abs(FTWolf(1:floor(n/2))).^2; octave:60> nyquist=1/2; octave:61> frekv=(1:n/2)/(n/2)*nyquist; octave:62> out=[frekv' FTWolf2]; octave:63> save ascii 'periodogram.dat' out octave:64> perioda=1./frekv; octave:65> out=[perioda' FTWolf2]; octave:67> save ascii 'cyklus.dat' out octave:68> m=find(ftwolf2==max(ftwolf2)); octave:69> perioda(m) ans = 11.038
funkce fft a ifft ukázka výpočtu FT Gaussovy funkce x=linspace( 10,10,256); y=5*exp( x.^2/2/4); FTy=fft(y); plot(real(fty)) FTy=fft(fftshift(y)); plot(real(fty)) N=length(x); n=[ N/2:N/2 1]; Delta=x(2) x(1); om=2*pi*n/n/delta; plot(om,fftshift(fty)); po volání fft (ifft) jsou hodnoty v poli o délce N=2n řazeny takto: 1 j N/2 hodnoty pro nezáporné frekvence N/2+1 j N hodnoty pro záporné frekvence fftshift
konvoluce a dekonvoluce pomocí FT M, I a R jsou Fouriérovské obrazy m, i a r
konvoluce a dekonvoluce pomocí FT dekonvoluce je špatně podmíněná úloha je velmi citlivá na omezenost intervalů, na kterých máme změřená data a na přítomnost šumu data je nutno pro dekonvoluci předpřipravit: odečíst pozadí FT vyžaduje pole stejných délek (nejlépe 2n) data doplníme nulami nutno vyhladit šum pro výpočet FT použijeme implementované funkce fft a ifft (viz help).
modifikovaná Stokesova metoda vyhlazení dat pomocí násobení Gaussovou funkcí po zpětné FT vyjde: tj. vyhladíme li M a R, je automaticky vyhlazena i F!!!!
% Fourierova transformace of merenych dat % a rozlisovaci funkce M = fft([m zeros(1,length(r) 1)]); % zarovnam nulami na stejnou velikost R = fft([r zeros(1,length(m) 1)]); % vyhlazeni M sigma = length(m)/20; x = 1:length(M); gauss = exp( (x.^2)/sigma^2); gauss = gauss + fliplr(gauss); M = gauss.*m; % vyhlazeni R sigma = length(r)/5; x = 1:length(R); gauss = exp( (x.^2)/sigma^2); gauss = gauss + fliplr(gauss); R = gauss.*r; ft = real(ifft(m./r)); ft = fftshift(ft);
Výpočet integrálů pomocí Fouriérovy transformace integrál aproximujeme
Výpočet integrálů pomocí Fouriérovy transformace nutno zohlednit kraje intervalu integrace FFT Lichoběžníková aproximace:
Filonova metoda výpočtu Fouriérovských integrálů pro malá
Filonova metoda výpočtu Fouriérovských integrálů
Nízko/vysoko frekvenční filtry ideální NF filtr Butterworthův NF filtr Gaussův NF filtr
Nízko/vysoko frekvenční filtry
Nízko/vysoko frekvenční filtry
Nízko/vysoko frekvenční filtry komprese obrazu
Nízko/vysoko frekvenční filtry
Wienerův filtr, optimální filtrování instrumentální funkce filtr fyzikální profil šum minimalizace Wienerův filtr
logaritmická škála (měřené) (extrapolované) (odhadnuté)
Fázová korelace shift teorém similarity teorém zjištění vzájemného posunutí obrázků, rotace a změny měřítka
Fázová korelace posun obrázků
Fázová korelace rotace
Fázová korelace
Fázová korelace změna měřítka
Fázová korelace
Fázová korelace zjištění vzájemného posunutí: 1. spočteme spektra obou obrazů 2. spočteme fázovou korelaci těchto obrazů 3. poloha maxima (x0, y0) určuje vektor vzájemného posunutí obrazů zjištění vzájemné rotace: 1. spočteme amplitudová spektra obou obrazů 2. převedeme spektra do polárních souřadnic (r, ) 3. tato spektra jsou posunutá o vektor (0, ), který určíme metodou uvedenou výše 4. otočíme druhým obrazem o úhel (otočení kolem středu), nyní ještě zbývá posunutí (x0, y0) zjištění změny měřítka: 1. spočteme amplitudová spektra obou obrazů 2. převedeme spektra do polárních souřadnic s log osou r (log(r), ) 3. tato spektra jsou posunutá o vektor ( log(c),0), který určíme metodou uvedenou výše
Úkoly: 1) Napište funkci na výpočet koeficientů an a bn F.řad. Aproximujte různé funkce, periodické i neperiodické. 2) Napište skript, který bude počítat Fouriérovské integrály Filonovou metodou. 3) Napište skript, který bude počítat Fouriérovské integrály pomocí FT 4) Napište skript, který bude provádět dekonvoluci dat pomocí modifikované Stokesovy metody 5) Napište skript, který bude aplikovat na data jeden z uvedených šumových filtrů. 6) Troufnete si napsat skript, který bude zjišťovat vzájemné posunutí dvou obrázků?