画像の疑似濃淡表現(プログラム例)
画像の疑似濃淡表現を行うプログラムの簡単な例を以下に示す。
ここではディザマトリックスとして以下のような2x2のものを
用いている。
実際にはプログラムで示すように、5段階に分けて0〜4が同じ
確率で出現するようにしてある。実際のディザマトリックスの値は
である。
/* dither.c */
/* a simplified example of dither into 2 bit image */
/* usage dither < file.pgm > file2.pgm */
#include <stdio.h>
static int matrix[2][2] = {51,153,204,102};
/* 255*(1/5), 255*(3/5), 255*(4/5), 255*(2/5) */
main()
{
int width,height;
char buffer[80];
int dx,dy;
int x, y;
int pix;
gets(buffer); puts(buffer);
gets(buffer); puts(buffer);
sscanf(buffer,"%d %d",&width,&height);
gets(buffer); puts(buffer);
dx = dy = 0;
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
pix = getchar();
if ( pix > matrix[dy][dx] ) pix = 255;
else pix = 0;
putchar(pix);
dx ^= 1;
}
dy ^=1;
}
}
結果は以下のとおり。前回のもっとましなディザと比べてみてください。

(上のプログラムに食わせる前に gifからpgmへ変換し、できたpgmをgifに
変換しないと Netscapeには表示できませんので念のため。)
- 上の例ではディザマトリックスは 2 x 2 であったが、これを
N x N のマトリックス DNに拡張するには、
| 4DN/2 | 4DN/2+2UN/2 |
DN = |
| 4DN/2+3UN/2 | 4DN/2+UN/2 |
(但し、UN は各要素が1のN x N のマトリックス)とすればよい。
4 x 4 のディザマトリックスを求めよ。
- 4x4のマトリックスを使ったディザプログラムを作成せよ。
- 2x2のマトリックスを PPM 形式のカラー画像に適用するプログラムを
作りなさい。