280 likes | 459 Views
画像情報処理1 ~画像処理プログラミング~. 2013/10/31 知的画像処理研究室 M1 野島優補 is0032ek@ed.ritsumei.ac.jp. 目次. 画像処理プログラミングの準備 ファイルのダウンロード・コンパイル・表示 サンプルプログラムの説明 画像を添付する際の注意点 画像処理の方法、プログラム例題 レポートについて. サンプルプログラム のダウンロード. http:// www.iipl.is.ritsumei.ac.jp/lecture. ファイルの解凍方法,コンパイル,実行方法 などは、上記ページに全て書いてあります..
E N D
画像情報処理1~画像処理プログラミング~ 2013/10/31 知的画像処理研究室 M1 野島優補 is0032ek@ed.ritsumei.ac.jp
目次 • 画像処理プログラミングの準備 • ファイルのダウンロード・コンパイル・表示 • サンプルプログラムの説明 • 画像を添付する際の注意点 • 画像処理の方法、プログラム例題 • レポートについて
サンプルプログラムのダウンロード http://www.iipl.is.ritsumei.ac.jp/lecture ファイルの解凍方法,コンパイル,実行方法などは、上記ページに全て書いてあります.
圧縮ファイルの内容 • ImageFileIO.c • ImageFileIO.h • ImageFilter.c • ImageFilter.h • main.c • ○○○.ppm • ○○○.pgm • ImageTools.c • ImageTools.h • Makefike • 画像の読み込み、出力データの書き出しなどを行う関数の定義 • ImageFileIO.c内の関数の宣言 • データを画像処理する関数の定義 • ImageFilter.c内の関数の宣言 • メインプログラム • カラー画像ファイル • モノクロ画像ファイル • 今回は関係なし • 今回は関係なし • makeファイル
コンパイルの方法 • Makefike • makeコマンドを使用する為のファイル • makeコマンド・・・複数のファイルを同時に順序よくコンパイルするコマンド makeコマンドを実行し、コンパイルとリンクを自動的に行う imgfilterという実行ファイルが作成される % ./imgfilter
画像の表示 • displayコマンドで確認 % display Castle.ppm & • 画像の表示が上手くいかない場合 • ディスク容量がいっぱい? % du –sh ・・・ディスク使用量の確認 RAINBOWの個人容量は最大100Mまで
メイン関数 (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次元座標を取得 など・・・
画像処理の手順 • ImageFilter.cに関数を追加する • BinaryImage(void) • ImageFilter.h内で関数の宣言を行う • main.c内のmain()関数から呼び出す • makeコマンドでコンパイル つまり・・・ プログラミングの際に変更するファイルは、ImageFilter.c・ImageFilter.h・main.cの3つ
レポートに画像を添付する際の注意 • 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
プログラム例題 • 白黒画像(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" int main(void) { // NegativeImage(); // DrawLines(); ReversalImage(); return 0; } main.c !他の関数をコメントアウトするのを忘れないようにしてください!
手順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) • フィルタリング処理を行う関数を作成しなさい
オプション課題3 • 課題内容 • エンボス画像生成 • EmbossImage (void) • 一枚の入力画像からエンボス画像を出力する関数を作成しなさい
周辺画素の処理(フィルタリングプログラムを作成する際の注意)周辺画素の処理(フィルタリングプログラムを作成する際の注意) 注目画素 端の画素の例外処理を忘れずに行うこと
課題について • 提出期限:2013/11/14(木) 17:00 • 何か分からないことがあったら、TAの野島まで連絡してください • クリエーションコア 4F 知的画像処理研究室 • メールアドレス:is0032ek@ed.ritsumei.ac.jp