画像情報処理1 ~画像処理プログラミング~
DESCRIPTION
画像情報処理1 ~画像処理プログラミング~. 2014/05/02 知的画像処理研究室 M1 中津美冴 [email protected]. 目次. 画像処理プログラミングの準備 ファイルのダウンロード・解凍・コンパイル サンプルプログラムの説明 画像を添付する際の注意点 画像処理の方法、プログラム例題 レポートについて. サンプルプログラム のダウンロード. http:// www.iipl.is.ritsumei.ac.jp/lecture. ファイルの解凍方法,コンパイル,実行方法 などは、上記ページに全て書いてあります.. - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/2.jpg)
目次
• 画像処理プログラミングの準備–ファイルのダウンロード・解凍・コンパイル
• サンプルプログラムの説明• 画像を添付する際の注意点• 画像処理の方法、プログラム例題• レポートについて
![Page 3: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/3.jpg)
サンプルプログラムのダウンロードhttp://www.iipl.is.ritsumei.ac.jp/lecture
ファイルの解凍方法,コンパイル,実行方法などは、上記ページに全て書いてあります.
![Page 4: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/4.jpg)
圧縮ファイルの内容1. ImageFileIO.c
2. ImageFileIO.h3. ImageFilter.c4. ImageFilter.h5. main.c6. ○○○.ppm7. ○○○.pgm8. ImageTools.c9. ImageTools.h10. Makefike
1. 画像の読み込み、出力データの書き出しなどを行う関数の定義
2. ImageFileIO.c 内の関数の宣言3. データを画像処理する関数の定義4. ImageFilter.c 内の関数の宣言5. メインプログラム6. カラー画像ファイル7. モノクロ画像ファイル8. 今回は関係なし9. 今回は関係なし10. make ファイル
![Page 5: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/5.jpg)
コンパイルの方法
• Makefike– make コマンドを使用する為のファイル– make コマンド・・・複数のファイルを同時
に順序よくコンパイルするコマンド
% ./imgfilter
make コマンドを実行し、コンパイルとリンクを自動的に行う
Imgfilter という実行ファイルが作成される
![Page 6: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/6.jpg)
画像の表示
• display コマンドで確認% display Castle.ppm &
• 画像の表示が上手くいかない場合–ディスク容量がいっぱい?% du –sh ・・・ディスク使用量の確
認Rainbow の個人容量は最大 50M まで
![Page 7: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/7.jpg)
メイン関数 (main.c)
• main.cint main(void) {
// 画像処理を行う関数の呼び出し // 例1) PPM 形式の入力データをネガ画像に変換 NegativeImage(); // 例2) PGM 形式のデータに線を描く // DrawLines(); // 正常終了 return 0;
}
![Page 8: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/8.jpg)
画像処理関数 (ImageFilter.c)
• ImageFilter.c– void NegativeImage(void) • PPM 形式の入力データをネガ画像に変換
void NegativeImage(void) { ・・・// PPM 形式の入力データの読み込み pRGBInputData = ReadPpm(&iWidth, &iHeight, &iMaxValue);・・・}
![Page 9: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/9.jpg)
入出力関数 (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 10: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/10.jpg)
画像処理の手順
1. ImageFilter.c に関数を追加する– BinaryImage(void)
2. ImageFilter.h 内で関数の宣言を行う3. main.c 内の main() 関数から呼び出す4. make コマンドでコンパイル
つまり・・・プログラミングの際に変更するファイルは、 ImageFilter.c ・ ImageFilter.h ・ main.c
の3つ
![Page 11: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/11.jpg)
レポートに画像を添付する際の注意
• pgm,ppm 形式の画像はそのままの形式ではレポートには載せられません( LaTeX でも Word でも)
• 次の方法でファイル形式を変換してから載せてください
![Page 12: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/12.jpg)
ファイル形式変換方法( Linux )
• ターミナル画面で↓を入力 >display ○○.pgm• ImageMagic (画像表示ツール)が起動された
ら以下の手順で変換1. 表示された画像を右クリック→ Save 2. Format ボタンをクリック 3. 変換後のファイル形式を選んで Select
( LaTeX に添付する場合は eps 形式推奨) 4. 必要ならファイル名を変更し、 Save をクリッ
ク、 Select をクリック
![Page 13: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/13.jpg)
ファイル形式変換方法( Windows )
• irfanview (http://www8.plala.or.jp/kusutaku/iview/)を使うと好きな形式に変換することができます
![Page 14: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/14.jpg)
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 15: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/15.jpg)
プログラム例題
• 白黒画像( pgm ファイル)から、反転画像を作成する
• 反転画像は、 255 から各画素の値を引き、その値を新しい画素値とすることで作成できる
![Page 16: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/16.jpg)
手順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 17: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/17.jpg)
手順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
![Page 18: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/18.jpg)
手順3• ImageFilter.h 内で ReversalImage 関数の宣言
#ifndef _IMAGEFILTER_H_#define _IMAGEFILTER_H_
void NegativeImage(void);void DrawLines(void);void ReversalImage(void);
#endif
ImageFilter.h
![Page 19: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/19.jpg)
手順4• main.c 内の main() 関数で ReversalImage 関
数を呼び出し
#include <stdio.h>#include "ImageFilter.h"
int main(void) { // NegativeImage(); // DrawLines(); ReversalImage();
return 0;}
!他の関数をコメントアウトするのを忘れないようにしてください!
main.c
![Page 20: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/20.jpg)
手順5• コマンドプロンプトで「 make 」と入力
する• コンパイルが行われ、 imgfilter という名
前の実行ファイルが作成される• 「 ./imgfilter 」でプログラムを実行
![Page 21: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/21.jpg)
レポート課題1
• 課題内容–アルファブレンディング処理
–今回の例題にある ReversalImage(void) を参考に AlphaBlending (void) というアルファブレンディング処理を行う関数を作成しなさい
– ImageFilter.h 内での宣言や main 関数内での呼び出しについては、例題と同じ
![Page 22: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/22.jpg)
アルファブレンディング( alpha blending)
• α の値が、画像左端で0、右端で1で、その間では直線的に変化させた。
g=af1+(1-a)f2
![Page 23: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/23.jpg)
レポート課題2
• 課題内容–空間フィルタリング• 平滑化, Smoothing (void)• エッジ検出, EdgeDetection (void)
–フィルタリング処理を行う関数を作成しなさい
![Page 24: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/24.jpg)
周辺画素の処理(フィルタリングプログラムを作成する際の注意)
端の画素の例外処理を忘れずに行うこと
注目画素
![Page 25: 画像情報処理1 ~画像処理プログラミング~](https://reader035.vdocuments.site/reader035/viewer/2022062218/56815b5a550346895dc9422f/html5/thumbnails/25.jpg)
• 提出期限: 2014/5/16( 金 ) 12:00
• 何か分からないことがあったら、 TA の中津まで連絡してください
• クリエーションコア 4F 知的画像処理研究室
• メールアドレス:[email protected]
課題について