Преобразование Фурье

Определение преобразования Фурье

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

Если f (m, n) является функцией двух дискретных пространственных переменных m и n, то двумерное преобразование Фурье f (m, n) задано отношением

F(ω1,ω2)=m=n=f(m,n)ejω1mejω2n.

Переменные ω 1 и ω 2 являются переменными частоты; их модули являются радианами на выборку. F (ω 1, ω 2) часто называется представлением частотного диапазона f (m, n). F (ω 1, ω 2) является комплексной функцией, которая является периодической и в ω 1 и в ω 2 с периодом 2π. Из-за периодичности, обычно только область значений πω1,ω2π отображен. Обратите внимание на то, что F (0,0) является суммой всех значений f (m, n). Поэтому F (0,0) часто называется постоянным компонентом или компонентом DC преобразования Фурье. (DC обозначает постоянный ток; это - электротехническое понятие, которое относится к источнику питания постоянного напряжения, в противоположность источнику питания, напряжение которого отличается синусоидально.)

Инверсия преобразования является операцией, которая, когда выполняется на преобразованном изображении производит оригинальное изображение. Обратным двумерным преобразованием Фурье дают

f(m,n)=14π2ω1=ππω2=ππF(ω1,ω2)ejω1mejω2ndω1dω2.

Примерно разговор, это уравнение означает, что f (m, n) может быть представлен как сумма бесконечного числа комплексных экспоненциалов (синусоиды) с различными частотами. Значение и фаза вклада на частотах (ω 1, ω 2) даны F (ω 1, ω 2).

Визуализация преобразования Фурье

Чтобы проиллюстрировать, рассмотрите функциональный f (m, n), который еще равняется 1 в прямоугольной области и 0 везде. Чтобы упростить схему, f (m, n) показывается непрерывной функцией, даже при том, что переменные m и n дискретны.

Прямоугольная функция

Следующие данные показывают, как сетчатый график, значение преобразования Фурье,

|F(ω1,ω2)|,

из прямоугольной функции, показанной в предыдущей фигуре. Сетчатый график значения является распространенным способом визуализировать преобразование Фурье.

Изображение значения прямоугольной функции

Пиком в центре графика является F (0,0), который является суммой всех значений в f (m, n). График также показывает, что F (ω 1, ω 2) имеет больше энергии на высоких горизонтальных частотах, чем в высоких частотах кадровой развертки. Это отражает то, что горизонтальные сечения f (m, n) являются узкими импульсами, в то время как вертикальные сечения являются кадровыми импульсами. Узкие импульсы имеют больше высокочастотного содержимого, чем кадровые импульсы.

Другой распространенный способ визуализировать преобразование Фурье состоит в том, чтобы отобразиться

журнал|F(ω1,ω2)|

как изображение, как показано.

Журнал преобразования Фурье прямоугольной функции

Используя логарифм помогает произвести детали преобразования Фурье в областях, где F (ω 1, ω 2) очень близко к 0.

Примеры преобразования Фурье для других простых форм показывают ниже.

Преобразования Фурье некоторых простых форм

Дискретное преобразование Фурье

Работа с преобразованием Фурье на компьютере обычно включает форму преобразования, известного как дискретное преобразование Фурье (DFT). Дискретное преобразование является преобразованием, значения ввода и вывода которого являются дискретными выборками, делая его удобным для манипуляции с компьютерами. Существует две основных причины использования этой формы преобразования:

  • Ввод и вывод ДПФ оба дискретен, который делает его удобным для манипуляций с компьютерами.

  • Существует алгоритм FAST для вычисления ДПФ, известного как быстрое преобразование Фурье (FFT).

ДПФ обычно задается для дискретного функционального f (m, n), который является ненулевым только по конечной области 0mM1 и 0nN1. Двумерным ДПФ M на n и обратными отношениями ДПФ M на n дают

F(p,q)=m=0M1n=0N1f(m,n)ej2πpm/Mej2πqn/N   p=0, 1, ..., M1q=0, 1, ..., N1

и

f(m,n)=1MNp=0M1q=0N1F(p,q)ej2πpm/Mej2πqn/N   m=0, 1, ..., M1 n=0, 1, ..., N1

Значения F (p, q) коэффициенты ДПФ f (m, n). Коэффициент нулевой частоты, F (0,0), часто называется "компонентом DC". DC является электротехническим понятием, которое обозначает постоянный ток. (Обратите внимание на то, что матричные индексы в MATLAB® всегда запускаются в 1, а не 0; поэтому, элементы матрицы f (1,1) и F (1,1) соответствуют математическим количествам f (0,0) и F (0,0), соответственно.)

Функции MATLAB fft, fft2 и fftn реализуют алгоритм быстрого преобразования Фурье для вычисления одномерного ДПФ, двумерного ДПФ и N-мерного ДПФ, соответственно. Функции ifft, ifft2 и ifftn вычисляют обратного ДПФ.

Отношение к преобразованию Фурье

Коэффициенты ДПФ F (p, q) выборки преобразования Фурье F (ω 1, ω 2).

F(p,q)=F(ω1,ω2)|ω1=2πp/Mω2=2πq/Np=0,1,...,M1q=0,1,...,N1

Визуализация дискретного преобразования Фурье

  1. Создайте матричный f, который подобен функциональному f (m, n) в примере в Определении преобразования Фурье. Помните, что f (m, n) равен 1 в прямоугольной области и 0 в другом месте. Используйте двухуровневое изображение, чтобы представлять f (m, n).

    f = zeros(30,30);
    f(5:24,13:17) = 1;
    imshow(f,'InitialMagnification','fit')

  2. Вычислите и визуализируйте 30 30 ДПФ f с этими командами.

    F = fft2(f);
    F2 = log(abs(F));
    imshow(F2,[-1 5],'InitialMagnification','fit');
    colormap(jet); colorbar

    Дискретное преобразование Фурье, вычисленное без дополнения

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

  3. Чтобы получить более прекрасную выборку преобразования Фурье, добавьте нулевое дополнение в f при вычислении его ДПФ. Нулевое дополнение и вычисление ДПФ могут быть выполнены на одном шаге с этой командой.

    F = fft2(f,256,256);

    Эта команда нулевые клавиатуры f, чтобы 256 256 прежде вычислить ДПФ.

    imshow(log(abs(F)),[-1 5]); colormap(jet); colorbar

    Дискретное преобразование Фурье, вычисленное с дополнением

  4. Коэффициент нулевой частоты, однако, все еще отображен в левом верхнем углу, а не центре. Можно решить эту проблему при помощи функционального fftshift, который подкачивает квадранты F так, чтобы коэффициент нулевой частоты был в центре.

    F = fft2(f,256,256);F2 = fftshift(F);
    imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar

    Получившийся график идентичен один показанный в Визуализации преобразования Фурье.

Приложения преобразования Фурье

Этот раздел представляет несколько из многих связанных с обработкой изображений приложений преобразования Фурье.

Частотная характеристика линейных фильтров

Преобразование Фурье импульсного ответа линейного фильтра дает частотную характеристику фильтра. Функциональный freqz2 вычисляет и отображает частотную характеристику фильтра. Частотная характеристика Гауссова ядра свертки показывает, что этот фильтр передает низкие частоты и ослабляет высокие частоты.

h = fspecial('gaussian');
freqz2(h)

Частотная характеристика гауссова фильтра

Смотрите Линейные фильтры Проекта в Частотном диапазоне для получения дополнительной информации о линейной фильтрации, отфильтруйте проект и частотные характеристики.

Выполните быструю свертку Используя преобразование Фурье

Этот пример показывает, как выполнить быструю свертку двух матриц с помощью преобразования Фурье. Ключевое свойство преобразования Фурье состоит в том, что умножение двух преобразований Фурье соответствует свертке связанных пространственных функций. Это свойство, вместе с быстрым преобразованием Фурье, формирует основание для быстрого алгоритма свертки.

Примечание: основанный на БПФ метод свертки чаще всего используется для больших входных параметров. Для маленьких входных параметров это обычно быстрее, чтобы использовать функцию imfilter.

Создайте две простых матрицы, A и B. A является матрицей M на n, и B является P-by-Q матрицей.

A = magic(3);
B = ones(3);

A нулевой клавиатуры и B так, чтобы они были, по крайней мере (M+P-1) (N+Q-1). (Часто A и B дополнены нулем к размеру, который является степенью 2, потому что fft2 является самым быстрым для этих размеров.) Пример заполняет матрицы, чтобы быть 8 8.

A(8,8) = 0;
B(8,8) = 0;

Вычислите двумерного ДПФ A и B с помощью функции fft2. Умножьте эти двух ДПФ вместе и вычислите обратного двумерного ДПФ результата с помощью функции ifft2.

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

Извлеките ненулевой фрагмент результата и удалите мнимую часть, вызванную ошибкой округления.

C = C(1:5,1:5);
C = real(C)
C = 5×5

    8.0000    9.0000   15.0000    7.0000    6.0000
   11.0000   17.0000   30.0000   19.0000   13.0000
   15.0000   30.0000   45.0000   30.0000   15.0000
    7.0000   21.0000   30.0000   23.0000    9.0000
    4.0000   13.0000   15.0000   11.0000    2.0000

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

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

Считайте демонстрационное изображение в рабочую область.

bw = imread('text.png');

Создайте шаблон для соответствия путем извлечения буквы "a" от изображения. Обратите внимание на то, что можно также создать шаблон при помощи интерактивного синтаксиса функции imcrop.

a = bw(32:45,88:98);

Вычислите корреляцию изображения шаблона с оригинальным изображением путем вращения изображения шаблона 180 градусами и затем использования основанного на БПФ метода свертки. (Свертка эквивалентна корреляции, если вы вращаете ядро свертки 180 градусами.), Чтобы совпадать с шаблоном к изображению, используйте функции ifft2 и fft2. В получившемся изображении яркий peaks соответствует случаям буквы.

C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256)));
figure
imshow(C,[]) % Scale image to appropriate display range.

Чтобы просмотреть местоположения шаблона в изображении, найдите максимальное пиксельное значение и затем задайте пороговое значение, которое является меньше, чем этот максимум. Пороговое изображение показывает местоположения этого peaks как белые пятна в пороговом изображении корреляции. (Чтобы сделать местоположения легче видеть в этой фигуре, пример расширяет пороговое изображение, чтобы увеличить размер точек.)

max(C(:))
ans = 68
thresh = 60; % Use a threshold that's a little less than max.
D = C > thresh;
se = strel('disk',5);
E = imdilate(D,se);
figure
imshow(E) % Display pixels with values over the threshold.