2011-03-24 2 views
2

그래서 나는 Numpy와 파이썬에서 회절에 대한 숙제를하고있었습니다. 나의 결과는 그들이 어떻게 가져야하는지 간단하게 밝혀 내지 않을 것이고, 나는 혼란스러워했다. -Matlab과 Numpy + Python FFT2 간의 불일치?

http://imgur.com/a/3Cw81#EdFoA 지금 무슨 일이 여기에 무슨 일>

Python: 
aperaturearray = np.array(im) # Turn image into numpy array 
Ta = np.fft.fftshift(np.fft.fft2(aperaturearray)) 
### I did some calculations here ### 
ftfm = Image.fromarray(np.uint8(Utfm)) 
ftfm.save(("Path")) 

Matlab: 
rect = imread('PATH\pyRectangle.jpg'); 
rectfft = fft2(rect); 
imwrite(rectfft, 'C:\Users\Dan\Documents\python\DiffPhotos\matlabRectfft','jpg') 
pyrectmat = ifft2(pyfftrect); 
imwrite(pyrectmat, 'Path','jpg') 

이미지는 현재 다음과 같이

난의 FFT를 생성하는 데 사용되는 코드는? 왜 FFT 이미지가 그렇게 다른가요? 구현이 다릅니 까? 왜 내 숙제 코드가 작동하지 않는가? (

+1

질문에 대한 답변을 드릴 배경이 없지만 파이썬 비트를보고 "im"변수를로드하는 방법에 대해 좀 더 자세히 설명해주십시오. "### 여기에 계산을 한 것 # ## "은 Ta와 Utfm이 무엇인지, 어떻게 관계가 있는지 등을 의미합니다. 코드와 사용자가 찾고있는 것을 이해하면 질문에 답하는 것이 중요하며 솔직히 사람들이 얼마나 유용하게 사용할 수 있는지를 알지 못합니다 당신이 준 파이썬 스 니펫의 것들에 대한 정보. (Matlab 비트에서 누락 된 조각이있을 수도 있지만, 나는 그것을 평가할 능력이 적다.) –

답변

1

처음에는 Matlab에서 fft2에서 반환 된 값이 복잡합니다. imwrite가 어떻게 처리 할 지 확신하지 못합니다.이 코드를 사용하면 거의 현명한 결과를 얻을 수 있습니다. 결과. 화소 인덱스 아마도 화상의 공간 주파수와 관련되어 있기 때문에 화상이 원점에 대해 오프셋

rect = imread('rect.jpg'); 
rectfft = fft2(rect); 
pcolor(log10(abs(rectfft))); 
shading flat 

합니다 (LOG10 촬영 디스플레이에 도움). 낮은 공간 주파수 0,0 부근에 나타나는 예 더 높은 픽셀 표시는 이러한 주파수의 별칭입니다. 일부 행렬 조작으로 가운데에 (0,0)을 넣으려면 이미지를 재정렬 할 수 있습니다.

2

mor22의 답변에 추가하려면 :

Matlab에서는 fftshift를 사용하여 최저 주파수를 중앙으로 옮길 수 있습니다. 꼭 필요한 것은 왼쪽 상단을 오른쪽 아래 사분면 (그리고 오른쪽 상단은 왼쪽 하단)과 바꿔 넣는 것입니다.

+2

또한 파이썬 측에서 : numpy.fft.fftshift'와'numpy.fft.ifftshift'. –