エッジ検出(5) エッジの方向(1)
2010/01/29 21:47 - AS3.0
今まで説明してきたエッジ検出ですが、水平と垂直など、90度で交差する二つの BitmapData からエッジを求めるという話でした(除くラプラシアン)。
今回の話は、そのエッジ検出のノウハウを使用しますが、エッジ検出とはちょっと毛色の違った処理の話です。
この二つの BitmapData を使って、エッジの方向を求めることができると「実践画像処理入門」P55~58 には書かれています。
またしても例の如く微分式が提示されていますが、わたくし良く分かりません。 興味のある方は実際に本に当たってください。
ところで、エッジの「方向」って何やねん? 輪郭に方向って概念が存在するもんなの?
本にはそのエッジの方向を求めるためのプログラム(C言語)が書いてあるので、それを元に ActionScript でプログラムを組んでみました。
で、できたものが→。
上から(1)原画、(2)ゾーベルによるエッジ検出、(3)エッジ方向の表示、です。
どんな処理の結果このような SWF になったのかという詳細は実際のコードを見てもらうとして(試す場合は画像ファイルのエンベッドは適宜書き換えてくださいね。あとグレイスケールと平滑化のエフェクタは wonderfl に投稿したウェブカム・エフェクトのコードから引っ張って、ドキュメントクラスの import 分は削除してくださいっす)、キモの部分は以下のとおり。
- ConvolutionFilter を適用した二つの BitmapData を走査
- それぞれの BitmapData の同一座標の色から青の要素を抽出(グレイスケール化してるから、どの色要素でも同じこと)
- Math.atan2 の引数にそれらの青要素を代入して、角度を計算
この atan2 で得られた角度が「エッジの方向」なんだそうです。
でも何かよく分かんないなー。帽子の輪郭が見えると言えば見えるけど。 そんなわけで次回はこのエッジの方向をもうちょっと見た目分かりやすいものにしますよ。