Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OpenCVの基礎

76,010 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>

×