Как вычислить производную функции через область Фурье? - PullRequest
0 голосов
/ 11 марта 2019

В настоящее время я работаю над проектом, в котором мне нужно реконструировать изображение по его градиенту путем решения уравнения Пуассона, которое мы решаем в области Фурье.

Решение включает произведение FT изображения и фильтра дискретного вывода. В области Фурье это определяется как координатное произведение двух.

Я понимаю, как вычисляется FT изображения, но у меня возникают проблемы с пониманием того, как мне рассчитать фильтр, как [0 -1 1] для горизонтальных разностей. Должен ли я использовать ту же формулу, что и для изображений? Это кажется мне странным, так как я бы сохранил только 2 компонента своего FT после умножения его на FT изображения.

1 Ответ

0 голосов
/ 11 марта 2019

Чтобы вычислить свертку через область Фурье, сначала нужно заполнить ядро ​​нулями, чтобы иметь тот же размер, что и изображение, затем вычислить БПФ как изображения, так и дополненного ядра, а затем умножить эти два частотных спектра.Важно, чтобы при заполнении источник ядра был в правильном месте.См. этот ответ для получения подробной информации о том, как правильно выполнить заполнение.

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

Фильтр [1,0,-1] (или [0,1,-1] или любое другоехочу использовать) представляет собой дискретное приближение к производной.Если вы пройдете через область Фурье, вы также можете вычислить точные производные.

Например, в MATLAB вы должны сделать:

a = imread('cameraman.tif');
A = fft2(a);
N = size(A,2); % we're computing the x-derivative here, that is dimension 2 in MATLAB
w = ifftshift((0:N-1)-floor(N/2)) * (pi / N);
B = A .* (1i * w); % for MATLAB R2016a and older, use bsxfun here
b = real(ifft2(B));
...