PythonでのFFT実装に問題があります。私は完全に奇妙な結果があります。 さて、画像を開き、RGBのすべてのピクセルの値を取得したい場合は、fftを使用して画像に再度変換する必要があります。Pythonでの画像のFFT
私の手順は:
1)私はこの
from PIL import Image
im = Image.open("test.png")
2)私は取得していますピクセル
pixels = list(im.getdata())
)私は」のようなPythonでPILライブラリでイメージを開いています各画素をr、g、bの値に分離する。
for x in range(width):
for y in range(height):
r,g,b = pixels[x*width+y]
red[x][y] = r
green[x][y] = g
blue[x][y] = b
4)。 1つのピクセル(111,111,111)があるとします。そして、この
red = np.fft.fft(red)
など、すべての赤の値に対してFFTを使用します。
print (red[0][0],green[0][0],blue[0][0])
私の出力は次のようになります。
は(53866+0j) 111 111
それは私が考える完全に間違っているのです。私の画像は64x64で、gimpからのFFTは全く違っています。実際には、私のFFTは私に巨大な値を持つ配列しか与えないので、私の出力イメージは黒です。
どこに問題がありますか?
[EDIT]
私は
red= np.fft.fft2(red)
に示唆されているように変更したその後、私は
scale = 1/(width*height)
red= abs(red* scale)
そして、まだ、Imは黒のみの画像を取得し、それを拡張。
[EDIT2]
は、私はそれを開いて、グレースケール画像として保存したくないと仮定します。だから私はこのようにやっている。
def getGray(pixel):
r,g,b = pixel
return (r+g+b)/3
im = Image.open("test.png")
im.load()
pixels = list(im.getdata())
width, height = im.size
for x in range(width):
for y in range(height):
greyscale[x][y] = getGray(pixels[x*width+y])
data = []
for x in range(width):
for y in range(height):
pix = greyscale[x][y]
data.append(pix)
img = Image.new("L", (width,height), "white")
img.putdata(data)
img.save('out.png')
この後、私はこの画像を得ています。これは問題ありません。だから今、私はイムは、それをロードした後、この
scale = 1/(width*height)
greyscale = np.fft.fft2(greyscale)
greyscale = abs(greyscale * scale)
のようにやって、私は、新しいものに保存します前に、私のイメージにFFTを作りたいです。ファイルに保存した後、私はを持っています。ですから、gimpでtest.pngを開き、FFTフィルタプラグインを使用してみましょう。私はそれを処理することができますどのように
正しいか、このイメージを、取得していますか?
イメージをお持ちの場合は、2d離散フーリエ変換で 'fft2'を使用することをお勧めします。http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fft2.html – giosans
私は質問に大きなXY問題があると思う(http://meta.stackexchange.com/a/66378/262011)。あなたが本当にやろうとしていることを教えてください*。実装する特定のアルゴリズムはありますか?また、サンプル画像と、GimpのFFTが生成するもの(Pythonで試してみたいもの)を見せてもらえますか? –
FFTを画像として保存するコードを共有してください。 – Vovanrock2002