290 likes | 423 Views
画像情報処理 1 プログラミング課題. 知的画像処理研究室 M2 大村 瑞穂. 目次. プログラミング課題の準備 ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題. 目次. プログラミング課題の準備 ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題. サンプルプログラムのダウンロード. http://www.iipl.is.ritsumei.ac.jp/. クリック.
E N D
画像情報処理1プログラミング課題 知的画像処理研究室 M2 大村 瑞穂
目次 • プログラミング課題の準備 • ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題
目次 • プログラミング課題の準備 • ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題
サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/ クリック
サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/Event_others.html ファイルの解凍方法,コンパイル,実行方法などは このページに全て書いてあります! このPPTはこのHPの下の方から ダウンロードできます!
目次 • プログラミング課題の準備 • ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題
圧縮ファイルの内容 • ImageFileIO.c • ImageFileIO.h • ImageFilter.c • ImageFilter.h • main.c • ○○○.ppm • ○○○.pgm • ImageTools.c • ImageTools.h • Makefile • 画像の読み込み, 出力データの書き出しなどを行う関数の定義 • ImageFileIO.c内の関数の宣言 • データを画像処理する関数の定義 • ImageFilter.c内の関数の宣言 • メインプログラム • カラー画像ファイル • モノクロ画像ファイル • 今回は関係なし • 今回は関係なし • 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回レポート課題
画像処理の手順 • ImageFilter.cに関数を追加する • BinaryImage(void) • ImageFilter.h内で関数の宣言を行う • main.c内のmain()関数から呼び出す • makeコマンドでコンパイル つまり・・・ プログラミングの際に変更するファイルは,ImageFilter.c・ImageFilter.h・main.cの3つ
周辺画素の処理(フィルタリングプログラムを作成する際の注意)周辺画素の処理(フィルタリングプログラムを作成する際の注意) 注目画素 端の画素の例外処理を忘れずに行うこと
目次 • プログラミング課題の準備 • ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第1回レポート課題
レポートに画像を添付する際の注意 • pgm画像およびppm画像は, そのままだとレポートには載せられません(latexでもwordでも) • 次の方法でファイル形式を変換してから載せてください
ファイル形式変換方法(Linux) • ターミナル画面で↓を入力 >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 知的画像処理研究室(陳研))まで • メールアドレス:cm003064@ed.ritsumei.ac.jp
目次 • プログラミング課題の準備 • ファイルのダウンロード・解凍・コンパイル • サンプルプログラムの説明 • 画像処理の方法 • レポートに載せる画像について • 例題と第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; //出力画像の画素値を格納 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); //出力画像のメモリ解放 } 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" int main(void) { // NegativeImage(); // DrawLines(); ReversalImage(); return 0; } main.c !他の関数をコメントアウトするのを忘れないようにしてください!
手順5 • コマンドプロンプトで「make」と入力する • コンパイルが行われ,imgfilterという名前の実行ファイルが作成される • 「./imgfilter」でプログラムを実行
第1回レポート課題では,今回の例題にあるReversalImage(void)の代わりにBinaryImage(void)という2値化を行う関数を作ってください第1回レポート課題では,今回の例題にあるReversalImage(void)の代わりにBinaryImage(void)という2値化を行う関数を作ってください • ImageFilter.h内での宣言やmain関数内での呼び出しの仕方は,例題と同じです