画像情報処理 1 プログラミング課題

29
画画画画画画 1 画画画画画画画画画 画画画画画画画画画 M2 画画 画画

Upload: taya

Post on 18-Jan-2016

50 views

Category:

Documents


0 download

DESCRIPTION

画像情報処理 1 プログラミング課題. 知的画像処理研究室 M2 大村 瑞穂. 目次. プログラミング課題の準備 ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題. 目次. プログラミング課題の準備 ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像処理の方法 レポートに載せる画像について 例題と第 1 回レポート課題. サンプルプログラムのダウンロード. http://www.iipl.is.ritsumei.ac.jp/. クリック. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 画像情報処理 1 プログラミング課題

画像情報処理 1プログラミング課題

知的画像処理研究室M2 大村 瑞穂

Page 2: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 3: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 4: 画像情報処理 1 プログラミング課題

サンプルプログラムのダウンロード

http://www.iipl.is.ritsumei.ac.jp/

クリック

Page 5: 画像情報処理 1 プログラミング課題

サンプルプログラムのダウンロード

http://www.iipl.is.ritsumei.ac.jp/Event_others.html

ファイルの解凍方法,コンパイル,実行方法などは

このページに全て書いてあります!

この PPTはこの HPの下の方からダウンロードできます!

Page 6: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 7: 画像情報処理 1 プログラミング課題

圧縮ファイルの内容1. ImageFileIO.c

2. ImageFileIO.h3. ImageFilter.c4. ImageFilter.h5. main.c6. ○○○.ppm7. ○○○.pgm8. ImageTools.c9. ImageTools.h10. Makefi l e

1. 画像の読み込み , 出力データの書き出しなどを行う関数の定義

2. ImageFileIO.c 内の関数の宣言3. データを画像処理する関数の定義4. ImageFilter.c 内の関数の宣言5. メインプログラム6. カラー画像ファイル7. モノクロ画像ファイル8. 今回は関係なし9. 今回は関係なし10. make ファイル

Page 8: 画像情報処理 1 プログラミング課題

コンパイルの方法

• Makefi l e– make コマンドを使用する為のファイル– make コマンド・・・複数のファイルを同時に

順序よく  コンパイルするコマンド

imgfilter という実行ファイルが作成されるimgfilter という実行ファイルが作成される

% ./imgfilter

make コマンドを実行し , コンパイルとリンクを自動的に行う

Page 9: 画像情報処理 1 プログラミング課題

画像の表示• display コマンドで確認

% display Castle.ppm &

• 画像の表示が上手くいかない場合– ディスク容量がいっぱい?% du –sh      ・・・ディスク使用量の確認

• Netscape のキャッシュの削除– Netscape を立ち上げる

編集→設定→詳細→キャッシュ– キャッシュのクリアを行い,保存するキャッシュ容量も

減らすことをオススメします(デフォルトは 50MB )

Page 10: 画像情報処理 1 プログラミング課題

メイン関数 (main.c)

• main.cint main(void) {

// 画像処理を行う関数の呼び出し // 例1) PPM 形式の入力データをネガ画像に変換 NegativeImage(); // 例2) PGM 形式のデータに線を描く // DrawLines(); // 正常終了 return 0;

}

– main() 関数から NegativeImage() 関数が呼び出されている

Page 11: 画像情報処理 1 プログラミング課題

画像処理関数 (ImageFilter.c)

• ImageFilter.c– void NegativeImage(void) • PPM 形式の入力データをネガ画像に変換

void NegativeImage(void) { ・・・// PPM 形式の入力データの読み込み pRGBInputData = ReadPpm(&iWidth, &iHeight, &iMaxValue);・・・}

Page 12: 画像情報処理 1 プログラミング課題

入出力関数 (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次元座標を取得

など・・・

Page 13: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 14: 画像情報処理 1 プログラミング課題

画像処理の手順

1. ImageFilter.c に関数を追加する– BinaryImage(void)

2. ImageFilter.h 内で関数の宣言を行う3. main.c 内の main() 関数から呼び出す4. make コマンドでコンパイル

つまり・・・プログラミングの際に変更するファイルは,ImageFilter.c ・ ImageFilter.h ・ main.c の3

Page 15: 画像情報処理 1 プログラミング課題

周辺画素の処理(フィルタリングプログラムを作成する際の注意)

端の画素の例外処理を忘れずに行うこと

注目画素

Page 16: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 17: 画像情報処理 1 プログラミング課題

レポートに画像を添付する際の注意

• pgm 画像および ppm 画像は , そのままだとレポートには載せられません( latex でも word でも)

• 次の方法でファイル形式を変換してから載せてください

Page 18: 画像情報処理 1 プログラミング課題

ファイル形式変換方法( Linux )

• ターミナル画面で↓を入力     >display ○○.pgm• ImageMagic (画像表示ツール)が起動された

ら以下の手順で変換1. 表示された画像を右クリック→ Save 2. Format ボタンをクリック 3. 変換後のファイル形式を選んで Select ( latex

に載せる場合は eps 形式がいいと思います) 4. 必要ならファイル名を変更し , Save をクリッ

ク , Select をクリック

Page 19: 画像情報処理 1 プログラミング課題

ファイル形式変換方法( Windows )

• irfanview (http://www8.plala.or.jp/kusutaku/iview/)を使うと好きな形式に変換することができます

Page 20: 画像情報処理 1 プログラミング課題

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

Page 21: 画像情報処理 1 プログラミング課題

• 何か質問があれば, TA の大村 ( CC 4 F 知的画像処理研究室 ( 陳研 ) )

まで

• メールアドレス:[email protected]

Page 22: 画像情報処理 1 プログラミング課題

目次

• プログラミング課題の準備–ファイルのダウンロード・解凍・コンパイル

• サンプルプログラムの説明

• 画像処理の方法

• レポートに載せる画像について

• 例題と第 1 回レポート課題

Page 23: 画像情報処理 1 プログラミング課題

プログラム例題

• 白黒画像( pgm ファイル)から,反転画像を作成する

• 反転画像は, 255 から各画素の値を引き,その値を新しい画素値とすることで作成できる

Page 24: 画像情報処理 1 プログラミング課題

手順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

Page 25: 画像情報処理 1 プログラミング課題

手順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

Page 26: 画像情報処理 1 プログラミング課題

手順3

• ImageFilter.h 内で ReversalImage 関数の宣言

#ifndef _IMAGEFILTER_H_#define _IMAGEFILTER_H_

void NegativeImage(void);void DrawLines(void);void ReversalImage(void);

#endif

ImageFilter.h

Page 27: 画像情報処理 1 プログラミング課題

手順4

• main.c 内の main() 関数で ReversalImage 関数を呼び出し

#include <stdio.h>#include "ImageFilter.h"

int main(void) { // NegativeImage(); // DrawLines();ReversalImage();

return 0;}

!他の関数をコメントアウトするのを忘れないようにしてください!

main.c

Page 28: 画像情報処理 1 プログラミング課題

手順5

• コマンドプロンプトで「 make 」と入力する

• コンパイルが行われ, imgfilter という名前の実行ファイルが作成される

• 「 ./imgfilter 」でプログラムを実行

Page 29: 画像情報処理 1 プログラミング課題

• 第 1 回レポート課題では,今回の例題にある ReversalImage(void) の代わりにBinaryImage(void) という 2 値化を行う関数を作ってください

• ImageFilter.h 内での宣言や main 関数内での呼び出しの仕方は,例題と同じです