引き続き、空間周波数領域での画像処理について。
前回、前々回と扱っていたスペクトル画像は周波数成分の振幅特性を表したものでした。
今回は画像の位相特性に注目し、位相画像を生成します。
(位相画像は位相限定画像とも呼ばれる)
FFT演算用クラスはこれまで利用してきたものと同じものです。
(ここではスペクトル位置の並び替え部分は不要なのでその部分の処理は省略できます)
・位相画像の生成
[as]
package {
import __AS3__.vec.Vector;
import flash.display.*;
public class Test extends Sprite {
[Embed(source = ‘./assets/gray.jpg’)]
private var EmbedImage:Class;
private var srcBmp:Bitmap;
private var dstBmp:Bitmap;
private var imgData:BitmapData;
private var fftTest:FFT;
private var re:Vector.
private var im:Vector.
private var tmp:Vector.
private var max:Number = 0.0;
private var data:Number = 0.0;
private var w:int = 0;
private var h:int = 0;
private var bias:int = 0;
public function Test() {
srcBmp = new EmbedImage() as Bitmap;
imgData = srcBmp.bitmapData.clone();
w = imgData.width;
h = imgData.height;
fftTest = new FFT(w);
re = new Vector.
im = re.concat();
tmp = re.concat();
// 画像データの直列化
for(var y:int=0; y
re[i] /= tmp[i];
im[i] /= tmp[i];
}
// 逆2D-FFT
fftTest.fft2d(re, im, true);
// 8ビットに正規化 (表示用)
max = 0.0;
bias = 32;
for(var i:int=0; i
}
for(var i:int=0; i
if(data<0) data = 0;
color = data<<16 | data<<8 | data;
imgData.setPixel(x, y, color);
}
}
dstBmp = new Bitmap(imgData);
addChild(srcBmp);
addChild(dstBmp);
dstBmp.x += w;
}
}
}
[/as]
・出力結果
スペクトルを振幅で正規化することにより画像の位相成分のみを取り出しています。
また、一般的にこの位相画像はエッジ画像と似た画像になることが知られています。
これは高周波成分に含まれているエッジ情報が、正規化することによって強調されるためです。
このように位相成分には照明変化にロバストな構造的特徴量が多く含まれるため、
位相成分のみを用いてパターン認識を行う手法もいくつか提案されています。
・関連記事
ハイパス/ローパスフィルタ
二次元離散フーリエ変換 – AS3.0
離散フーリエ変換 – AS3.0