前回の続き。今回は画像に対するフーリエ変換です。 前回は一次元の話でしたが、画像の場合は平面なので水平/垂直方向の2つの周波数を持つことになります。 実際に画像に対して二次元フーリエ変換を行うには、 x軸方向に一次元フーリエ変換 → y軸方向に一次元フーリエ変換 という手順で処理します。 ここでは、前回作ったクラスを少し拡張します。 ・2D-FFT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
public function fft2d(re:Vector.<Number>, im:Vector.<Number>):Boolean { var tre:Vector.<Number> = new Vector.<Number>(re.length, true); var tim:Vector.<Number> = new Vector.<Number>(im.length, true); // x軸方向のFFT for(var y:int=0; y<n; y++) { for(var x:int=0; x<n; x++) { tre[x] = re[x + y*n]; tim[x] = im[x + y*n]; } fft(tre, tim); for(var x:int=0; x<n; x++) { re[x + y*n] = tre[x]; im[x + y*n] = tim[x]; } } // y軸方向のFFT for(var x:int=0; x<n; x++) { for(var y:int=0; y<n; y++) { tre[y] = re[x + y*n]; tim[y] = im[x + y*n]; } fft(tre, tim); for(var y:int=0; y<n; y++) { re[x + y*n] = tre[y]; im[x + y*n] = tim[y]; } } return true; } |
入力画像を二次元フーリエ変換して振幅特性を輝度とするスペクトル画像を生成します。…