Правильное использование fft2 и fftshift для формы от затенения
Я пытаюсь воссоздать классическую форму из алгоритма затенения, который можно увидеть в тексте Trucco / Verri «Вводные методы для 3D-компьютерного зрения», но мне трудно понять функцию fft в matlab. По сути, мне нужно использовать ограничение интегрируемости, чтобы получить глубину (Z) изображения. Я не уверен, когда использовать fftshift или нет в этом сценарии. Вот код, который у меня есть. На основеhttp://www.mathworks.com/matlabcentral/newsreader/view_thread/285244 Я в основном обернул все свои fft2 в fftshifts, но я не думаю, что это правильное использование. Может кто-нибудь объяснить, пожалуйста, использование и что я делаю не так? Спасибо. По сути, я пытаюсь взять мои p и q (значения, которые являются обновлениями, основанными на интенсивности пикселей), преобразовать их в область Фурье, чтобы использовать их в уравнении C. Затем я хочу преобразовать уравнение C обратно в временная область, потому что это даст мне Z глубину. Я также хочу обновить P и Q на основе C в домене Фурье.
wx = (2.* pi .* x) ./ m;
wy = (2.* pi .* y) ./ n;
wx = ifftshift(wx); wy=ifftshift(wy);
Cp = fftshift(fft2(fftshift(p)));
Cq = fftshift(fft2(fftshift(q)));
C = -1i.*(wx .* Cp + wy .* Cq)./(wx.^2 + wy.^2);
Z = abs((ifft2(ifftshift(C))));
p = ifftshift(ifft2(ifftshift(1i * wx .* C)));
q = ifftshift(ifft2(ifftshift(1i * wy .* C)));