Поворот спектра

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

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

Поворот преобразованного описанным образом спектра вокруг оси соответствует повороту изображения вокруг центра располагающегося в углах квадрата. Для реализации поворота вокруг центра необходима замена центра и периферии изображения до и после поворота спектра. Это же преобразование можно реализовать, умножая элементы спектра на числа (-1)^(i + j), где i и j – горизонтальная и вертикальная позиции элементов.

Итоговый алгоритм можно представить в следующем виде:

 

Умножаем каждый элемент спектра на –1 в степени суммы ширины и высоты элемента в матрице (шахматный порядок)

Y= {(-1) ^ (i + j)} .* Y;

Меняем местами центр и края спектра(располагаем низкие частоты в центре)

Y = fftshift(Y);

Вращаем матрицу спектра (как изображение), используя, например, бикубическию интерполяцию

Y = imrotate(Y, angle 'bicubic', 'crop');

Меняем местами центр и края спектра(располагаем высокие частоты в центре)

Y = fftshift(Y);

Умножаем каждый элемент спектра на –1 в степени суммы ширины и высоты элемента в матрице (шахматный порядок)

Y= {(-1) ^ (i + j)} .* Y;