2010-04-16 3 views
3

이미지의 푸리에 변환을 만들고 싶습니다. 그러나 그림을 배열로 어떻게 바꿀 수 있습니까? 그리고이 후 변환을 위해 numpy.fft.rfft2를 사용해야한다고 생각합니다. 배열에서 이미지로 다시 변경하는 방법은 무엇입니까? 미리 감사드립니다. fft와 배열 - 이미지/이미지 - 배열 변환

답변

12

PIL 라이브러리를 사용하여 이미지를로드/저장하고 numpy 배열로 /에서 변환 할 수 있습니다. 는 FFT의 결과가 복잡한 값을 가지고 있기 때문에 정말 이미지로 직접 변환하는 이해가되지 않도록

import Image, numpy 
i = Image.open('img.png') 
i = i.convert('L') #convert to grayscale 
a = numpy.asarray(i) # a is readonly 

b = abs(numpy.fft.rfft2(a)) 

j = Image.fromarray(b) 
j.save('img2.png') 

나는 위의 abs을 사용했다. 그레이 스케일로의 변환은 FFT가 단일 채널에서만 수행되도록 수행됩니다. 채널을 선택하는 다른 방법을 선택하거나 매개 변수를 rfft2으로 전달한 다음 필요한 채널을 추출합니다.

편집 :

또한 역 FFT를 수행하고 원본 이미지, 나를 위해 다음과 같은 작품을 다시 얻을 :

import Image, numpy 
i = Image.open('img.png') 
i = i.convert('L') #convert to grayscale 
a = numpy.asarray(i) 

b = numpy.fft.rfft2(a) 
c = numpy.fft.irfft2(b) 

j = Image.fromarray(c.astype(numpy.uint8)) 
j.save('img2.png') 
+0

링크 : http://www.pythonware.com/products/pil/ – Personman

+0

역 fft를 만들 때 실제 이미지를 되 찾을 수 없습니다. 왜? – kame

+2

@kame'abs'를 호출하면 데이터가 손실되기 때문입니다. 또한 원본 이미지는 회색조 여야합니다. 그렇지 않으면 2D 대신 3D 배열이 생성됩니다. – interjay