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

11

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

В частности, так происходит процесс центрирования нулевых частот.

Пример, который я видел, предварительно обрабатывает входное изображение (с интенсивностью оттенков серого), умножая его на матрицу с размером, равным входному изображению, значения которого , где x - строка, y - столбец, поэтому шаблон чередуется 1 и - 1(1)x+yxy11

Согласно примечаниям, это эквивалентно замене квадрантов матрицы путем переворота по осям и y .xy

Я понимаю, почему это сделано, и я хотел бы подчеркнуть, что я понимаю, что мой код / ​​Фурье работает, я просто не понимаю, почему умножение входной матрицы на 1 / -1 приводит к центрированию нулевой частоты вокруг 0.

Спасибо

голова кружится
источник
Вы также можете найти некоторые ссылки в главе 4, 4.6-Внедрение из цифровой обработки изображений Гонсалеса (у меня есть второе издание). Надеюсь, поможет.
hakunami

Ответы:

18

Ой! Какой классный трюк! Это работает из-за теоремы о свертке (то есть умножение в пространственной / временной области эквивалентно свертке в частотной области.)

xy

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

Если взять преобразование Фурье переменного изображения ( изображение шахматной доски), это приводит к одной точке в самом центре преобразования Фурье: введите описание изображения здесь. (Вспомните, что мы еще не сделали вращение, поэтому центр преобразования Фурье - это высокие частоты, а низкие частоты по-прежнему находятся в углах.) Но это «ядро вращения!» Свертывание с этим вращением ядра перемещает все вниз и вправо (но вещи, которые падают внизу справа, вращаются в верхнем левом углу).

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

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

Блуждающая логика
источник
Я в замешательстве. Это использует свертку для реализации fftshift-подобной функции? Разве в вычислительном отношении не дешевле просто переставить 4 квадранта напрямую?
эндолит
2
Здесь нет прямой свертки. Это использует побитовое умножение в области изображения, чтобы получить эквивалент свертки в области Фурье. Да, fftshiftэто не очень дорого, но этот трюк может иметь лучшее поведение кеша. Пиксельное умножение на самом деле просто переворачивает знак каждого второго пикселя. Такая простая векторизация, что запись чтения-изменения-записи является гарантированным попаданием в кэш, и процессору легко выполнить предварительную выборку операций чтения.
Блуждающая логика
Ах да, это знак переворота, а не настоящее умножение.
эндолит
Почему преобразование Фурье тестового изображения (второе изображение) выглядит так? Я на самом деле вижу два изображения, черное одно над другим.
hakunami
10

Ответ Wandering Logic является правильным и подробным. Просто подумал, что вы захотите увидеть математику вместо картинок:

(1)k=ejωω2π(k/2)

В результате нулевая частота - которая раньше была с индексом 0 - теперь равна половине ширины изображения (или высоты, в зависимости от того, умножаете ли вы столбцы или строки).

nimrodm
источник