これは多くの話題ですが、まだ私はまだ答えられていない問題があります。 私の問題はそれ自身の方法ではなく、むしろ適用可能です: 私の画像のf(x、y)は、負または正のになることができる物理的な値を表します。中央値に相当するピークをマスクすると、逆FFTの適用後に複雑な画像が得られます。定期的なノイズのFFT除去
この縫い目はimage!= ifft(fft(image))の場合、image!= imageと論理的に結びついています。
したがって、私の画像配列の絶対値を取ってきれいにきれいになった画像を得ることができます。しかし、画像のABSを取ることによって私は負の値を失ってしまった!
私のコードは複雑であり、私は必需品にブレークダウンしますマスクする正しい位置を見つけるために複数の画像を使用しています。
def everything(fft,fftImage,sizeOfField,shapeOfFFT):
max_x = []
max_y = []
median = np.median(fft)
threshold = 500
#correctLocalMax() holds several subfunctions that look for the propper max_x and max_y. This works fine and returns 2 lists max_x,max_Y that contain the coordiantes of the max's
max_x,max_y = correctLocalMax(iStart = 0,iStop = 30, jStart =0 , jStop = shapeOfFFT[1],threshold=threshold, max_x = max_x, max_y = max_y)
for i in range(len(max_x)):
for k in range(sizeOfField):
for l in range(sizeOfField):
fftImage[max_x[i]+k][max_y[i]+l] = median
return(fftImage)
image, coverage, stdev = pickleOpener(dataDir,i)
field = getROI(image,area,i0,j0)
fftImage = np.fft.fft2(image)
fftImage = np.fft.fftshift(fftImage)
fft = np.fft.fft2(coverage)
fft = np.fft.fftshift(fft)
fftMod = everything(fft, fftImage, sizeOfField, shapeOfFFT)
imageBack = np.fft.ifft2(fftMod)
imageBack = np.abs(imageBack)
field = getROI(imageBack,area,i0,j0)
私が持っていると、このような外観を処理した後に取得した画像を: ストライプパターンは、私が
を削除したいものであるこれらは、FFTに適用されるマスクです
ストライプパターンはほとんど削除されていますが、画像は純粋にポジティブです!
コメントには、問題の適切な解決策があります。あなたが最初に元の値の間にあなたの画像を拡大縮小し、多少のように、後で再スケーリングいずれかの :あなたは2つの異なるアプローチを試みることができる
これは本当に素晴らしい質問です。このブログ記事では、何が起こっているのか、非常に一般的な言葉でそれを修正する方法を説明しています:http://blogs.mathworks.com/steve/2010/07/16/complex-surprises-from-fft/しかし、それは1Dであり、対処しませんあなたが解決しようとしている問題。元の画像データをどこかに(ストライプで)ポストできますか? IFFTから実際の出力を得るためにマスクを調整する方法を教えてください。 –
データを尋ねるのを心配しないで、私は 'correctLocalMax'が複雑な関数である方法についての記事を再読します。基本的な問題は、スペクトルをゼロにマスクすると、スペクトルの共役対称性を保つ必要があることです。 –
あなたのスペクトル( 'fft2'の出力、あなたの' fftMod')はすでに共役対称であるべきです:その中のピーク(ここではあなたのストライプに相当します)は、左右対称で、対称的な上から下に向かう。しかし、あなたの 'correctLocalMax'は共役対称ではないマスクを返すようですか?それを修正すれば、コードが機能するはずです。 –