INF2310 v?r 2019 - L?sningshint 10

Oppgave 1 - 2D DFT og Fourier-basisbildene (sin- og cos-bildene)

f = double(imread('car.png'));
F = fft2(f);
N = size(f,2);
i = (0:N-1)';

  1. figure(1); imshow(log( abs(fftshift(F)) + 1 ), [0 max(log( abs(F(:)) + 1 ))]); axis on;
    % colormap('default'); colorbar;
    figure(2); imshow(angle(F), [-pi pi]); axis on;

  2. F(1,1)
    sum(f(:))

  3. u = 5;
    v = 7;
    sine = sin(-2*pi*(u.*repmat(i,1,N) + v.*repmat(i',N,1)) / N);
    figure(3); imshow(sine, [-1 1]); axis on;

  4. sum(f(:) .* sine(:))
    imag(F(u+1,v+1))

  5. cosine = cos(2*pi*(u.*repmat(i,1,N) + v.*repmat(i',N,1)) / N);
    sum(f(:) .* cosine(:))
    real(F(u+1,v+1))

Oppgave 2 - Sin- og cos-bildene og ortogonalitet

M = 256;
N = 512;
x = (0:M-1)';
y = (0:N-1);

  1. u = 10;
    v = 10;
    sine = sin(-2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    figure(1); imshow(sine, [-1 1]); axis on;

  2. cosine = cos(2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    sum(sine(:) .* cosine(:))

  3. u = 86;
    v = 45;
    sine2   = sin(-2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    cosine2 = cos( 2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    sum(sine2(:)  .* cosine2(:))
    sum(sine(:)   .* sine2(:))
    sum(sine(:)   .* cosine2(:))
    sum(cosine(:) .* sine2(:))
    sum(cosine(:) .* cosine2(:))

  4. u = 246;
    v = 502;
    sine2   = sin(-2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    cosine2 = cos( 2*pi*(u.*repmat(x,1,N)/M + v.*repmat(y,M,1)/N));
    figure(2); imshow(-sine2,  [-1 1]); axis on;
    figure(3); imshow(cosine,  [-1 1]); axis on;
    figure(4); imshow(cosine2, [-1 1]); axis on;
    all(abs(sine(:)   + sine2(:))   < 10^-10)
    all(abs(cosine(:) - cosine2(:)) < 10^-10)

  5. sum(sine(:)   .* sine(:))
    sum(cosine(:) .* cosine(:))

Oppgave 3 - Kompresjon ved redusert basis

Forslag til l?sning ved bruk av car.png:

f = double(imread('car.png'));
F = fft2(f);
t = 1;
while t < 10000000
    F2 = F;
    F2(abs(F) < t) = 0;
    f2 = ifft2(F2);
    subplot(1,2,1); imshow(f2, [0 255]);       title(['Rekonstruksjon, t = ' num2str(t)]);
    subplot(1,2,2); imshow(fftshift(F2 ~= 0)); title([num2str(sum(F2(:) ~= 0)) ' ikke-null koeffisienter']);
    pause;
    t = 10 * t;
end

Oppgave 4 - Fjerning av periodisk st?y

f = double(imread('lena_periodicNoise.png'));
F = fft2(f);

  1. figure(1); imshow(log( abs(fftshift(F)) + 1 ), [0 max(log( abs(F(:)) + 1 ))]); axis on;

    Ved visuell inspeksjon peker parene (89, 29) og (169, 229), og (189, 69) og (69, 189) seg ut (skrevet med én-indeksering og etter skifting slik at senterpikselet er DC).
  2. F_centered = fftshift(F);
    F_centered( 88: 90,  28: 30) = 0;
    F_centered(168:170, 228:230) = 0;
    F_centered(188:190,  68: 70) = 0;
    F_centered( 68: 70, 188:190) = 0;
    figure(2); imshow(log( abs(F_centered) + 1 ), [0 max(log( abs(F_centered(:)) + 1 ))]); axis on;
    f2 = ifft2(ifftshift(F_centered));
    figure(3); imshow(f2, [0 255]);

  3. f = double(imread('lena_periodicNoise2.png'));
    F = fft2(f);
    figure(1); imshow(log( abs(fftshift(F)) + 1 ), [0 max(log( abs(F(:)) + 1 ))]); axis on;
    % Paret (89, 29) og (169, 229) peker seg ut.
    % Et drastisk forslag til l?sning:
    F_centered = fftshift(F);
    F_centered(  1:end,  28: 30) = 0;
    F_centered( 88: 90,   1:end) = 0;
    F_centered( 84: 94,  24: 34) = 0;
    F_centered(  1:end, 228:230) = 0;
    F_centered(168:170,   1:end) = 0;
    F_centered(164:174, 224:234) = 0;
    figure(2); imshow(log( abs(F_centered) + 1 ), [0 max(log( abs(F_centered(:)) + 1 ))]); axis on;
    f2 = ifft2(ifftshift(F_centered));
    figure(3); imshow(f2, [0 255]);

Oppgave 5 - 2D DFT av symmetriske bilder

Imagin?rdelene vil alltid bli 0. Slike 2D DFT-er er derfor reelle og symmetriske.

Oppgave 6 - Antall uavhengige/"unike" koeffisienter

Galt. Pga. symmetrien i cosinus-bildene og anti-symmetrien i sinus-bildene vil kun halvparten av realdelene v?re uavhengige og halvparten av imagin?rdelene v?re uavhengige. For ? representere hele 2D DFT-en trenger man derfor bare ? lagre én av hver halvdel, som tilsammens utgj?r akkurat like mange tall som den romlige representasjonen.

Publisert 6. apr. 2019 15:23 - Sist endret 6. apr. 2019 15:23