2D преобразования Фурье

Функция fft2 преобразовывает 2D данные в пространство частоты. Например, можно преобразовать 2D оптическую маску, чтобы показать ее дифракционный шаблон.

Двумерное преобразование Фурье

Следующая формула задает дискретное преобразование Фурье Y m-by-n матричный X.

Yp+1,q+1=j=0m1k=0n1ωmjpωnkqXj+1,k+1

ωm и ωn являются комплексными корнями из единицы, заданными следующими уравнениями.

ωm=e2πi/mωn=e2πi/n

i является мнимой единицей, p и j являются индексами, которые запускаются от 0 до m –1, и q и k являются индексами, которые запускаются от 0 до n –1. Индексы для X и Y переключены 1 в этой формуле, чтобы отразить матричные индексы в MATLAB®.

Вычисление 2D преобразования Фурье X эквивалентно первому вычислению 1D преобразования каждого столбца X и затем взятия 1D преобразования каждой строки результата. Другими словами, команда fft2(X) эквивалентна Y = fft(fft(X).').'.

2D дифракционный шаблон

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

Создайте логический массив, который задает оптическую маску с маленькой, круговой апертурой.

n = 2^10;                 % size of mask
M = zeros(n);
I = 1:n; 
x = I-n/2;                % mask x-coordinates 
y = n/2-I;                % mask y-coordinates
[X,Y] = meshgrid(x,y);    % create 2-D mask grid
R = 10;                   % aperture radius
A = (X.^2 + Y.^2 <= R^2); % circular aperture of radius R
M(A) = 1;                 % set mask elements inside aperture to 1
imagesc(M)                % plot mask
axis image

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

DP = fftshift(fft2(M));
imagesc(abs(DP))
axis image

Чтобы улучшить детали областей с маленькими амплитудами, постройте 2D логарифм дифракционного шаблона. Очень маленькие амплитуды затронуты числовой ошибкой округления, и прямоугольная сетка вызывает радиальную асимметрию.

imagesc(abs(log2(DP)))
axis image

Ссылки

[1] Фаулз, G. R. Введение в современную оптику. Нью-Йорк: Дувр, 1989.

Смотрите также

| | | |

Похожие темы