ディザ法(2)
カラーイメージを2値化しながらも、自然な濃淡を感じさせる手法ハーフトーニング。
それを実現するための2つの方法のうちの1つ、ディザ法について前回、見ました。
ディザ法にはランダム・ディザ法と組織的ディザ法の2つがある。
ランダム・ディザ法はその名のとおり、ビットマップデータの各ピクセルごとにランダムで閾値を設定して2値化する方法。
組織的ディザ法は 4×4 のマトリックスの各要素に閾値を格納し、それを型紙として、ビットマップデータと突き合わせて2値化する方法。
そして 4×4 のマトリックスの各要素にどのような順番で閾値を格納するかで6つのパターンがある、ということまで見ました。
ディザ法(1)
白と黒の2色だけで、カラーイメージの自然な濃淡を表現する方法。今回はディザ法について見てみます。
閾値法は、イメージデータの全ピクセルを同一の閾値で判定し、白か黒に置き換える方法でした。対してディザ法は、ピクセルごとに異なる閾値で判定し、白か黒に置き換える方法です。
如何にしてピクセルごとに異なる閾値を設定するのか。その設定手段により、ディザ法は以下の2つに分けられます。
- ランダム・ディザ法
- 組織的ディザ法
その他にもディザ法はあるっぽいんですが、この2つだけを扱います。
ハーフトーニング
今のコンピュータはリソースが潤沢なので、画像処理における2値化といえば、閾値による2値化(閾値法)だけを注目してればいいんじゃないか、というのが個人的な印象。
ところで閾値法はイメージデータの全ピクセルを同一の閾値で処理するから、黒い領域と白い領域がベタっと分離してしまいますよね。
かつてコンピュータがモノクロ表示しかできなかった時代、あるいはモノクロプリンタで印刷する場合、カラーイメージをどのようにして表示ないしは印刷するか、ということを追求し、閾値法とは異なる2値化の方法で、自然な濃淡が表現されたとのこと。
で、これからしばらくは、その自然な濃淡を表現する2値化の種類と ActionScript 3.0 による実装の話。
Strategy パターン
今回 wonderfl に投稿したのは、何の変哲もない、特筆すべきこともないピクセレート・プログラムです。
Pixelate by BitmapData#fillRect – wonderfl build flash online
このコードのオレ的ポイントは何かというと、コーディングに当たって Strategy パターン を意識したという点。
プログラム実行時に複数あるアルゴリズムを選択するパターンだそうですが、ボタンを押して表示形状を変えるところに Strategy パターンを導入しています。
BitmapData#threshold
少しでも時間を置くとすぐに忘れてしまう BitmapData#threshold について、いいかげん非効率も甚だしいんで、今ここで備忘録としてエントリー。
書式は以下。
public function threshold( sourceBitmapData : BitmapData, sourceRect : Rectangle, destPoint : Point, operation : String, threshold : uint, color : uint = 0, mask : uint = 0xFFFFFFFF, copySource : Boolean = false ):uint
threshold() メソッドで押さえとくべきツボは何といっても第7引数 mask。
あと、その第7引数に指定した値によって、第5引数 threshold も若干の注視が必要になるってところでしょうか。
それ以外の引数は取り立てて問題はないですね。
