画像情報処理1 プログラミング課題 知的画像処理研究室 M2 大村 瑞穂 目次 • プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題 目次 • プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題 サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/ クリック サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/Event_others.html ファイルの解凍方法,コンパイル,実行方法などは このページに全て書いてあります! このPPTはこのHPの下の方から ダウンロードできます! 目次 • プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題 圧縮ファイルの内容 1. ImageFileIO.c 2. 3. 4. 5. 6. 7. 8. 9. 10. ImageFileIO.h ImageFilter.c ImageFilter.h main.c ○○○.ppm ○○○.pgm ImageTools.c ImageTools.h Makefile 1. 画像の読み込み, 出力データの書き 出しなどを行う関数の定義 2. ImageFileIO.c内の関数の宣言 3. データを画像処理する関数の定義 4. ImageFilter.c内の関数の宣言 5. メインプログラム 6. カラー画像ファイル 7. モノクロ画像ファイル 8. 今回は関係なし 9. 今回は関係なし 10. makeファイル コンパイルの方法 • Makefile – makeコマンドを使用する為のファイル – makeコマンド・・・複数のファイルを同時に順序よく コンパイルするコマンド makeコマンドを実行し, コンパイルと リンクを自動的に行う imgfilterという実行ファイルが作成される % ./imgfilter 画像の表示 • 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) • • 1. 2. 3. 4. ターミナル画面で↓を入力 >display ○○.pgm ImageMagic(画像表示ツール)が起動されたら以 下の手順で変換 表示された画像を右クリック→Save Formatボタンをクリック 変換後のファイル形式を選んでSelect(latexに載 せる場合はeps形式がいいと思います) 必要ならファイル名を変更し, Saveをクリック, Selectをクリック ファイル形式変換方法(Windows) • irfanview (http://www8.plala.or.jp/kusutaku/iview/)を 使うと好きな形式に変換することができます latexで画像を添付する方法 • 以下のコマンドをレポートに貼り付け \begin{figure}[htbp] \begin{center} \epsfile{file=○○.eps,width=1.0\hsize} \caption{レポート上に表示させるタイトル} \label{fig:○○} \end{center} \end{figure} • 参考: http://www002.upp.so-net.ne.jp/latex/zu.html • 何か質問があれば,TAの大村 (CC4F 知的画像処理研究室(陳研))まで • メールアドレス:[email protected] 目次 • プログラミング課題の準備 – ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題 プログラム例題 • 白黒画像(pgmファイル)から,反転画像を作 成する • 反転画像は,255から各画素の値を引き,そ の値を新しい画素値とすることで作成できる 手順1 • ImageFilter.cの中に反転画像を作成する ReversalImage(void)という関数を作る #include <stdio.h> #include <stdlib.h> ・・・・・・ 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; //出力画像の画素値を格納 ImageFilter.c 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] = 255 - piInputData[i]; } FreePgm(piInputData); //入力画像のメモリ解放 WritePgm(pRVOutputData, iWidth, iHeight, iMaxValue); //出力画像の書き出し FreePgm(pRVOutputData); //出力画像のメモリ解放 } 手順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 <stdio.h> #include "ImageFilter.h" main.c int main(void) { // NegativeImage(); // DrawLines(); ReversalImage(); return 0; } !他の関数をコメントアウトするのを忘れないようにしてください! 手順5 • コマンドプロンプトで「make」と入力する • コンパイルが行われ,imgfilterという名前の 実行ファイルが作成される • 「./imgfilter」でプログラムを実行 • 第1回レポート課題では,今回の例題にある ReversalImage(void)の代わりに BinaryImage(void)という2値化を行う関数を 作ってください • ImageFilter.h内での宣言やmain関数内での 呼び出しの仕方は,例題と同じです
© Copyright 2024 ExpyDoc