Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% dwuwymiarowa FFT
- % nie robi sie na integerach
- close all; clear; clc;
- a = imread('cameraman.tif');
- a = double(a)/255;
- A = fftshift(fft2(a));
- WA = abs(A);
- %imagesc(log(WA+0.001)); axis image; colorbar('vertical');
- % bez logarytmu to nic nie widac
- % i dodac mala wartosc by uniknac log z 0
- % przyklad
- % wykonac filtracje dolnoprzepustowa idealna dla r = 5, 10, 15, 20, 50px
- % wyswietlic wyniki filtracji na 1 figurze
- % potem zmienic na filtr gornoprzepsutowy
- [Nz,Nx] = size(a);
- dyst = zeros(Nz,Nx);
- dyst(round(Nz/2),round(Nx/2)) = 1;
- dyst = bwdist(dyst); % mapa odleglosci od srodka
- r = [5:5:20, 50];
- for k = 1:5
- %maska = (dyst <= r(k));
- maska = 1-(dyst <= r(k));
- A_new = A.*maska;
- a_new = real(ifft2(ifftshift(A_new)));
- subplot(2, 3, k), imshow(a_new);
- title(['prom = ', int2str(r(k))]);
- end
- subplot( 236 ), imshow( a );
- %% filtr butterwortha
- close all; clear; clc;
- a = imread('cameraman.tif');
- a = double(a)/255;
- A = fftshift(fft2(a));
- WA = abs(A);
- [Nz,Nx] = size(a);
- dyst = zeros(Nz,Nx);
- dyst(round(Nz/2),round(Nx/2)) = 1;
- dyst = bwdist(dyst); % mapa odleglosci od srodka
- r = [5:5:20, 50];
- for k = 1:5
- % LP = 1/(1+(dyst/r)^(2N))
- maska = 1.0./(1+(dyst/r(k)).^(2*3));
- A_new = A.*maska;
- a_new = real(ifft2(ifftshift(A_new)));
- subplot(2, 3, k), imshow(a_new);
- title(['prom = ', int2str(r(k))]);
- end
- subplot( 236 ), imshow( a );
- %% filtr gaussa
- % wieksze zastosowanie
- close all; clear; clc;
- a = imread('cameraman.tif');
- a = double(a)/255;
- A = fftshift(fft2(a));
- WA = abs(A);
- [Nz,Nx] = size(a);
- dyst = zeros(Nz,Nx);
- dyst(round(Nz/2),round(Nx/2)) = 1;
- dyst = bwdist(dyst); % mapa odleglosci od srodka
- r = [5:5:20, 50];
- for k = 1:5
- % G = exp(-dyst^2/(2*r^2))
- maska = exp(-dyst.*dyst/(2*r(k)*r(k)));
- A_new = A.*maska;
- a_new = real(ifft2(ifftshift(A_new)));
- subplot(2, 3, k), imshow(a_new);
- title(['prom = ', int2str(r(k))]);
- end
- subplot( 236 ), imshow( a );
- %%
- close all; clear; clc;
- bw = imread('text.png');
- a = bw(32:45,88:98);
- %C = real(ifft2(fft2(bw) .* fft2(rot90(a,2), 256, 256)));
- %subplot(121), imshow(bw);
- %subplot(122), imshow(C>60);
- % znalezc litere r w tych nieodwroconych
- % wyciac ktoras z r
- % liczyc korelacje i znowu progowac
- d = bw(32:45, 5:13); % trzeba odwrocic x i y !!
- C = real(ifft2(fft2(bw) .* fft2(rot90(d,2), 256, 256)));
- %subplot(121), imshow(d);
- subplot(121), imshow(bw);
- %max(C(:)) % 41
- %subplot(122), imshow(C>39);
- % lapie tez inne litery jak np h
- % trzeba zrobic korelacje negatywow
- C1 = real(ifft2(fft2(bw) .* fft2(rot90(d,2), 256, 256)));
- C2 = real(ifft2(fft2(~bw) .* fft2(rot90(~d,2), 256, 256)));
- C = (C1+C2)>120;
- %[max(C1(:)) max(C2(:))]
- %subplot(122), imshow(C);
- C = circshift(C, [-5, -5]); % trzeba przesunac o pare pikseli by trafilo w r albo obok r bo nie w nozke
- D = imreconstruct(C,bw);
- subplot(122), imshow(D);
- % tak nie wyszukiwac liter
- %% transformata falkowa
- close all; clear; clc;
- a = imread('cameraman.tif');
- % nie konwertowac do double, zostac w integerach
- % wavemenu -> wavelet2D -> file -> import from workspace -> a
- b = imnoise( a, 'gaussian' ); % dodac szum
- [A,H,V,D] = dwt2(a, 'sym2');
- %subplot(221), imagesc(A);
- %subplot(222), imagesc(H);
- %subplot(223), imagesc(V);
- %subplot(224), imagesc(D);
- a_new = idwt2(0*A,H,V,D, 'sym2');
- subplot(221), imagesc(a_new);
- a_new = idwt2(A,0*H,V,D, 'sym2');
- subplot(222), imagesc(a_new);
- a_new = idwt2(A,H,0*V,D, 'sym2');
- subplot(223), imagesc(a_new);
- a_new = idwt2(A,H,V,0*D, 'sym2');
- subplot(224), imagesc(a_new);
- colormap('gray');
- %% wavedec i waverec
- close all; clear; clc;
- a = imread('cameraman.tif');
- [C,L] = wavedec2( a, 2, 'sym4' );
- % L
- % A2: 1-69^2
- % H2: 69^2-2*69^2
- % C2: 1+2*69^2-3*69^2
- % itd.
- % znalezc wszystkie te A2, B2, ...
- S = L(:,1).*L(:,2);
- A2 = C(1:S(1));
- H2 = C(1+S(1):S(1)+S(2));
- V2 = C(1+S(1)+S(2):S(1)+2*S(2));
- D2 = C(1+S(1)+2*S(2):S(1)+3*S(2));
- X = S(1)+3*S(2);
- H1 = C(X+1:X+S(3));
- V1 = C(X+1+S(3):X+2*S(3));
- D1 = C(X+1+2*S(3):X+3*S(3));
- abc = reshape( D1, L(3, 1), L(3, 2) ); % reshape z wektora zamienia w 2D
- imagesc( abc );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement