README-winn

画像処理サンプルプログラムwinnについて
                                                    大島正毅

                            初版    1999.10.04
                                        最終改訂日   2001.12.13


普通、画像処理関連のプログラムを作ろうとすると、画像データのディスク
からの読み出し、何らかの画像処理、結果のディスプレイへの表示を行わな
くてはなりません。

つまずきの種は一杯あり、初心者を苦しめる種にはことかきません。このサ
ンプルプログラムは、初心者が早く初歩的な段階を脱して実質的な画像処理
のプログラムを作ることができるように、その参考のため作りました。

本サンプルプログラムはunix環境でc言語で開発・研究することを想定して、
入力ファイルとしてSun MicroSystems社の定めているrasterfileを、出力は
XWindowに対応しています。

この環境におけるつまずきの種として、入力データフォーマット、構造体、
XWindow、カラーマップ、makeなどがあります。また、ディスク上の画像のフ
ォーマットには種々あり、それら(の1つrasterfile)とXWindowのデータ形式
を合わせるのは結構大変です。本サンプルプログラムはこれらの参考になるは
ずです。

rasterfile形式のモノクロデータおよびカラーデータ(24/32ビット/画素、画
素値はRGBの直接値)を扱えます。また、ヘッダファイルのない裸のモノクロ
画像もrasterfile形式のモノクロデータに準じて扱えるようにしてあります。


サンプルプログラムwinn.cはこの3種のデータいずれにも対応し、読取ったデ
ータをそのままディスプレイに表示するものです。

vdispという領域のデータは8ビット/画素で画像を表していて、その値はカラ
ーマップ中のピクセル値を意味しています(もっと正確にはcolorデータの番
号を指し、そこから真のカラーマップのピクセル値にアクセスできる)。

put_imageは与えられたvdispとcolorデータのもとに、画像を表示します。
カラー画像表示のためにはscmapという標準カラーマップ形式のデータを作成
して用いています(mk_dircmpによる)。これはモニタ用に何らかの絵が出せ
ればいいという主旨で作ったものなので、カラー画像がまともに出る保障はあ
りません。

winn-m.cおよびwinn-c.cはモノクロおよびカラーデータに特化したプログラム
です。どのように各画素の濃淡値あるいはr,g,bデータにアクセスすればいい
かの参考にして下さい。

winnは画像ファイルが濃淡かカラーかによって処理を切り替えていますが、
winn-m.c、winn-c.cは濃淡、カラーに特化しているため、不適切なファイルを
入力したときの動作は保証されません。

標準的なコーディングでは、画像を2次元配列で扱い、あらかじめ固定した
サイズのデータを扱いますが、ここではヘッダから読取ったデータにより
可変としています。データ領域はalloc関数を呼ぶことにより確保しています。

winn-m.c、winn-c.cとも、見かけ上2次元配列と類似の方法でアクセスでき
るように、f_xyおよびf_xycというマクロを用意しました。定義はvisio.h
にあります。サンプルでは、これらを使う場合と使わない場合の両方を示し
てあります。なお、マクロを用いる方が処理は早くなります(データアクセ
スに掛け算を使わないため)。

winn-m.cやwinn-c.cで画面の一部にwinnで表示したときとは異なる人為的な
模様が表示されますが、これはバグではありません。ソースプログラムを見れ
ばなぜそうなるか分るはずです。これは画像データの最小限の処理のサンプル
のつもりです。

winn-cにさらにディザ処理でカラー表示するものを加えたものをwinn-ac(ac
はadvanced colorのつもり)として追加してあります。こちらの方がwinn.c
での表示よりまともです。

カラーデータを読み取ってこれをモノクロデータに直して表示するサンプル
プログラムをwinn-cmとして提供しています(新保雅俊氏作、大島正毅補作)。

時系列データなどの一連のデータに順次アクセスする例をloopwin.cに示し
てあります。

正味の処理を行っている関数はvisio.cにあります。上記の3つのプログラム
が呼んでいる関数はすべてここにあります。簡単な処理なら関数をブラック
ボックスとして扱えるでしょう。

少し複雑なことを行う時は関数の内部構造が必要になるでしょう。その時は
visio.cのソースプログラムを参考にして下さい。

本サンプルでは構造体を多用していますが、その定義(および、定数マクロ
の定義)はvisio.hにあります。

初心者はMakefileを使って分割コンパイルして効率を上げるのにも不馴れでしょ
うから、ここにあるMakefileを参考にして下さい。何も添字の付かない
Makefileはkdsub1系列の計算機の上でwinnを作るためのものです。

他は添字titan、io、binderがそれぞれのマシン向けです。
makeする時に沢山のメッセージが出ますが、警告だけなら問題ないので無視して
ください。

このサンプルプログラムのあり場所はtitan:~oshima/EX/REIDAI/winnです(私の
ホームページ(http://carrot.kdenshi.tosho-u.ac.jp/)にも同じ内容を置いて
います)。使いたい場合は自分のホームディレクトリの下にディレクトリごとコピー
するとよいでしょう。

本サンプルプログラムを使いたい人は自由に使って画像処理の基本プログラム
やさらに応用的なプログラムを書く参考にしてください。

これら一連のものは拙い作品ですので、それほど誇れるものではありません。た
だ自分でゼロから作るよりはましでしょうから、参考にしてよりよいプログラム
を作ってください。改良品ができたらフィードバックして下さい。何かの仕事
に使ったときは作者名を引用してくれるとうれしいです。

質問は随時受付けます。

謝辞 長谷川為春氏から参考となるヒントを色々得ました。感謝します。
winn-cmは新保雅俊氏から提供されたものを元にしています。

参考資料 1.木下凌一:XWindow Ver.IIプログラミング、日刊工業新聞社 2.http://www.students.chiba-u.ac.jp/consultant/xlib/xlib0.html 3.man rasterfile (Sun OS) 4.柴山 守:X11による画像処理 基礎プログラミング、技術評論社 5.David C. Kay & John R. Levine: グラフィックファイル フォーマット  ハンドブック、アスキー出版局 6.Olivwr Jones著、三浦明美・ドキュメントシステム訳:X Windowハンドブッ ク、アスキー出版局


戻る

Home > プログラム公開のページ > 画像処理サンプルプログラムwinn > winn概要説明