< Return to index

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 に書き込んでいくようにすれば高速化の可能性がある)。

実際に適用すると次のようになる。 dither

編集を提案