使用 2D FFT 过滤

与 1D 信号一样,可以通过应用傅立叶变换,乘以频域中的滤波器并转换回空间域来过滤图像。以下是使用 Matlab 将高通滤波器或低通滤波器应用于图像的方法:

image 成为未经过滤的原始图像,以下是如何计算其 2D FFT:

ft = fftshift(fft2(image));

现在要排除部分光谱,需要将其像素值设置为 0.原始图像中包含的空间频率从中心映射到边缘(使用 fftshift 之后)。要排除低频,我们将中心圆形区域设置为 0。

以下是如何使用内置函数生成半径为 D 的圆盘形二进制掩码:

[x y ~] = size(ft);
D = 20;
mask = fspecial('disk', D) == 0;
mask = imresize(padarray(mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);

屏蔽频域图像可以通过将 FFT 逐点与上面获得的二进制掩码相乘来完成:

masked_ft = ft .* mask;

现在,让我们计算逆 FFT:

filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');

图像中的高频是锐边,因此该高通滤波器可用于锐化图像。