Фурье-фильтрация, возвращаясь к изображению - PullRequest
0 голосов
/ 27 августа 2018

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

red_cube_array = (cube_array - np.median(cube_array)) * taper

im_fft  = (fftpack.fft2(red_cube_array))
im_po   = fftpack.fftshift((np.conjugate(im_fft) * im_fft).real)

mask = np.empty_like(im_po[0])*0 + 1
mask[417:430, 410:421] = 0
mask[430:443, 438:450] = 0

im_po_mask = im_po * mask

im_ifft = fftpack.ifft2(fftpack.ifftshift(im_po_mask))

taper - это просто массив, сглаживающий края, чтобы избавиться от краевых эффектов при выполнении БПФ. Затем я перевожу массив и очень грубо отфильтрую грязь Однако возвращение не похоже на работу. Я где-то спотыкаюсь?

1 Ответ

0 голосов
/ 27 августа 2018

Проблема возникает в следующей строке:

im_po = fftpack.fftshift((np.conjugate(im_fft) * im_fft).real)

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

Для решения проблемы просто примените маску к комплексной частотной области im_fft data:

im_po = fftpack.fftshift(im_fft)

mask = np.empty_like(im_po[0])*0 + 1
mask[417:430, 410:421] = 0
mask[430:443, 438:450] = 0

im_po_mask = im_po * mask
...