2014-04-24 2 views
1

이미지 향상을위한 코드를 구현하고 푸리에 및 역 푸리에 변환을 적용하려면 아래 코드를 사용하지만 결과적으로 이미지가 검은 색이됩니다.역 푸리에 변환 함수가 잘못된 결과를 나타냅니다.

F = fft2(image); F = fftshift(F); % Center FFT 
F = abs(F); % Get the magnitude 
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined 
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1 
Y = ifft2(F); 
subplot(1,1,1); 
imshow(Y,[]); % Display the result 
+0

많은 fft/ifft 구현은 결과가 NxM에 의해 스케일되어 결국 "normal"로 다시 스케일됩니다. Matlab이 그 중 하나인지 아닌지를 기억하지 못합니다. . fft의 fft (여러 방법으로 fft를 처리했습니다)를 수행하지 않으므로 결과는 아마도 원하는 결과가 아닐 것입니다 ... – twalberg

+0

[이 질문과 동일하게 실수를하지 마십시오] (http://stackoverflow.com/questions/19744543/why-isnt-the-inverse-fourier-transform-giving-the-correct-results#comment29339182_19744543). 거기에있는 의견을 고려하십시오. – chappjc

답변

2

당신은 이미지로 실제 순수 (긍정적) 인 매트릭스, abs(F)의 역 FFT를보십시오. 그것의 역 FT는 복잡한 것입니다. 원래 FT의 위상을 잃어 버렸기 때문에 이상한 결과를 얻습니다 (거의 검은 색 이미지, 결국 첫 번째 픽셀은 흰색 ...).

F = fft2(image); F = fftshift(F); % Center FFT 
Fp = angle(F); % Get the phase 
F = abs(F); % Get the magnitude 
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined 
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1 
Y = real(ifft2(ifftshift(F.*exp(1i*Fp)))); 
subplot(1,1,1); 
imshow(Y,[]); % Display the result 
:

두 번째 오류, 당신은 FFT의 위상을 유지해야 할 몇 가지 계산을 할 수있는 FFT를 이동,하지만 당신은 당신이 원하는 것을 들어

전에 변화를 반전하지 않습니다

참고 : Matlab은 실제 출력 인 경우에도 FT (직접 또는 역) 출력으로 복잡한 배열을 자동으로 생성하므로 역 FFT의 실수 부분을 가져와야합니다. 내 컴퓨터에 max(abs(imag(Y(:)))), 6e-11의 값이 있으면이 값을 확인할 수 있습니다.

+0

당신이 맞을지도 모르지만 나는 이미지 처리에있어서 새롭기 때문에 이러한 것들을 포함하는 것에 대해서는별로 모른다. – user1548346

+0

코드를 적용했지만 불행히도 흰색 픽셀이없는 동일한 결과를 제공합니다. – user1548346

+0

@ user1548346 ifft2의 출력은 복잡합니다. 내 편집을 참조하십시오. – Bentoy13

관련 문제