OpenCVの基礎

67,073 views

Published on

第12回NSEGで発表した資料

Published in: Technology

OpenCVの基礎

  1. 1. OpenCV の基礎 <ul><li>和泉田 領一 </li></ul><ul><li>@rizumita </li></ul>
  2. 2. 自己紹介 <ul><li>安曇野市在住 </li></ul><ul><li>フリーで iOS アプリの開発 </li></ul><ul><li>Twitter: @rizumita </li></ul><ul><li>ブログ : http://tech.caph.jp </li></ul>
  3. 3. OpenCV の概要
  4. 4. OpenCV とは <ul><li>オープンソース </li></ul><ul><li>コンピュータビジョンライブラリ </li></ul><ul><li>インテルが開発・公開 </li></ul><ul><li>現在は Willow Garage が開発 </li></ul>
  5. 5. OpenCV の長所 <ul><li>画像処理に関する知識がなくても、高度な処理を簡単に利用できる </li></ul><ul><li>移植性が高い </li></ul><ul><li>無料( BSD ライセンス) </li></ul>
  6. 6. OpenCV の短所 <ul><li>汎用ライブラリなので基本的な機能を提供するのみで、具体的な機能は自分で実装しなければならない。 </li></ul><ul><li>オープンソースで BSD なので無料で使えると思いきや、 SHIFT や SURF といったアルゴリズムは特許がとられている。 </li></ul>
  7. 7. OpenCV の概要のまとめ <ul><li>無料・便利なので、まずは使ってみよう </li></ul><ul><li>権利関係で落とし穴があるので気をつけよう </li></ul>
  8. 8. コンピュータビジョンとは
  9. 9. コンピュータビジョンのレベル 画像処理 画像認識 画像理解 画像 ラベル 現実世界の記述
  10. 10. 画像処理 数学的な処理による画像の変換 2 値化 明るさ調整 色成分の抽出 色反転 コントラスト調整 切り出し ガンマ補正 グレイスケール化 増色 鏡像反転 ノイズ除去 輪郭抽出 拡大縮小 任意角回転 セピア調化 ぼかし
  11. 11. 画像処理の例 グレースケール + 2値化 変換前 変換後
  12. 12. 画像認識 コンピュータに 視覚を持たせる
  13. 13. 画像認識の例 - ロボット工学 車載画像センサー (東京大学 生産技術研究所) http://kmj.iis.u-tokyo.ac.jp/ HOG 特徴量を用いた 物体識別アルゴリズムを適用 物体識別 アルゴリズムにより歩行者のみが検出される
  14. 14. 画像認識の例 - バイオメトリクス 顔認識
  15. 15. 画像理解 2次元画像から 3 次元に復元
  16. 16. 画像理解の例 動画像からの三次元復元 奈良先端科学技術大学院大学 大阪大学 http://yokoya.naist.jp/paper/datas/653/glab.pdf
  17. 17. その他の例 <ul><li>拡張現実 ( AR ) </li></ul><ul><li>Kinect </li></ul><ul><li>アニメ顔検出 </li></ul><ul><li>Oppai-Detect3 </li></ul>
  18. 18. コンピュータビジョンまとめ <ul><li>3つのレベルがある </li></ul><ul><li>レベルそれぞれが関連している </li></ul><ul><li>応用例を知ってアルゴリズムの利用法やアイデアをふくらます </li></ul>
  19. 19. OpenCV の機能
  20. 20. 基本機能 <ul><li>行列構造体 </li></ul><ul><li>算術・線形代数演算 </li></ul><ul><li>離散フーリエ変換 </li></ul><ul><li>XML/YAML 入出力 </li></ul><ul><li>etc. </li></ul>
  21. 21. 画像処理 <ul><li>フィルタ </li></ul><ul><li>ガウシアンブラー </li></ul><ul><li>収縮・膨張 </li></ul><ul><li>リサイズ </li></ul><ul><li>リマップ </li></ul><ul><li>色変換 </li></ul><ul><li>ヒストグラム計算 </li></ul><ul><li>etc. </li></ul>
  22. 22. インターフェース <ul><li>GUI </li></ul><ul><li>画像およびビデオの入出力 </li></ul>
  23. 23. 統計的機械学習モデル <ul><li>Support vector machine (SVM) </li></ul><ul><li>決定木 </li></ul><ul><li>ブースティング </li></ul>
  24. 24. 2次元特徴検出 <ul><li>SHIFT </li></ul><ul><li>SURF </li></ul><ul><li>FAST </li></ul>sample: find_obj.cpp 画像認識の初歩、SIFT,SURF特徴量 http://www.slideshare.net/lawmn/siftsurf sample: http://opencv.jp/opencv2-x-samples/corner_detection
  25. 25. ビデオのモーション解析・オブジェクトトラッキング <ul><li>オプティカルフロー </li></ul><ul><li>モーションテンプレート </li></ul><ul><li>背景差分法 </li></ul>sample: motempl.c
  26. 26. 画像からのオブジェクト検出 <ul><li>Haar & LBP 顔検出 </li></ul><ul><li>HOG 物体検出 </li></ul>sample: peopledetect.cpp sample: facedetect.cpp
  27. 27. その他 <ul><li>カメラキャリブレーション </li></ul><ul><li>3 次元データ処理 </li></ul><ul><li>etc. </li></ul>
  28. 28. OpenCV の利用
  29. 29. 言語 <ul><li>C/C++ </li></ul><ul><li>Python バインディング </li></ul><ul><li>Java/.NET/etc. バインディング </li></ul>
  30. 30. 対応 OS <ul><li>Windows </li></ul><ul><li>Mac </li></ul><ul><li>iOS </li></ul><ul><li>Linux 他 Unix & Unix Like OS </li></ul><ul><li>Android </li></ul>
  31. 31. Mac へのインストール <ul><li>MacPorts が簡単 </li></ul><ul><li>sudo port install opencv </li></ul><ul><li>sudo port install opencv+python27+tbb </li></ul>
  32. 32. iOS での利用方法 <ul><li>iPhone で OpenCV を使う方法 </li></ul>http://niw.at/articles/2009/03/14/using-opencv-on-iphone/ja
  33. 33. Windows へのインストール インストーラ付き実行ファイルの利用 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/ ソースからビルド http://opencv.jp/opencv2-x-tips/install-on-windowswindows32bit-64bit-visual-studio-opencv21
  34. 34. Linux へのインストール <ul><li>Debian/Ubuntu はパッケージを利用 </li></ul>
  35. 35. Ubuntu でのインストール手順 <ul><li>ソースコードをダウンロードして展開 </li></ul><ul><li>sudo apt-get install cmake </li></ul><ul><li>sudo apt-get install cmake-qt-gui </li></ul><ul><li>sudo apt-get install libgtk2.0-dev </li></ul><ul><li>CMake GUI で Makefile を作成 </li></ul><ul><li>make && sudo make install </li></ul>http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.2/
  36. 36. GCC でのビルド gcc hoge.c `pkg-config --cflags opencv --libs opencv`
  37. 37. グレースケール化 #include <stdio.h>#include <cv.h>#include <cxcore.h>#include <highgui.h>int main(int argc, char **argv){ IplImage *sourceImage = cvLoadImage(&quot;lena.jpg&quot;, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); IplImage *grayImage = cvCreateImage(cvGetSize(sourceImage), IPL_DEPTH_8U, 1); cvCvtColor(sourceImage, grayImage, CV_BGR2GRAY); int param[] = {CV_IMWRITE_JPEG_QUALITY, 95}; cvSaveImage(&quot;lena_gray.jpg&quot;, grayImage, param); cvReleaseImage(&sourceImage); cvReleaseImage(&grayImage); return 0;}
  38. 38. グレースケール化実行結果
  39. 39. 顔認識 CvCapture *capture = NULL; IplImage *srcImage; int key; if ((capture = cvCreateCameraCapture(0)) == NULL) return -1; // カメラの初期化 cvNamedWindow(&quot;Face Detection&quot;, CV_WINDOW_AUTOSIZE); // ウィンドウの作成 CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade *)cvLoad(&quot;haarcascade_frontalface_alt2.xml&quot;, 0, 0, 0); // 顔正面分類器の読み込み if (cascade == NULL) return -1; CvMemStorage *storage = cvCreateMemStorage(0); // 顔候補の矩形を保存するメモリーストレージの確保 while(1) { srcImage = cvQueryFrame(capture); // カメラから画像を読み込み if (srcImage == NULL) continue; IplImage *grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); cvCvtColor(srcImage, grayImage, CV_BGR2GRAY); cvEqualizeHist(grayImage, grayImage); // ヒストグラムを平均化 = 輝度を均一化し、コントラストをあげる cvClearMemStorage(storage); // ストレージを再利用 CvSeq *faces = cvHaarDetectObjects(grayImage, cascade, storage, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING, cvSize(0,0), cvSize(0,0)); // 顔の検出 int i; for (i = 0; i < (faces ? faces->total : 0); i++) { CvRect *rect = (CvRect *)cvGetSeqElem(faces, i); cvRectangle(srcImage, cvPoint(rect->x, rect->y), cvPoint(rect->x + rect->width, rect->y + rect->height), CV_RGB(255, 0, 0), 3, CV_AA, 0); } cvShowImage(&quot;Face Detection&quot;, srcImage); key = cvWaitKey(3); if (key == 'q') break; // q キーが入力されると終了 } // 以下リリース処理 cvReleaseCapture(&capture); cvReleaseHaarClassifierCascade(&cascade); cvReleaseMemStorage(&storage); cvDestroyWindow(&quot;Face Detection&quot;);
  40. 40. 利用のまとめ <ul><li>インストールは結構簡単だけど、 TBB とか考え出すと… </li></ul><ul><li>お好きな言語でどうぞ </li></ul><ul><li>サンプルは沢山あるから、とりあえず読め </li></ul>
  41. 41. OpenCV 情報リソース
  42. 42. Web サイト <ul><li>OpenCV.jp </li></ul><ul><ul><li>http://opencv.jp / </li></ul></ul><ul><ul><li>日本語訳ドキュメント・サンプル多数 </li></ul></ul><ul><li>特集 : OpenCV で学ぶ画像認識 gihyo.jp </li></ul><ul><ul><li>http://gihyo.jp/dev/feature/01/opencv </li></ul></ul><ul><ul><li>皆川卓也氏による連載。 OpenCV を利用した画像認識について。 </li></ul></ul><ul><li>Sourceforge </li></ul><ul><ul><li>http://sourceforge.net/projects/opencvlibrary/ </li></ul></ul><ul><li>OpenCV Wiki </li></ul><ul><ul><li>http://opencv.willowgarage.com/wiki/ </li></ul></ul><ul><ul><li>Willow Garage が公開している Wiki </li></ul></ul>
  43. 43. 書籍 <ul><li>OpenCV プログラミングブック第2版 OpenCV1.1 対応 </li></ul><ul><ul><li>毎日コミュニケーション </li></ul></ul><ul><ul><li>奈良先端科学技術大学院大学 OpenCV プログラミングブック制作チーム著 </li></ul></ul><ul><li>詳解 OpenCV コンピュータビジョンライブラリを使った画像処理・認識 </li></ul><ul><ul><li>オライリー・ジャパン </li></ul></ul><ul><ul><li>Gary Bradski / Adrian Kaehler 著 - 松田 晃一訳 </li></ul></ul><ul><li>コンピュータビジョン </li></ul><ul><ul><li>共立出版 </li></ul></ul><ul><ul><li>David A. Forsyth ( 著 ), Jean Ponce ( 著 ), 大北 剛 ( 翻訳 ) </li></ul></ul>

×