画像情報処理1 ~画像処理プログラミング~ 2014/05/02 知的画像処理研究室 M1 中津美冴 [email protected] 目次 • 画像処理プログラミングの準備 – ファイルのダウンロード・解凍・コンパイル • • • • サンプルプログラムの説明 画像を添付する際の注意点 画像処理の方法、プログラム例題 レポートについて サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/lecture ファイルの解凍方法,コンパイル,実行方法 などは、上記ページに全て書いてあります. 圧縮ファイルの内容 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 Makefike 1. 画像の読み込み、出力データの書き 出しなどを行う関数の定義 2. ImageFileIO.c内の関数の宣言 3. データを画像処理する関数の定義 4. ImageFilter.c内の関数の宣言 5. メインプログラム 6. カラー画像ファイル 7. モノクロ画像ファイル 8. 今回は関係なし 9. 今回は関係なし 10. makeファイル コンパイルの方法 • Makefike – makeコマンドを使用する為のファイル – makeコマンド・・・複数のファイルを同時に順序よ くコンパイルするコマンド makeコマンドを実行し、コンパイル とリンクを自動的に行う Imgfilterという実行ファイルが作成される % ./imgfilter 画像の表示 • displayコマンドで確認 % display Castle.ppm & • 画像の表示が上手くいかない場合 – ディスク容量がいっぱい? % du –sh ・・・ディスク使用量の確認 Rainbowの個人容量は最大50Mまで メイン関数 (main.c) • main.c int main(void) { // 画像処理を行う関数の呼び出し // 例1)PPM形式の入力データをネガ画像に変換 NegativeImage(); // 例2)PGM形式のデータに線を描く // DrawLines(); // 正常終了 return 0; } 画像処理関数(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. ImageFilter.cに関数を追加する – BinaryImage(void) 2. ImageFilter.h内で関数の宣言を行う 3. main.c内のmain()関数から呼び出す 4. makeコマンドでコンパイル つまり・・・ プログラミングの際に変更するファイルは、 ImageFilter.c・ImageFilter.h・main.cの3つ レポートに画像を添付する際の注意 • 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 プログラム例題 • 白黒画像(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; //出力画像の画素値を格納 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); //出力画像の書き出し 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 <stdio.h> #include "ImageFilter.h" main.c int main(void) { // NegativeImage(); // DrawLines(); ReversalImage(); return 0; } !他の関数をコメントアウトするのを忘れないようにしてください! 手順5 • コマンドプロンプトで「make」と入力する • コンパイルが行われ、imgfilterという名前の 実行ファイルが作成される • 「./imgfilter」でプログラムを実行 レポート課題1 • 課題内容 – アルファブレンディング処理 – 今回の例題にあるReversalImage(void)を参考に AlphaBlending (void)というアルファブレンディング 処理を行う関数を作成しなさい – ImageFilter.h内での宣言やmain関数内での呼び 出しについては、例題と同じ アルファブレンディング(alpha blending) • αの値が、画像左端で0、右端で1で、その間では直線的に変化させた。 g=af1+(1-a)f2 レポート課題2 • 課題内容 – 空間フィルタリング • 平滑化,Smoothing (void) • エッジ検出,EdgeDetection (void) – フィルタリング処理を行う関数を作成しなさい 周辺画素の処理 (フィルタリングプログラムを作成する際の注意) 注目画素 端の画素の例外処理を忘れずに行うこと 課題について • 提出期限:2014/5/16(金) 12:00 • 何か分からないことがあったら、TAの中津ま で連絡してください • クリエーションコア 4F 知的画像処理研究室 • メールアドレス:[email protected]
© Copyright 2025 ExpyDoc