Lineare Faltung zweier Bilder in Matlab mit fft2

Ich würde gerne zwei Bilder und convolve Sie zusammen in Matlab mit Hilfe der 2D-FFT-ohne Rückgriff auf die conv2 Funktion. Aber ich bin unsicher hinsichtlich, wie die Matrizen müssen gut gepolstert und bereit für die Faltung.

Die mathematische operation ist die folgende:

EINE * B = C

In der obigen, * ist der faltungs-operator (Link zu Wikipedia).

Dem folgenden Matlab-Programm zeigt den Unterschied zwischen der Polsterung und keine Füllung den Matrizen. Ich vermute, dass nicht Polsterung die Matrizen Ergebnisse in einem circular convolution aber ich möchte führen Sie eine lineare Faltung ohne aliasing.

Wenn ich pad die beiden Matrizen, so wie ich abschneiden, die Ausgabe der Faltung, so dass C ist die gleiche Größe wie Eine und B?

A = rgb2gray(im2double(imread('1.png'))); % input A
B = rgb2gray(im2double(imread('2.png'))); % kernel B

figure;
imagesc(A); colormap gray;
title ('A')

figure;
imagesc(B); colormap gray;
title ('B')

[m,n] = size(A);
mm = 2*m - 1;
nn = 2*n - 1;

C = (ifft2(fft2(A,mm,nn).* fft2(B,mm,nn)));

figure;
imagesc(C); colormap gray;
title ('C with padding')

C0 = (ifft2(fft2(A).* fft2(B)));

figure;
imagesc(C0); colormap gray;
title ('C without padding')

Hier ist die Ausgabe des Programms:

Lineare Faltung zweier Bilder in Matlab mit fft2
Lineare Faltung zweier Bilder in Matlab mit fft2
Lineare Faltung zweier Bilder in Matlab mit fft2
Lineare Faltung zweier Bilder in Matlab mit fft2

Schreibe einen Kommentar