[BlueLeaf1336]> PROBLEMS> パターン認識への長い道のり>
history | TOP |
2006/04/29:作成
2006/04/29 | TOP |
ココまでに、点や点の配列の(へっぽこな)アフィン変換の処理、なにがしかの評価はできる二つの画像の似ている度の計算、画像のグレースケール変換処理はなんとか準備しました。
なんとはなしに書き散らしているので、まとめることにしました。
まず、アフィン変換処理はクラスにまとめているので、それ以外のところ、つまり、原画像を保持する・テンプレート画像を保持する、テンプレート画像を「平行移動・回転移動・拡大縮小」したときの原画像の対応する箇所との似ている度の評価、を行う処理をクラスにまとめることにしました。
実際には、前回(4/24)からだらだらとまとめようとしていたんですが、しょうもないところで躓いてしまってもう少しで飽きてしまうところでした。が、なにはともあれ形になったので公開します。
実行結果 | TOP |
ImageHolder.zip(279,427Bytes) ソースコードと実行ファイルです。いつものとおり画像ファイルをフォームに抱え込んでいるので、えらくサイズがでかくなってますが、中身のほうはサイズに比例してません。
ずっと原画像をデジカメで撮った写真でテストしていたんですが、もうひとつ評価結果が納得いかなかったので(評価方法に根本的な問題があるともいいますが)、もっとわかりやすいアイコンの並んでいる画像を原画像、その中のひとつのアイコンをテンプレート画像として、テストすることにしました。
このプログラムでは、原画像上でマウスをドラッグすることでテンプレートとの一致を評価させたい領域を「手動」で指定します。このとき、評価対象となった領域の画像を画面中央下に表示し続け、評価結果を右下に 0 から 1 の実数値で表示します。1 のときが完全一致(と評価した)で、図は、まさにその状態をキャプチャしたものです。
ここまできたら、後一歩。パターン認識の入り口にたどり着いたといえると思います。今後の方針も自動的に決まります。つまり、原画像内でテンプレート画像に(できるだけ)一致する場所を自動的に探すわけです。
単純に思いつくのは、左上から右下に向かって1ピクセルずつずらしていく方法ですが、今回の場合、回転・拡大縮小があるので評価する回数があまりにも爆発してしまいます。
回転移動は、実際のところ -30度 ~ +30度程度で 1度 刻みで十分だろうし、拡大縮小もテンプレート画像のサイズを今回のテストのように 32x32 程度とするなら、1倍 ~ 10倍程度(0.1刻み?)としてよいと思います。それでも、回転について60、拡大について100、これをまじめに評価すると 6000回。しかもこれが平行移動を決めた後のある1箇所についての場合の数となります。ありえません。
そこで、テキスト(C言語による画像処理入門)にしたがって、遺伝的アルゴリズムを使うことにします。あー。やっとココまで来た。
EOF | TOP |