2016-11-25 2 views
1

Я пытаюсь реализовать на python некоторые функции, которые преобразуют изображения в их пространственный диапазон и наоборот для задач обработки изображений.
Я реализовал 2D-DFT с использованием повторного 1D-DFT, и он работал нормально, но когда я попытался реализовать 2D-обратный ДПФ с использованием повторного обратного 1D-DFT, возникла какая-то странная проблема - когда я преобразовываю изображение в его дальний домен и затем обратно в область изображения, это выглядит как изображение было отражено и слился с его отражением, как можно видеть здесь:Внедрение 2D-обратного преобразования Фурье с использованием 1D-преобразований

это вход:

img

и это выход

img

Это функция, которая отвечает за беспорядок:

def IDFT2(fourier_image): 
    image = np.zeros(fourier_image.shape) 
    for col in range(image.shape[1]): 
     image[:, col] = IDFT1(fourier_image[:, col]) 

    for row in range(image.shape[0]): 
     image[row, :] = IDFT1(image[row,:]) 

    return image 

Что я сделал не так? Я почти уверен, что IDFT1 работает отлично, а также обычный 2D-DFT.

+0

Почему у вас IDFT1 (fourier_image [:, col]) для столбцов и IDFT1 (изображение [строка ,:]) для строк, а не IDFT1 (fourier_image [строка,:])? Укажите код IDFT1. – DimKoim

+0

Как я понял, на втором проходе (строках) мне нужно оперировать над выходом предыдущей ступени (проход над колонками). Я ошибаюсь? –

+0

@montecarlo вы редактируете изображения (я их добавляю), скорее всего, по ошибке. Это '! [Bla bla] [1]' в методе разметки означает первую ссылку на изображение из списка ссылок в конце. символ '!' означает изображение без него, просто ссылка – Spektre

ответ

2

Я не использую Python поэтому я не уверен, анализировать свой код, но моя ставка является то, что вы, скорее всего, забыли реализовать комплексные значения на каком-то этапе ....

должно быть:

  1. DFT строки из реального в комплексной области
  2. ДПФ столбцов результата от комплекса к комплексной области
  3. применять нормализацию при необходимости
  4. любой или ни обработка ...
  5. IDFT строки из комплекса в комплексную области
  6. IDFT столбцов результата от комплекса до действительной области
  7. применять нормализацию при необходимости

если вы используете только реальный комплексный домен DFT/iDFT во втором проходе (пули # 2, # 6), то это создаст зеркальное отражение, потому что DFT реальных значений является зеркальной последовательностью ... Btw. это не имеет значения, если вы сначала обрабатываете строки или столбцы ... также вы можете обрабатывать строки сначала в DFT и столбцы сначала в iDFT результат должен быть тем же +/- плавающим ошибкам ...

для получения дополнительной информации см

и все вложенные ссылки там особенно 2D FFT and wrapping example, так что вы можете сравнить свои результаты с чем-то рабочим

+0

вы вернее! строка 'np.real (signal) .astype (np.float32)' преобразует комплексные числа в реальные, когда это не должно. устранение проблемы устраняет проблему. –

+0

@ Надав Боренштейн рад помочь – Spektre

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