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