0

Я пытаюсь получить спектр полутонового изображения с использованием алгоритма FFT Cooley-Tukey в Java. Я не знаю точно, как сформировать вход для алгоритма и какие значения из вывода использовать для формирования изображения спектра.Каким должен быть вход и выход для преобразования изображения БПФ?

В настоящее время мой вход представляет собой массив комплексных чисел, с Re = значением пикселя в 8-битном градациях серого и Im = 0; После запуска алгоритма я получаю еще один массив комплексных чисел с вещественной частью, имеющей множество значений из диапазона [0,255] и мнимой части 0. Я попытался создать изображение из массива реальных чисел по модулю 256.

Это как спектр должен выглядеть: enter image description here

И это то, что у меня есть:

enter image description here

Очевидно I'me делать что-то ужасное неправильно, но я не знаю, что.

+0

Вы должны опубликовать код, чтобы мы могли попытаться выяснить, где вы поступили неправильно, вы пишете собственный алгоритм FFT или используете библиотеку? – KillaKem

+0

Я реализовал алгоритм из [здесь] (http://example.com), написанный на Java. Я не знаю, как этот код может помочь. – mawus

+0

Ссылка, кажется, сломана – KillaKem

ответ

2

Вы не предоставили исходный код ...

  1. вашего результат выглядит разрешение дерево

    используется для рекурсивного разрешения/масштабирование информации о частоте и извлечение признаков не FFT !! ! Так может быть ваша рекурсия неправильно или перекрывать данные (для кода на месте FFT почти маразм), вы должны начать с 1D преобразования, а затем использовать это для 2D и визуально проверить каждую стадию (а также обратное преобразование для сопоставления исходных данных)

  2. ваш выход FFT должен иметь ноль, мнимую часть !!!

    взгляд здесь How to compute Discrete Fourier Transform и во все суб-ссылки в этом ответе шахты

  3. Ваше разрешение изображения точная мощность 2?

    если не нулевой колодки это или FFT не будет работать должным образом

  4. ваш пример неправильно

    это то, как он выглядит в реальной:

    2D FFT example

    • левый - входное изображение (c opied из Вашего вопроса)
    • середины реальной части
    • права мнимая часть

    вы можете объединить их спектр мощности =sqrt(Re*Re+Im*Im)Re и Im изображения усиливаются видно еще только несколько белые точки в углах будут видны. Вот еще несколько примеров:

    more examples

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

[Edit1] власть и завернуть

добавили мощность и оберните функции шахтного приложения так вот результат:

power and wrap result

первую мощность вычисляется так intensity=sqrt(Re^2+Im^2), а затем завернуть осуществляется путем сдвига изображения на половину размера вправо и вниз. Что перекрывается, что происходит с другой стороны назад, поэтому просто меняйте все точки во всех строках swap((x,y),(x+xs/2,y)) и затем одинаково для всех столбцов swap((x,y),(x,y+ys/2)). Теперь результат совпадает с результатом от OP: here

Смежные вопросы