グレイスケール
2010/01/05 20:37 - AS3.0
買った画像処理本はいずれも、グレイスケールについて特に触れてはいませんでしたが、こないだの平面分割 WebCam でも輝度の標準偏差を求める過程で BitmapData のグレイスケール化をしましたし、本を読むに後々かなり頻繁に使うことになりそうなので、単体のエフェクタとして最初に用意しておくことにします。
グレイスケールの詳細に関しては、「グレースケールのひみつ」や「カラー画像をモノクロ画像に変換」をはじめ、「グレイスケール」をキーワードにしてググるとザクザク先賢の記述が出てくるので、そちらを参照してください。
で、それらの記述を拝見すると、グレイスケールのロジックはいろいろあるようですが、どれを使ってエフェクタを書くかってなことを考えると、「NTSC 系加重平均法」一択で充分っぽい。
NTSC 系加重平均法っていうのは赤に対する重みづけを 0.298912、緑に対する重みづけを 0.586611、青に対する重みづけを 0.114478 として計算するんだとか。
でも小数点以下6桁って厳密過ぎね? 今回作る一連のエフェクタはウェブカムで使うことを前提にするつもりなので、あんま負荷かかることしたくないのよね。それに、そもそも人間の眼にそんな細かいとこまで認識できんのかいな。
そんな風に考えていたら、いつもお世話になってる "Foundation ActionScript 3.0 Image Effects" の P106 に書いてありました。
赤に対しては 0.3、緑に対しては 0.59、青に対しては 0.11 で処理していました。
これで充分でしょう、ってなわけで、この数値を使うことにしますよ。
で、具体的なコードとしては ColorMatrixFilter を使います。 ColorMatrixFilter の引数になる配列に、これらの値を突っ込めばオッケーという寸法。
コード全文は以下のとおりです。