画像とは光の強度情報の2次元分布である. したがって,数学的には,2変数に関する1価関数として,次のように表現できる.
z = f(x, y)ここで,独立変数x,yは画像の平面上に設定された2次元の直交座標系の2つの軸を表す. コンピュータで画像を扱う場合は,一般の数学とは異なり,左上に原点, 下向きと右向きに軸を取ることが多い.ここでは下向きをx軸,右向きをy軸とする. 一方,従属変数zは,(x,y)における光の強度情報を示す. 一般には,(赤,緑,青)などの成分からなる3次元ベクトル値であるが, ここでは明るさ(輝度,明度)のみの情報を考え,スカラ値とする.
このような画像z = f(x,y)をコンピュータで処理するためには,デジタル情報, つまり,有限なビット列に変換する必要がある(デジタル化).変換の処理は, 以下の2つから構成される.
デジタル化した画像を,Cのプログラム上で2次元配列を使って表現しよう. 2次元配列の(i,j)要素をg[i][j]とすると,習慣上,i(行)に画面下向き, j(列)に画面右方向を割り当てることが多い. そこで,この演習でも,その割り当て方を採用する.
画像の座標系(x,yの割り当て)と, 配列の割り当て(i,jの割り当て)の対応関係をまとめると以下のようになる.
f(x,y) → g[i][j] x → i = 0 〜 h-1 y → j = 0 〜 w-1
PGM(portable graymap)形式とは, 世の中で広く認知されている画像ファイルのデータ形式の一種である. 色情報を含まない画像(グレースケール画像,モノクロ画像,濃淡画像,輝度画像などと呼ばれる) を表現するために用いる. ファイルの先頭から以下のような順番でデータが並んでいる.
以下のPGM形式のファイルをシフトキーを押しながらクリックすると, 画像データをファイルに保存することができる. それができたら,そのファイルをXEmacsで開いてみよう.
unsigned char g[HEIGHT][WIDTH];
static unsigned char image[MAXWIDTH][MAXHEIGHT];