How would you apply a 7 x 7 Laplacian of Gaussian filter on an image using the Fourier transform in MATLAB?




I = imread('moon.tif');
% Fourier filter must have equal size
laplacian = zeros(size(I));
% Placing our 'Mexican hat' in the left upper corner:
laplacian(1:7,1:7) = [...
0, 0,-1,-1,-1, 0, 0;...
0,-1,-3,-3,-3,-1, 0;...
-1,-3, 0, 7, 0,-3,-1;...
-1,-3, 7,24, 7,-3,-1;...
-1,-3, 0, 7, 0,-3,-1;...
0,-1,-3,-3,-3,-1, 0;...
0, 0,-1,-1,-1, 0, 0]/48;
% Shifting the filter's center to the [1,1] index:
laplacian = circshift(laplacian,-3*[1,1]);
% Apply convolution theorem (multiply in Fourier domain)
LapFilteredImage = real(ifftn(fftn(I).*fftn(laplacian)));
% Show results:
figure;
subplot(1,2,1); imagesc(I); colormap gray;
subplot(1,2,2); imagesc(LapFilteredImage); colormap
gray;