画像情報処理 1 プログラミング課題 知的画像処理研究室 M2 大村 瑞穂
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
サンプルプログラムのダウンロー ド クリック
サンプルプログラムのダウンロー ド ファイルの解凍方法,コンパイル,実行方法などは このページに全て書いてあります! この PPT はこの HP の下の方から ダウンロードできます!
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
圧縮ファイルの内容 1.ImageFileIO.c 2.ImageFileIO.h 3.ImageFilter.c 4.ImageFilter.h 5.main.c 6.○○○.ppm 7.○○○.pgm 8.ImageTools.c 9.ImageTools.h 10.Makefi l e 1. 画像の読み込み, 出力データの書き 出しなどを行う関数の定義 2.ImageFileIO.c 内の関数の宣言 3. データを画像処理する関数の定義 4.ImageFilter.c 内の関数の宣言 5. メインプログラム 6. カラー画像ファイル 7. モノクロ画像ファイル 8. 今回は関係なし 9. 今回は関係なし 10.make ファイル
コンパイルの方法 Makefi l e – make コマンドを使用する為のファイル – make コマンド・・・複数のファイルを同時に 順序よく コンパイルするコマンド imgfilter という実行ファイルが作成される %./imgfilter make コマンドを実行し, コンパイ ルとリンクを自動的に行う
画像の表示 display コマンドで確認 % display Castle.ppm & 画像の表示が上手くいかない場合 – ディスク容量がいっぱい? % du –sh ・・・ディスク使用量の確認 Netscape のキャッシュの削除 – Netscape を立ち上げる 編集 → 設定 → 詳細 → キャッシュ – キャッシュのクリアを行い,保存するキャッシュ 容量も減らすことをオススメします(デフォルト は 50MB )
メイン関数 (main.c) main.c int main(void) { // 画像処理を行う関数の呼び出し // 例1) PPM 形式の入力データをネガ画像に変換 NegativeImage(); // 例2) PGM 形式のデータに線を描く // DrawLines(); // 正常終了 return 0; } – main() 関数から NegativeImage() 関数が呼び出さ れている
画像処理関数 (ImageFilter.c) ImageFilter.c – void NegativeImage(void) PPM 形式の入力データをネガ画像に変換 void NegativeImage(void) { ・・・ // PPM 形式の入力データの読み込み pRGBInputData = ReadPpm(&iWidth, &iHeight, &iMaxValue); ・・・ }
入出力関数 (ImageFileIO.c) ReadPpm(int * iWidth, int * iHeight, int * iMaxValue) – PPM ファイルの読み込み WritePpm(struct RGB * pRGBOutputData, int iWidth, int iHeight, int iMaxValue) – PPM ファイルへ書き出し GetAxisFromIndex(int iWidth, int iIndex, int * iX, int * iY) – 1次元のインデックスから2次元座標を取得 など・・・
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
画像処理の手順 1.ImageFilter.c に関数を追加する – BinaryImage(void) 2.ImageFilter.h 内で関数の宣言を行う 3.main.c 内の main() 関数から呼び出す 4.make コマンドでコンパイル つまり・・・ プログラミングの際に変更するファイルは, ImageFilter.c ・ ImageFilter.h ・ main.c の3つ
周辺画素の処理 (フィルタリングプログラムを作成する際の注意) 端の画素の例外処理を忘れずに行うこと 注目画素
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
レポートに画像を添付する際の注 意 pgm 画像および ppm 画像は, そのままだと レポートには載せられません( latex でも word でも) 次の方法でファイル形式を変換してから 載せてください
ファイル形式変換方法( Linux ) ターミナル画面で ↓ を入力 >display ○○.pgm ImageMagic (画像表示ツール)が起動された ら以下の手順で変換 1. 表示された画像を右クリック →Save 2.Format ボタンをクリック 3. 変換後のファイル形式を選んで Select ( latex に 載せる場合は eps 形式がいいと思います) 4. 必要ならファイル名を変更し, Save をクリック, Select をクリック
ファイル形式変換方法( Windows ) irfanview ( ) を使うと好きな形式に変換することがで きます
latex で画像を添付する方法 以下のコマンドをレポートに貼り付け \begin{figure}[htbp] \begin{center} \epsfile{file=○○.eps,width=1.0\hsize} \caption{ レポート上に表示させるタイトル } \label{fig:○○} \end{center} \end{figure} 参考:
何か質問があれば, TA の大村 ( CC 4 F 知的画像処理研究室 ( 陳研 ) )まで メールアドレス:
目次 プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題
プログラム例題 白黒画像( pgm ファイル)から,反転画像 を作成する 反転画像は, 255 から各画素の値を引き, その値を新しい画素値とすることで作成 できる
手順1 ImageFilter.c の中に反転画像を作成する ReversalImage(void) という関数を作る #include ・・・・・・ void NegativeImage(void) { int iWidth, iHeight, iMaxValue; ・・・・・・ } void DrawLines(void) { int iWidth, iHeight, iMaxValue; ・・・・・・ } void ReversalImage(void){ } ImageFilter.c
手順2 関数 ReversalImage の中で反転処理を実装 void ReversalImage(void){ int iWidth, iHeight, iMaxValue; // 横幅のサイズ, 縦幅のサイズ, 最大輝度値 int *piInputData; // 入力画像の画素値を格納 int *pRVOutputData; // 出力画像の画素値を格納 int I; // ループ変数 printf(“**** Reversal Image ****\n”); // 入力画像の読み込み piInputData = ReadPgm(&iWidth, &iHeight, &iMaxValue); // 出力画像のメモリ確保 pRVOutputData = (int *)malloc(iWidth*iHeight*sizeof(int)); // 反転処理 for(i=0; i<iWidth*iHeight; i++){ pRVOutputData[i] = piInputData[i]; } FreePgm(piInputData); // 入力画像のメモリ解放 WritePgm(pRVOutputData, iWidth, iHeight, iMaxValue); // 出力画像の書き出し FreePgm(pRVOutputData); // 出力画像のメモリ解放 } ImageFilter.c
手順3 ImageFilter.h 内で ReversalImage 関数の宣言 #ifndef _IMAGEFILTER_H_ #define _IMAGEFILTER_H_ void NegativeImage(void); void DrawLines(void); void ReversalImage(void); #endif ImageFilter.h
手順4 main.c 内の main() 関数で ReversalImage 関数 を呼び出し #include #include "ImageFilter.h" int main(void) { // NegativeImage(); // DrawLines(); ReversalImage(); return 0; } !他の関数をコメントアウトするのを忘れないようにしてくだ さい! main.c
手順5 コマンドプロンプトで「 make 」と入力す る コンパイルが行われ, imgfilter という名前 の実行ファイルが作成される 「./imgfilter 」でプログラムを実行
第 1 回レポート課題では,今回の例題にあ る ReversalImage(void) の代わりに BinaryImage(void) という 2 値化を行う関数を 作ってください ImageFilter.h 内での宣言や main 関数内での 呼び出しの仕方は,例題と同じです