fortranでdither法を使って2値化をする
大津の 2 値化ではあるしきい値を持って全体を 0,1 に分けていたが、dither 法では 0,1 をうまく使って中間色を表現しようとする手法である。
今回は dither matrix のパターンとして、Bayer 法を使う。
+----+----+----+----+
| 0 | 8 | 2 | 10 |
+----+----+----+----+
| 12 | 4 | 14 | 6 |
+----+----+----+----+
| 3 | 11 | 1 | 9 |
+----+----+----+----+
| 15 | 7 | 13 | 5 |
+----+----+----+----+
画像を 4*4 の小領域に分け、各領域と matrix を比べ、matrix より大きいければ 1、小さければ 0 とする。
fortran で実装すると以下のようになる。
列優先なので mtx の宣言が転置して状態で宣言していることに留意する必要がある。
また、画像と直接比較するため、mtx を 0~maximum
に拡張している。
img から切り出した 4*4 の小領域と mtx を比較して、小領域を 0,1 で置き換え、rst にそれぞれおいていくイメージになっている。 (直接 rst に書き込んでいくようにすれば高速化の可能性がある)。
実際に適用すると次のようになる。