Uso correto de fft2 e fftshift para forma de sombreamento

Eu estou tentando recriar uma forma clássica de algoritmo de sombreamento visto no Trucco / Verri texto "técnicas introdutórias para 3d Computer Vision", mas eu estou tendo dificuldade em entender a função fft em matlab. Essencialmente, eu preciso usar a restrição de integrabilidade para obter a profundidade (Z) de uma imagem. Não tenho certeza de quando usar o fftshift ou não neste cenário. Aqui está o código que tenho até agora. Baseado emhttp://www.mathworks.com/matlabcentral/newsreader/view_thread/285244 Eu basicamente envolvi todos os meus fft2s em fftshifts, mas eu não acho que esse seja o uso correto. Alguém poderia me explicar o uso e o que estou fazendo errado? Obrigado. Basicamente, eu estou tentando pegar meu peq (valores que são as atualizações baseadas em intensidades de pixel) transformá-los no domínio de Fourier, de modo a usá-los na equação C. Então eu quero transformar a Equação C de volta para o domínio do tempo, porque isso vai me dar Z a profundidade. Eu também quero atualizar P e Q com base em C no domínio de Fourier.

    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)));

questionAnswers(1)

yourAnswerToTheQuestion