二値化(3) ~判別分析法による閾値の自動計算~
2010/03/12 21:48 - AS3.0
2012/01/20 追記
この記事に興味を持たれた方は、より進化した↑をご参考ください。
--------------------------------------------------
前回はBitmapData#threshold を使っておこなう二値化の概要を見ました。
Threshold メソッドというのは、引数として指定した閾値に基づいて処理をおこなうわけですが、その閾値は処理対象の画像によって当然変わってくることが考えられます。 ではその閾値は如何に設定したらよろしかろう、というのが今回のテーマです。
一番確実なのは、ヒストグラムを表示して、閾値を目視で調整する方法らしい。 でもオートマチックを目指す処理工程で、そんなステップは踏めん。
そこで計算に頼る方法の模索になるわけですが、それについては「判別分析法」という名称で先人の業績が積まれていたのでした。
「実践画像処理入門」(P68)および「C言語で学ぶ実践画像処理
」(P25)に、C言語のコード付きで解説がなされています。
その解説によると、ヒストグラムに二つの山ができるときに、計算によってそれぞれの山を切り離す谷を求めるアルゴリズムとのことらしいです。 詳しい話は以下のページを参照してください。
分離度だのクラス間分散だのクラス内分散だの、文章で読んでもよく分からんので、画像処理本にあったC言語のコードを ActionScript 3.0 に翻訳して wonderfl に投稿してみましたよ。
「実践画像処理入門」のP69~71のコードを移植しました。変数名は自分的に分かりやすいものに適宜変えています。
いろいろな画像をロードして試してみてください。
具体的にどういうコードになるのかというのは、wonderfl のコードビューをご覧あれ。 事実誤認やアルゴリズムのミスがある場合、ご指摘いただけたら幸いです。