Почему FFT не производит автоматически выход с нулевой частотой? - PullRequest
0 голосов
/ 06 июля 2018

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

У меня есть два вопроса относительно этой операции:

  1. Почему DFT не может автоматически центрировать компоненты с нулевой частотой?
  2. Что произойдет, если мы не выполним Shift операцию после ДПФ? То есть Как это влияет на другие наши задачи обработки изображений?
  3. Может кто-нибудь дать мне материал, чтобы узнать об этой конкретной операции под названием Shift ?

Ссылки:
- смещение нулевой частоты к центру изображения
- Почему мы смещаем компонент с нулевой частотой в центр спектра?

1 Ответ

0 голосов
/ 07 июля 2018

DFT, по определению , использует n=0..N-1 и k=0..N-1, где n - индекс в сигнале временной области и k индекс в сигнале частотной области. k также соответствует частоте. DFT определяется таким образом по аналогии с рядами Фурье.

Поскольку частота в ДПФ является периодической, можно думать, что k=N-1 соответствует k=-1. Таким образом, функция сдвига перемещает верхнюю половину частот слева от начала координат, чтобы их можно было легче интерпретировать как отрицательные частоты. Но это исключительно удобно для отображения, так как он приводит сигнал частотной области к форме, с которой мы более знакомы (возможно, потому, что это облегчает объяснение некоторого анализа Фурье, и, следовательно, учебники отображают его таким образом, и, следовательно, мы узнаем о Фурье, взглянув на графики частот с началом координат в середине).

Для большинства задач обработки изображений нам не нужно смещать исходную точку. Опять же, это только для отображения, это удобно и красиво.

Например, для вычисления взаимной корреляции:

cc = ifft( fft(img1) * conj(fft(img2)) )

Здесь верхний левый пиксель cc является источником. Если img1==img2, верхний левый пиксель будет максимальным значением. Если бы у нас была функция fft, которая сместила начало координат в середину, тогда изображение взаимной корреляции cc также получило бы свое начало в середине. После нахождения пика нам нужно будет сделать несколько вычислений, чтобы выяснить, каково смещение между img1 и img2. (Не то чтобы это было сложно, но это показывает, что смещение не обязательно выгодно.)

При свертывании у человека часто есть ядро ​​в пространственной области с центром в середине (как, например, в в этом недавнем вопросе ). В этом случае необходимо сместить начало координат вверху слева, прежде чем вычислять ДПФ. Но нет смысла сдвигать источник сигналов в частотной области только для того, чтобы умножить их вместе, а затем отменить сдвиг. Можно просто напрямую умножить сигналы, которые имеют источник в верхнем левом углу:

kernel = ifftshift(kernel)
filtered = ifft( fft(img) * fft(kernel) )

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

...