2.1 画像の入出力

モノクロ画像を入力してグレイレベルを反転した画像(ネガ)を出力する.グレイレベルは0から255までの値を取るので入力画像の画素レベルをgとすると255-gをグレイレベルとした画像を出力する.


簡単な復習

この演習を行う前に,モノクロ画像がどのような構造であるのか簡単に復習しよう.ダウンロードした画像データの中の Lenna.pgm をImageMagickなどの画像ビューワ(画像閲覧ソフト)で開いて見よ.この画像のサイズは横128ピクセル,縦128ピクセルである.

Lenna.pgm

モノクロ画像はグレイレベル(明るさ)を持った画素が並び集まったものである.グレイレベルは0から255の256個の値をとり,値が小さいほど暗く,255は最も明るい.

ここで,Lenna.pgm の一番左上のグレイレベルは162であり,一番右下のグレイレベルが99であることを画像ビューワを使って確認せよ.

モノクロ画像のフォーマット

ここではモノクロ画像ファイルの構造について簡単に説明する.まず, Lenna.pgm をテキストエディタ(Emacsや秀丸など)で開いてみよ.すると下の図のような文字列が表示される.

最初の「P5,128 128,255」の部分(図中,円で囲んである部分)以外は,漢字や記号が並んでいる.最初の「P5,128 128,255」のことを画像のヘッダと呼ぶ.ヘッダは画像フォーマットごとに異なる.この場合,P5は画像の識別符号と呼ばれるものであり,この画像はバイナリ形式の Portable GreyMap (pgmファイル)であることを示している.128 128 は画像の横,縦のサイズであり,255はこの画像の最大グレイレベルである.その後に続く記号のようなものが,各画素のグレイレベルである.ただし,バイナリ形式で書かれているため,漢字や記号等で表示される.画像の各画素のグレイレベルは左上から右下に向かって下の図のように,矢印の順に記述されている.

 画像ファイル中でのグレイレベルの記述の順番

ネガ画像の作成

この演習の目的は,画像のグレイレベルを読み込んでグレイレベルを反転してネガ画像を作り,それを画像ファイルとして書き出すことである.注意したい点は,グレイレベルを読み込む前にヘッダを取り除く作業と,ネガ画像を出力するときにヘッダを書き込む作業が必要であるということである.
サンプルプログラムとして,画像中の画素の座標とそのグレイレベルを表示するプログラムを掲載しておく.これを参考にして Lenna.pgm のネガ画像を作成してみよ.

サンプルプログラム

※注 このページに掲載されているサンプルプログラムは実験を行う上で必要最小限の記述しかされていない.これはプログラムをわかり易くするためであり,最適なプログラムとは言えない.したがって,誤った操作をすると画像ファイルが壊れる可能性がある.余裕がある場合,改良すべき部分を各自修正していって欲しい.

[戻る]