MATLAB Language Фильтрация с использованием 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]);

Маскирование изображения частотной области может быть выполнено путем умножения точки БПФ на двоичную маску, полученную выше:

masked_ft = ft .* mask;

Теперь давайте вычислим обратный БПФ:

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

Высокими частотами изображения являются острые края, поэтому этот фильтр верхних частот может использоваться для резкости изображений.