Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.05 KB | None | 0 0
  1. %% dwuwymiarowa FFT
  2. % nie robi sie na integerach
  3. close all; clear; clc;
  4. a = imread('cameraman.tif');
  5. a = double(a)/255;
  6. A = fftshift(fft2(a));
  7. WA = abs(A);
  8. %imagesc(log(WA+0.001)); axis image; colorbar('vertical');
  9. % bez logarytmu to nic nie widac
  10. % i dodac mala wartosc by uniknac log z 0
  11. % przyklad
  12. % wykonac filtracje dolnoprzepustowa idealna dla r = 5, 10, 15, 20, 50px
  13. % wyswietlic wyniki filtracji na 1 figurze
  14. % potem zmienic na filtr gornoprzepsutowy
  15. [Nz,Nx] = size(a);
  16. dyst = zeros(Nz,Nx);
  17. dyst(round(Nz/2),round(Nx/2)) = 1;
  18. dyst = bwdist(dyst);    % mapa odleglosci od srodka
  19. r = [5:5:20, 50];
  20. for k = 1:5
  21.    %maska = (dyst <= r(k));
  22.    maska = 1-(dyst <= r(k));
  23.    A_new = A.*maska;
  24.    a_new = real(ifft2(ifftshift(A_new)));
  25.    subplot(2, 3, k), imshow(a_new);
  26.    title(['prom = ', int2str(r(k))]);
  27. end
  28. subplot( 236 ), imshow( a );
  29. %% filtr butterwortha
  30. close all; clear; clc;
  31. a = imread('cameraman.tif');
  32. a = double(a)/255;
  33. A = fftshift(fft2(a));
  34. WA = abs(A);
  35. [Nz,Nx] = size(a);
  36. dyst = zeros(Nz,Nx);
  37. dyst(round(Nz/2),round(Nx/2)) = 1;
  38. dyst = bwdist(dyst);    % mapa odleglosci od srodka
  39. r = [5:5:20, 50];
  40. for k = 1:5
  41.    % LP = 1/(1+(dyst/r)^(2N))
  42.    maska = 1.0./(1+(dyst/r(k)).^(2*3));
  43.    A_new = A.*maska;
  44.    a_new = real(ifft2(ifftshift(A_new)));
  45.    subplot(2, 3, k), imshow(a_new);
  46.    title(['prom = ', int2str(r(k))]);
  47. end
  48. subplot( 236 ), imshow( a );
  49. %% filtr gaussa
  50. % wieksze zastosowanie
  51. close all; clear; clc;
  52. a = imread('cameraman.tif');
  53. a = double(a)/255;
  54. A = fftshift(fft2(a));
  55. WA = abs(A);
  56. [Nz,Nx] = size(a);
  57. dyst = zeros(Nz,Nx);
  58. dyst(round(Nz/2),round(Nx/2)) = 1;
  59. dyst = bwdist(dyst);        % mapa odleglosci od srodka
  60. r = [5:5:20, 50];
  61. for k = 1:5
  62.    % G = exp(-dyst^2/(2*r^2))
  63.    maska = exp(-dyst.*dyst/(2*r(k)*r(k)));
  64.    A_new = A.*maska;
  65.    a_new = real(ifft2(ifftshift(A_new)));
  66.    subplot(2, 3, k), imshow(a_new);
  67.    title(['prom = ', int2str(r(k))]);
  68. end
  69. subplot( 236 ), imshow( a );
  70. %%
  71. close all; clear; clc;
  72. bw = imread('text.png');
  73. a = bw(32:45,88:98);
  74. %C = real(ifft2(fft2(bw) .* fft2(rot90(a,2), 256, 256)));
  75. %subplot(121), imshow(bw);
  76. %subplot(122), imshow(C>60);
  77. % znalezc litere r w tych nieodwroconych
  78. % wyciac ktoras z r
  79. % liczyc korelacje i znowu progowac
  80. d = bw(32:45, 5:13);       % trzeba odwrocic x i y !!
  81. C = real(ifft2(fft2(bw) .* fft2(rot90(d,2), 256, 256)));
  82. %subplot(121), imshow(d);
  83. subplot(121), imshow(bw);
  84. %max(C(:))       % 41
  85. %subplot(122), imshow(C>39);
  86. % lapie tez inne litery jak np h
  87. % trzeba zrobic korelacje negatywow
  88. C1 = real(ifft2(fft2(bw) .* fft2(rot90(d,2), 256, 256)));
  89. C2 = real(ifft2(fft2(~bw) .* fft2(rot90(~d,2), 256, 256)));
  90. C = (C1+C2)>120;
  91. %[max(C1(:)) max(C2(:))]
  92. %subplot(122), imshow(C);
  93. C = circshift(C, [-5, -5]); % trzeba przesunac o pare pikseli by trafilo w r albo obok r bo nie w nozke
  94. D = imreconstruct(C,bw);
  95. subplot(122), imshow(D);
  96. % tak nie wyszukiwac liter
  97. %% transformata falkowa
  98. close all; clear; clc;
  99. a = imread('cameraman.tif');
  100. % nie konwertowac do double, zostac w integerach
  101. % wavemenu -> wavelet2D -> file -> import from workspace -> a
  102. b = imnoise( a, 'gaussian' ); % dodac szum
  103. [A,H,V,D] = dwt2(a, 'sym2');
  104. %subplot(221), imagesc(A);
  105. %subplot(222), imagesc(H);
  106. %subplot(223), imagesc(V);
  107. %subplot(224), imagesc(D);
  108. a_new = idwt2(0*A,H,V,D, 'sym2');
  109. subplot(221), imagesc(a_new);
  110. a_new = idwt2(A,0*H,V,D, 'sym2');
  111. subplot(222), imagesc(a_new);
  112. a_new = idwt2(A,H,0*V,D, 'sym2');
  113. subplot(223), imagesc(a_new);
  114. a_new = idwt2(A,H,V,0*D, 'sym2');
  115. subplot(224), imagesc(a_new);
  116. colormap('gray');
  117. %% wavedec i waverec
  118. close all; clear; clc;
  119. a = imread('cameraman.tif');
  120. [C,L] = wavedec2( a, 2, 'sym4' );
  121. % L
  122. % A2: 1-69^2
  123. % H2: 69^2-2*69^2
  124. % C2: 1+2*69^2-3*69^2
  125. % itd.
  126. % znalezc wszystkie te A2, B2, ...
  127. S = L(:,1).*L(:,2);
  128. A2 = C(1:S(1));
  129. H2 = C(1+S(1):S(1)+S(2));
  130. V2 = C(1+S(1)+S(2):S(1)+2*S(2));
  131. D2 = C(1+S(1)+2*S(2):S(1)+3*S(2));
  132. X = S(1)+3*S(2);
  133. H1 = C(X+1:X+S(3));
  134. V1 = C(X+1+S(3):X+2*S(3));
  135. D1 = C(X+1+2*S(3):X+3*S(3));
  136. abc = reshape( D1, L(3, 1), L(3, 2) );  % reshape z wektora zamienia w 2D
  137. imagesc( abc );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement