Uso correcto de fft2 y fftshift para la forma del sombreado

Estoy intentando recrear una forma clásica del algoritmo de sombreado que se ve en el texto de Trucco / Verri "Técnicas introductorias para la visión por computadora en 3D", pero me está costando entender la función FFT en Matlab. Esencialmente, necesito usar la restricción de integrabilidad para obtener la profundidad (Z) de una imagen. No estoy seguro de cuándo usar fftshift o no en este escenario. Aquí está el código que tengo hasta ahora. Residencia enhttp://www.mathworks.com/matlabcentral/newsreader/view_thread/285244 Básicamente envolví todos mis fft2s en fftshifts, pero no creo que este sea el uso correcto. ¿Podría alguien explicarme el uso y lo que estoy haciendo mal? Gracias. Básicamente, estoy tratando de tomar p y q (valores que son las actualizaciones basadas en intensidades de píxeles) transformarlos en el dominio de Fourier para usarlos en la ecuación C. Luego quiero transformar la Ecuación C de nuevo a la Dominio del tiempo porque eso me dará Z la profundidad. También quiero actualizar P y Q según C en el dominio 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)));

Respuestas a la pregunta(1)

Su respuesta a la pregunta