Carrego e exibo uma imagem de arroz no Matlab:
g = imread('rice.png');
imshow(g);
Pego a FFT desta imagem e a desloco:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Se eu colocar os eixos ax e y no centro da imagem; Acho que a imagem é simétrica g (-x, -y) = g (x, y). Para um sinal 1D, temos que a FFT de um sinal real tem uma parte real simétrica e uma parte imaginária assimétrica. Eu acho que é o que vemos aqui em 2 dimensões?
Como a imagem original é mais escura na parte inferior do que na parte superior, há uma forte descontinuidade horizontal no limite periódico, causando a linha vertical na FFT.
Eu quero me livrar desse efeito de fronteira. Uma abordagem comum para isso parece ser de janelas .
No entanto, eu quero resolver esse problema por uma técnica que encontrei em um artigo chamado "espelhamento". O documento não era muito específico, por isso preciso da sua ajuda para descobrir essa abordagem :-).
Primeiro, crio um "bloco" simétrico a partir da imagem original:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Agora eu tomo a FFT desse "bloco":
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
A linha vertical parece ter desaparecido (quase): boa. No entanto, o espelhamento parece ter introduzido mais simetria.
Qual é o resultado correto: a FFT da imagem original ou a FFT da imagem "espelhada"?
Existe uma maneira de eu "espelhar" para que eu me livre dos efeitos dos limites e obtenha uma FFT puramente real?
Agradecemos antecipadamente por qualquer resposta!
fonte