Trucco/Verri のテキスト「Introductory Techniques for 3d Computer Vision」に見られるシェーディング アルゴリズムから古典的な形状を再現しようとしていますが、matlab の fft 関数を理解するのに苦労しています。基本的に、画像の深さ (Z) を取得するには、可積分性制約を使用する必要があります。このシナリオで fftshift を使用するかどうかはわかりません。ここに私がこれまでに持っているコードがあります。http://www.mathworks.com/matlabcentral/newsreader/view_thread/285244に基づく 私は基本的にすべての fft2 を fftshift でラップしましたが、これは正しい使い方ではないと思います。誰かが私に使用法と私が間違っていることを説明してもらえますか? ありがとうございました。基本的に、私は p と q (ピクセル強度に基づいて更新された値) をフーリエ領域に変換して、式 C で使用しようとしています。次に、式 C を変換して時間領域です。これにより、Z の深さが得られるからです。また、フーリエ領域の C に基づいて P と Q を更新したいと考えています。
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)));