Центрування нульової частоти для дискретного перетворення Фур'є


11

Я працюю над додатком для обробки зображень, який використовує дискретні перетворення фур’є для здійснення розмивання / різкості. Додаток більш-менш працює, але щось про механіку мене все ще бентежить.

Зокрема, саме так відбувається процес центрування нульових частот.

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

Згідно з примітками, це еквівалент заміни квадрантів матриці шляхом прогортання по осі і y .xy

Я розумію, чому це робиться, і я хотів би наголосити, я розумію, що в мене працює код / ​​Фур’є, я просто не розумію, чому множення вхідної матриці на 1 / -1 закінчується центром нульової частоти компонента навколо 0.

Дякую


Ви також можете знайти посилання в главі 4, 4.6-Впровадження з цифрової обробки зображень Гонзалеса (у мене є друге видання). Сподіваюся, це допомагає.
хакунамі

Відповіді:


18

Ой! Який крутий трюк! Це працює завдяки теоремі згортки (тобто множення в просторовій / часовій області еквівалентно згортці в частотній області.)

xy

Ось тестове зображення: тестове зображення. Це перетворення Фур'є виглядає так:перетворення тестового зображення

Якщо взяти перетворення Фур'є змінного зображення ( зображення шахівниці), це призводить до однієї точки в самому центрі Фур'є: введіть тут опис зображення. (Нагадаємо, ми ще не здійснили обертання, тому центром трансформації фур'є є високі частоти, а низькі частоти все ще в кутах.) Але це "ядро обертання!" Об'єднання за допомогою цього ядра обертання переміщує все вниз і вправо (але речі, які випадають праворуч знизу, повертаються вгору ліворуч.)

Згортка вихідного зображення з обертанням ядра (в області зображення) дає вам: переплетене зображення, в той час як згортку перетворенню Фур'є зображень з ядром обертання (в частотної області) дає вам: обертається трансформація фур'є.

І ми можемо перевірити , що множення testimage на шахівниці в області графічних зображень дає зображення множення, що має перетворення Фур'є: знову обертається трансформація фур'є.


Я збентежений. Це використовується згортка для реалізації fftshiftфункції, подібної? Чи не обчислювально дешевше просто переставити 4 квадрати безпосередньо?
ендоліт

2
Тут немає прямої згортки. Для цього використовується піксельне множення в області зображення, щоб отримати еквівалент згортки в області фур’є. Так, fftshiftне дуже дорого, але цей трюк може мати кращу поведінку кешу. Мультиплікація пікселів насправді просто перевертає знак кожного іншого пікселя. Так легко векторизувати, запис read-modify-write є гарантованим зверненням до кешу, і процесор легко попередньо вибирає прочитані.
Мандрівна логіка

О так, це знаковий переворот, а не справжнє множення.
ендоліт

Чому перетворення Фур'є тестового зображення (друге зображення) виглядає так? Я фактично бачу два зображення, чорне над іншим.
хакунамі

10

Відповідь мандрівної логіки правильна і детальна. Я просто подумав, що ви хочете побачити математику замість фотографій:

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

Ефект полягає в тому, що нульова частота - яка раніше була в індексі 0 - зараз знаходиться на половині ширини зображення (або висоти, залежно від того, чи ви множите стовпці або рядки).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.