Richtige Verwendung von fft2 und fftshift für Formen aus Schattierungen

Ich versuche, eine klassische Form aus dem Schattierungsalgorithmus im Trucco / Verri-Text "Introductory Techniques for 3d Computer Vision" (Einführungstechniken für das 3D-Computer-Sehen) wiederherzustellen, habe jedoch Schwierigkeiten, die fft-Funktion in matlab zu verstehen. Im Wesentlichen muss ich die Integrierbarkeitsbedingung verwenden, um die Tiefe (Z) eines Bildes zu erhalten. Ich bin nicht sicher, wann ich fftshift verwenden soll oder nicht in diesem Szenario. Hier ist der Code, den ich bisher habe. Beyogen aufhttp://www.mathworks.com/matlabcentral/newsreader/view_thread/285244 Ich habe im Grunde alle meine fft2s in fftshifts gewickelt, aber ich denke nicht, dass dies die richtige Verwendung ist. Könnte mir bitte jemand den Gebrauch erklären und was ich falsch mache? Vielen Dank. Grundsätzlich versuche ich, meine p- und q-Werte (Werte, bei denen es sich um Aktualisierungen handelt, die auf Pixelintensitäten basieren) in den Fourier-Bereich umzuwandeln, um sie in der Gleichung C zu verwenden Zeitbereich, denn das gibt mir Z die Tiefe. Ich möchte auch P und Q basierend auf C in der Fourier-Domäne aktualisieren.

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage