7月22日、
OpenCV3.1を使った画像処理入門
を聞いてきたんだけど、お金を取っているセミナーなので、
そのまんま書いてしまうと、営業妨害になってしまうので、
かなり、大雑把に(肝心なことは書かずに)メモメモ
(逆に、そこで本題ではないけど、大事なインストールは詳しく!)
大事なことは、表題に書いた。その一言に尽きる。
・講師自己紹介
OpenCV3プログラミングブック
■1.イントロダクション
・本を見つける・・・メカニズム
→コンピューターでは難しい
→センサーとコンピューターがあればできる
画像処理・認識技術の応用例
・笑顔検出、アイサイト
C言語による画像処理プログラミング
→めんどくさい→むだ→OpenCV
OpenCV(Open Computer Vision Liblary)
・オープンソース:修正BSD
1000万回以上のダウンロード
・利点
簡単
かなり研究者が使っている→OpenCVにコミット:使ってくれる
パテントで保護されているモノが入っていることがある
→インストーラー版には入ってこない(Non free)
OpenCVの資料
・http://opencv.org
むかしはYAHOOグループ→公式フォーラムに
・http://docs.opencv.org 公式リファレンス
・http://opencv.jp/ 日本語
・イメージングソリューション
OpenCVも含めた、画像処理全般
http://imageingsolution.net
OpenCVの本
・OpenCV 2 プログラミングブック
・詳解OpenCV 6~7年前、古い
・pratical Computer Vision Project 集合写真の顔を抜きたいとか
・OpenCVによる画像処理入門:画像処理の入門書
・Learning OpenCV For Version3.0
・OpenCV3プログラミングブック
■2.OpenCVによる画像処理アルゴリズムと実装
・開発環境の導入 Visual Studio Express 2013 for Windows Desktop
→いま、2015が最新だけど・・
VS VC の対応関係
2015 14
2013 12
2012 11
2010 10
2008 9
OpenCV3.1は64ビット版のみ対応
→32ビット版は3.0まで
・インストール
ダウンロードする(exe)
exeを実行する(=解凍する)
適当なところにおいて、必要なら名前変える
環境変数の設定で、pathにbuild/x64/vc12/binがとおるように
・Visual Studioで使われる用語
ソリューション;統合して配りたいとき(例:OpenCVサンプル)
プロジェクト:ソースファイルを束ねている(例:にちか)
ビルド→Make
・新しいプロジェクトを作る→実行
・VisualC++ Win32 コンソールアプリケーション→空のプロジェクト
・ソリューションエクスプローラーで、ソースファイルの追加 C++ファイルを追加 main.cpp
→ここでC++と決定される
・X64の場合 ビルド→構成マネージャー:プラットフォームをX64に
・インクルードディレクトリの設定
ソリューションエクスプローラーでプロジェクト名を選択、右クリックでプロパティ
→現在の構成(Debugで、X64(に今直した))に依存・構成ごとに設定
C/C++→全般→現在のインクルードディレクトリでOpenCVのbuild\include
リンカー→全般→追加のライブラリでbuild/x64/vc12/lib
・ライブラリファイルの書き込み
・ライブラリの指定:以下の2つの方法がある。どちらか選択
#ifdef _DEBUGで
リンカー→入力→追加の依存ファイル opencv_world310d.lib
(310:OpenCV3.1を使う場合。3.0なら300)
・プログラミング
・ビルド:ソリューションのビルド
・実行:再生ボタンをクリックすればOK(デバッグのデバッグなしで開始でもOK)でもOK
CV_8UC3:8ビット3チャンネル
・基礎的なプログラミング
画像ファイル読み込み、保存
画像読み込み cv::imaged
表示
ウィンドウ作成 cv::namedWindow // 省略可能
表示 cv::imshow
保存:cv::imwrite →ファイルの拡張子で判断して、読み書き(変換できる)
カメラ
変数宣言 cv::VideoCapture capture(0);→もし、2だったら、3番目のカメラを使う
カメラから画像 capture >> frame
フレームレートは適当 waitkey(まち秒数) でフラッシュもする
動画ファイル 変数宣言 cv::VideoCapture capture("sample.avi"); と動画ファイル名を書くだけ。あとはカメラと同じ
・幾何的画像処理(変形:拡大縮小回転)
スケーリング(拡大縮小)、シアーリング(おしつぶす:せんだん)、回転、反転
→2行2列の行列で書ける→でも、平行移動できない
アフィン変換→3列目追加
→でも、パースする(遠近法)は表せない
射影変換→一般系:3行3列だと表現できる
3X3行列の変数9個をどうやってきめる?→移動先の4点持ってきて、連立方程式を解く
cv::getPerspectiveTransformでOK
→変換画像はcv::warpPerspectiveでOK
・光学的画像処理
2値化
グレイスケールにする:cv::cvtColor
2値化する:cv::threshold
・画像からの特徴量抽出
エッジ抽出:濃度が急峻に変化する部分
たとえば、ソーベルフィルタcv::Sobel
→グレースケールに変換後、Sobelフィルタ(x方向への1次導関数)を適用
・直線検出
ハフ変換: 消失点の検出など
入力画像のエッジをとる(Cannyフィルタを用いる)cv::Canny
古典的Hough変換を行うcv::HoughLines
円検出:ハフサークル
・位置姿勢推定
カメラのピクセル点を実際の座標系(直線)に
→2000年 革命的なパターン:平面チェッカー3枚以上でできる
チェックパターンの交点座標を求め,cv::findChessboardCorners
キャリブレーションcv::calibrateCamera
ステレオカメラキャリブレーションもできる→距離判定
・RGB-Dカメラによる3次元形状の実時間取得例の紹介
距離画像センサーとして使いたい人がいっぱいいた
depthセンサー
Kinect Light codingを使っていた
Ver1:性能はそんなによくない
Ver2:Time of flight法を使う
kinect for windows SDKの利用
→ダウンロードすると、kinect ヒュージョン動かせる(マシンスペック)
・PCL(Point Cloud Library)
■OpenCV1.0系からの移行:3.0とは何なのか
2006年10月 OpenCV1.0 カメラキャリブレーション
2008年10月 SURF、ステレオマッチング
2009年9月 OpenCV2.0
C++インターフェース:今主流
特徴抽出、インストール構成変わった、バグ多かった
2010年4月 OpenCV2.1
インストーラー復活:オールインワンインストーラー
2012.5 OpenCV2.4
OpenCV3.0
・C++インターフェースへの移行
・BASE+Contribモデル→coreはBASEだけ Contribを使いたい人はビルドする
・モジュール構造の刷新
・トランスペアレントAPI
同じ実行時コードで実行環境に合わせてCPU,GPUを使い分け
■Q&A
・形状認識について
SURF,SIFT、テンプレートマッチング、形状マッチングについて