「FFT」を処理する前に、画像にハニング ウィンドウを適用したいと考えています。Ruben Bjorge によって書かれたスクリプトを見つけました。
number size, sizeX, sizeY, top, left, bottom, right, ii, posX, posY
image front, hannX, hannY, hann, avg, hannout
front := GetFrontImage();
GetSize(front, sizeX, sizeY);
GetSelection(front, top, left, bottom, right);
// Create Hanning window.
ii = 1;
hannX := CreateFloatImage("", (right-left), (bottom-top));
hannX = 0;
hannX[0, 0, 1, (right-left)] = 1 - cos( 2 * Pi() * icol / (right-left));
while( ii < (bottom-top) )
{
hannX[ii, 0, 2*ii, (right-left)] = hannX[0, 0, ii, (right-left)];
ii = ii * 2;
}
ii = 1;
hannY := CreateFloatImage("", (right-left), (bottom-top));
hannY = 0;
hannY[0, 0, (bottom-top), 1] = 1 - cos( 2 * Pi() * irow / (bottom-top));
while( ii < (right-left) )
{
hannY[0, ii, (bottom-top), 2*ii] = hannY[0, 0, (bottom-top), ii];
ii = ii * 2;
}
hann = hannX * hannY;
// Subtract average from image.
avg = front - Average(front);
// Multiply with Hanning window.
hannout = avg[top, left, bottom, right] * hann;
// Do fast Fourier transform and display image.
fft = RealFFT(hannout);
このスクリプトを使用すると、FFT のキャリブレーション スケールが 1 に変更されます。ただし、下の図に示されているように、0.11948 である必要があります。
私の質問は: 画像のキャリブレーション スケールを変更せずにハニング ウィンドウを適用する方法はありますか?
または、元の画像のスケールに関してFFT画像のスケールを計算する方法は?
私のスクリプトの残りの部分では、fft 画像の正しい縮尺が必要なので、誰かがこの長い質問に答えてくれれば幸いです。ありがとう。