コンピュータビジョン 特 論 Advanced Computer Vision 第 3 回 今 回 の 内 容 OpenCVのインストール 方 法 基 本 的 な 使 い 方 について 学 ぶ 資 料 (New 浅 見 君 より): http://www.wakayama-u.ac.jp/~wuhy/how_to_install_opencv.html 資 料 (New2): http://cvwww.ee.ous.ac.jp/oc20inst.html 資 料 (Old 加 藤 丈 和 先 生 より): http://www.wakayama-u.ac.jp/~wuhy/opencv.pdf 資 料 (CMake 陳 謙 先 生 より): http://www.wakayama-u.ac.jp/~chen/cmake/cmake.html CVのプログラムに 必 要 なもの カメラ パソコン(OS) 開 発 環 境 (コンパイラ) USBカメラ DVカメラなど 2000 円 ~ そして Windows Linux Mac VisualStudio C++2010( 無 料 公 開 ) gcc (オープンソース 無 料 ) Xcode (MacOSXについてくる) CMake OpenCV ライブラリ(オープンソース 無 料 ) 2.2 or 2.3 + CMake OpenCVライブラリとは (Open Source Computer Vision) Intel が 中 心 に 開 発 オープンソースで 公 開 世 界 中 の 研 究 者 が 自 分 が 開 発 したアルゴリ ズムを 実 装 煩 雑 な 画 像 の 読 み 書 きなどを 簡 単 にする 多 くのアルゴリズムが 実 装 されている もちろん 無 料 http://opencv.willowgarage.com/wiki/ OpenCVについて OpenCVについて 4つのライブラリ 群 からなる CXCORE 画 像 のデータ 型 の 定 義 画 像 の 基 本 的 な 定 義 画 像 のコピー 画 像 同 士 の 四 則 演 算 描 画 など CV CVのアルゴリズムを 実 装 した 関 数 画 像 処 理 構 造 解 析 動 作 解 析 追 跡 パターン 認 識 カメラ 校 正 と3 次 元 復 元 MLL 機 械 学 習 パターン 認 識 HighGUI 簡 易 GUI 画 像 ファイルの 読 み 書 き 画 像 キャプチャ 1
OpenCVのインストール 方 法 プログラムのコンパイル 方 法 テキスト 参 照 For Linux http://www.wakayama-u.ac.jp/~wuhy/how_to_install_opencv.html For Windows http://cvwww.ee.ous.ac.jp/oc20inst.html OpenCV2.3の 入 手 ダウンロード インストール 環 境 設 定 http://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/ For Linux & Windows のCMake (New) http://www.wakayama-u.ac.jp/~chen/cmake/cmake.html OpenCV Wiki: http://opencv.willowgarage.com/wiki/ OpenCVの 使 い 方 テキスト 参 照 (opencv.pdf) http://www.wakayama-u.ac.jp/~wuhy/opencv.pdf 注 意 : 2 章 が 古 いので 前 ページの 情 報 を 使 ってください 2 章 以 降 は 色 々 参 考 できるが エラーが 出 た 場 合 WEBから 最 新 情 報 を 探 して 利 用 してください OpenCVの 画 像 クラス/ 構 造 体 http://tessy.org/wiki/index.php?opencv%a4%ce%b2%e8%c1%fc%a5%af%a5%e9%a5%b9%a1%bf%b9%bd%c2%a4%c2%ce OpenCVで 画 像 を 作 るにあたって, 様 々なクラス / 構 造 体 を 使 っている IplImage (OpenCV 1.1 時 代 ) CvMat CvArr cv::mat (OpenCV 2.0から 登 場 したC++ 版 の 画 像 クラス) cv::inputarray (OpenCV 2.3 以 降 ) プログラムで 画 像 を 扱 う (OpenCV 1.1 時 代 :IplImage 構 造 体 ) テキスト4.2 節 R G B R G B (0,0) (1,0) R G B R G B (n,0) (0,1) widthstep = 次 の 行 の 先 頭 までのバイト 数 = 1ラインのバイト 数 プログラムで 画 像 を 扱 う (OpenCV 2.0: cv::matの 基 本 処 理 ) http://opencv.jp/cookbook/opencv_mat.html cv::mat クラスは, 実 際 のデータへのポインタと, 様 々 なプロパティ( 幅, 高 さ,ビット 深 度 など)を 保 持 している 新 しい 画 像 の 作 成 (OpenCV 1.1 時 代 :IplImage 構 造 体 ) 例 :640 480の 画 像 サイズ デプス8 3チャンネルの 画 像 を 作 る 1つの 画 素 の1つのチャンネルのデータ のビット 数 をデプスと 呼 ぶ 濃 淡 画 像 :256 段 階 デプスは8ビット カラー 画 像 :RGBそれぞれ256 段 階 8ビット*3チャンネル 2
ファイルからの 画 像 の 読 み 書 き (OpenCV 1.1 時 代 :IplImage 構 造 体 ) IplImage *image; iscolor 1:カラー 画 像 として 読 み 込 み 0: 濃 淡 画 像 として 読 み 込 み -1: 画 像 ファイルに 従 う 読 み 込 み 書 き 込 み -1の 場 合 : 画 像 ファイルのフォーマットはsuffix( 拡 張 子 )から 自 動 的 に 判 断 読 み 込 めるフォーマットは ppm, pgm, pbm, png, jpeg, tiff, bmpなど セーブできる 画 像 は デプスが8( 符 号 なし:8U) 1か3チャンネルの 画 像 のみ それ 以 外 の 場 合 は cvsave(マニュアル 参 照 )を 使 うか 自 分 で 保 存 用 の 関 数 を 作 成 すること 画 素 へのアクセス ある 画 素 のメモリ 上 のアドレスを 計 算 x 座 標 チャンネル 数 デプス x 座 標 y 座 標 widthstep y 座 標 unsigned char *pixel; /* デプスが8ビット 符 号 なし の 場 合 */ *depth デプスが8 以 外 の 場 合 RGB3チャンネルの 場 合 R G B 赤 色 成 分 :pixel[0] 0~255 緑 色 成 分 :pixel[1] 0~255 青 色 成 分 :pixel[2] 0~255 画 素 の 型 と 変 数 の 型 の 関 係 画 素 値 を 反 転 するサンプルプログラム unsigned char *pixel; /* デプスが8ビット 符 号 なし の 場 合 */ こちらが 使 える 環 境 なら こちらのほうが 安 全 uint8_t *; or unsigned char * sint8_t *; or signed char * uint16_t *; or unsigned short * sint16_t *; or signed short * uint32_t *; or unsigned int * sint32_t *; or signed int * float * double * どのCでも 使 えるが サイズは 環 境 依 存 pixel[c] = 255 - pixel[c] /* c=0, 1, 2 */ サンプルプログラム( 前 半 ) サンプルプログラム( 後 半 ) x 座 標 チャンネル 数 y 座 標 x 座 標 y 座 標 widthstep 実 行 : 実 行 ファイル 名 argv[0] 入 力 画 像 名 argv[1] 出 力 画 像 名 argv[2] argv[1]という 名 前 の 画 像 を カラー 画 像 (=1)として 読 み 込 み argv[2]という 名 前 の 画 像 を 書 き 込 む 3
IplImageとcv::Matとの 対 応 IplImage cv::mat 画 像 の 幅 width cols 画 像 の 高 さ height rows 画 像 一 行 あたりのバイト 数 widthstep step 1ピクセルあたりのビット 数 depth depth() チャンネル 数 nchannels channels() 画 像 の 種 類 - type() 画 像 データのポインタ imagedata data 画 像 メモリーの 確 保 と 画 素 へのアクセス: https://www.jstage.jst.go.jp/article/itej/64/8/64_1235/_pdf 動 画 像 処 理 ムービーファイルを 読 み 込 んで 処 理 カメラから 直 接 キャプチャ Windowsの 場 合 :VFW(Video for Windows)に 対 応 したカメラ(ほとんど) Linuxの 場 合 :Video4Linux 対 応 のカメラ もしく はDCAM(IEEE1394 非 圧 縮 )のカメラ MacOSXの 場 合 :QuickTime 対 応 のカメラ( isightなど) 動 画 の 処 理 (Capture 構 造 体 ) (テキスト 図 11のExample4.cより) Capture 構 造 体 で 動 画 の 取 り 込 みを 行 う ムービーからの 取 り 込 みもカメラからの 取 り 込 みも 可 能 レシピ1:クロマキー 合 成 クロマキー 合 成 : 入 力 画 像 から 背 景 を 取 り 除 いて 別 の 背 景 に 重 ね 合 わせる frame binary IplImage *image; カメラの 番 号 (-1にすると 自 動 選 択 ) ムービーからcapture=cvCaptureFromAVI( ファイル 名 ); background cvcopy 画 像 を1フレーム 読 み 込 む(キャプチャ) クロマキー 合 成 のプログラム 入 力 画 像 背 景 画 像 // 背 景 差 分 cvabsdiff(frame,back,diff); 差 の 画 像 // 差 の 画 像 を 濃 淡 画 像 に 変 換 cvcvtcolor(diff,gray,cv_bgr2gray); // 二 値 化 cvthreshold(gray,binary,(double)thresh,255,cv_thresh_binary); //ノイズ 除 去 ( 縮 小 拡 大 法 ) cvmorphologyex(binary,binary,null,null,cv_mop_close,3); cvmorphologyex(binary,binary,null,null,cv_mop_open,3); cvnot(binary,binary); // 合 成 cvcopy(background,frame,binary); 別 の 背 景 と 合 成 人 物 領 域 を 取 り 出 す レシピ2: 直 線 検 出 Hough 変 換 (ハフ 変 換 )による 直 線 検 出 画 像 の 微 分 ( 空 間 的 な 変 化 を 調 べる) エッジ 検 出 ( 急 激 に 変 化 する 部 分 を 検 出 ) 直 線 のあてはめ 詳 細 は 第 6 回 物 体 認 識 人 工 物 の 検 出 などに 使 える 直 線 以 外 の 幾 何 学 的 な 図 形 ( 例 えば: 円 楕 円 )を 検 出 することもできる GUIや 画 像 取 得 を 含 めて 全 体 で 80 行 くらいのプログラム 4
直 線 検 出 のプログラム // 入 力 画 像 を 濃 淡 画 像 に 変 換 cvcvtcolor(frame,gray,cv_bgr2gray); カラー 画 像 を 濃 淡 画 像 に 変 換 レシピ3: 動 きの 検 出 微 小 領 域 ごとに 似 ている 部 分 を 探 す cvcanny(gray,edge,thresh1,thresh2,3); エッジを 検 出 ( 詳 細 は 第 5 回 ) lines = cvhoughlines2( edge, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, thresh3, 30, 10 ); 直 線 のあてはめ( 詳 細 は 第 6 回 ) 時 刻 t 時 刻 t+1 フレーム 間 の 画 像 上 の 動 きを 各 画 素 に 対 して 求 める(オプティカルフロー) 侵 入 者 検 出 モーションキャプチャなど サンプルプログラム:lkdemo レシピ4: 顔 検 出 サンプルプログラム:facedetect 顔 or 顔 じゃない? 識 別 器 顔 のサン プル 画 像 カスケード 型 識 別 器 とAdaBoostによる [Viola 01] 顔 検 出 入 力 強 識 別 器 T T T L1 L2 L3 Early Reject Early Reject Early Reject Face 顔 以 外 のサ ンプル 画 像 Non Face 最 近 のデジカメ プリンタなどに 広 く 採 用 されている 有 名 なアルゴリズム ほぼ 実 時 間 で 顔 検 出 に 成 功 まとめ コンピュータビジョンとは 実 世 界 の 状 態 をカメラの 画 像 映 像 を 使 って 理 解 すること コンピュータビジョンの 技 術 は 工 業 製 品 をはじめ 監 視 やインターフェースを 中 心 に 色 々なところで 使 われ はじめている OpenCVライブラリを 使 えば コンピュータビジョン 技 術 を 手 軽 に 使 うことができる 各 自 OpenCVライブラリをインストールしておくこと (Windows, Linux, MacOSどれでもいい) 出 席 チェック2 1) 画 像 処 理 系 のプログラムの 経 験 がある? 2) 幅 W 高 さHである 画 像 のy=50 行 x=100 列 目 の 画 素 をアクセスする 方 法 ( 式 )? 3)その 画 素 の 緑 成 分 の 値 を 取 り 出 す 方 法? 名 前 学 籍 番 号 今 日 の 日 付 を 記 入 5
課 題 レポート1 OpenCVもしくは その 他 の 画 像 を 処 理 する 環 境 をイン ストールする テキスト 図 3(Example3.c) 程 度 の 簡 単 なプログラムを 作 成 し 動 作 を 確 認 する ( 処 理 内 容 は 何 でも 良 い) レポートには 次 の 内 容 をまとめる 1. 処 理 内 容 を 明 記 した 上 プログラムリスト 2. 入 力 画 像 と 実 行 結 果 画 像 3. 処 理 内 容 の 説 明 提 出 期 限 :3 週 間 以 内 ( 講 義 内 あるいは 私 の 居 室 A612) 注 : 必 ず 学 籍 番 号 名 前 と 課 題 番 号 を 記 入 してください 画 像 特 徴 ( 点 直 線 領 域 )の 検 出 と 識 別 -1 画 質 の 改 善 エッジの 検 出 濃 度 ヒストグラム(Histogram) 画 素 数 800 600 400 200 0 濃 度 ヒストグラム(Histogram)は 画 像 の 濃 度 値 を 横 軸 に その 濃 度 値 を 持 つ 画 素 数 を 縦 軸 に 取 った ヒストグラム 0 19 38 57 76 95 114 133 152 171 190 209 228 247 ヒストグラム( 濃 淡 画 像 ) 各 濃 淡 レベル( 輝 度 値 )の 画 素 の 数 を 数 えあげたもの 輝 度 値 の 分 布 が 分 かる g thenumber of pixelsin I withgraylevel g. 画 素 数 Luminosity 輝 度 値 濃 度 値 33 34 コントラスト(Contrast) コントラストは 画 像 の 明 暗 の 差 を 表 す 指 数 同 じ 階 調 ( 濃 淡 レベル 数 が 同 じ)の 画 像 であっても 画 質 は 明 らかに 異 ることもあり (a)の 画 像 の 濃 淡 レベルは64~191に 分 布 ( 狭 い) (b)の 画 像 の 濃 淡 レベルは0~255に 分 布 ( 広 い) 濃 淡 分 布 の 異 なる 画 像 とその 濃 淡 ヒストグラム 6
画 像 のコントラスト 画 像 中 の 濃 淡 レベルの 最 小 値 をImin 最 大 値 をImaxと すると 画 像 のコントラストCは 次 式 で 定 義 される C = (Imax Imin) / (Imax + Imin) 尚 コントラスト 比 =Imax / Imin 画 像 表 示 装 置 などの 画 質 の 尺 度 としてコントラスト 比 が 比 較 的 よく 使 用 される 練 習 課 題 : 前 の 画 像 のコントラストCをそれぞれ 計 算 してください (a)の 画 像 の 濃 淡 レベルは64~191に 分 布 (b)の 画 像 の 濃 淡 レベルは0~255に 分 布 注 : 名 前 学 籍 番 号 日 付 を 記 入 ヒストグラム(カラー 画 像 ) R,G,B, 輝 度 (Y)の4つのヒストグラム R G B Computer Graphics R G B Y = 0.299R + 0.587G + 0.114B U = -0.169R - 0.331G + 0.500B V = 0.500R - 0.419G - 0.081B Luminosity L L ヒストグラム(カラー 画 像 例 ) 0.03 0.025 0.02 0.015 0.01 0.005 0 0 50 100 150 200 250 red pdf green pdf blue pdf luminosity pdf 39 7