Я пытаюсь научить себя некоторым основам FFT, используя python. На данный момент я пытаюсь воспроизвести результат дифракции Matlab FFT2 с использованием python и связанных библиотек.Преобразование примера дифракции Matlab fft2 в Python
Пример, который я пытаюсь моделировать можно найти здесь: http://www.mathworks.ch/ch/help/matlab/math/fast-fourier-transform-fft.html#brfb2vw-3
В нижней части страницы вы увидите этот MatLab код:
D1 = fft2(M);
D2 = fftshift(D1);
imagesc(abs(D2))
axis image
colormap(hot)
title('{\bf Diffraction Pattern}')
Это превращает преобразует круговую диафрагму изображения (они фактически создают это как массив, если это имеет значение) в дифракционную картину.
[Круговая диафрагма] www.mathworks.ch/help/releases/R2013b/matlab/math/aperture.gif
[результат вычисления в Matlab] www.mathworks.ch/help/releases/R2013b/ matlab/math/difraction1.gif
Проблема в том, что, когда я беру свое изображение с круговой апертурой (как графическое изображение) и применяю эквивалентные инструкции Scipy FFT2, я получаю другой результат. Почему это различие и каков правильный способ создания дифракционной картины. Есть ли аналогичные ошибки для возврата от дифракционной картины обратно к образу, который сделал это? Это работает только в том случае, если вы создаете апертуру как массив?
Мой питон код выглядит следующим образом:
import sys
import numpy as np
import pylab as py
from scipy import misc, fftpack
image = misc.imread(sys.argv[1])
D1 = fftpack.fft2(image)
D2 = fftpack.fftshift(D1)
abs_image = np.abs(D2)
py.imshow(abs_image)
py.show()
Я скачал и использовали их круговую диафрагму изображения в качестве входных данных (после обрезки весов и т.д.), но я получаю цветной перекрестие на синем фоне в виде результат. Есть что-то похожее на маленькую точку посреди перекрестия. Является ли этот результат результатом того, что я использую загруженное изображение с круговой апертурой с его квадратными краями или это связано с кодом?
Большое спасибо заранее
Спасибо. Простое объяснение, простой ответ, вера восстановлена :) – user3090569
Рад помочь :) Если вы считаете, что это правильно ответит на ваш вопрос, пожалуйста, примите ответ, нажав на значок галочки слева от него. –