二値化(4) ~彩度による二値化~
2010/03/13 21:16 - AS3.0
前回までいろいろ検証してきた二値化は、画像の濃度(明度、輝度)によってグレイスケール化した BitmapData が対象でした。
しかし、「OpenGL+GLSLによる画像処理プログラミング」のP139、140や、「C言語で学ぶ実践画像処理
」のP138、139 には、画像によっては濃度ではなく色相や彩度を対象にした方が、より良い結果が出るときもある、ということが書かれています。
色相は0~360度を循環するものなので、閾値を二つ設定し、その閾値の内と外で1と0を切り替えるということになるんだそうです(「OpenGL+GLSLによる画像処理プログラミング」P140)。
これはオートマチックで閾値計算というのはかなり困難な気がするので考察対象外とします。
というわけで、今回のテーマは画像の彩度を対象にした二値化の話。
前回、wonderfl に投稿した「判別分析法による閾値の自動計算」を fork しますよ。 EffectorGrayScale クラスによるグレイスケール化のステップを、濃度ではなく彩度によるモノトーンの BitmapData を生成するように改変。 その BitmapData を判別分析法による閾値の自動計算の関数に送り込んで二値化させました。 彩度計算には、Frocessing のクラス ColorHSV と ColorRGB を使っています。 それだけだと何かヘンだったので、最後に反転させています。
以下、処理結果の比較。



ヒストグラムの形状からして、輝度と彩度じゃあ全然違うってことが分かりますね。