2011年3月5日土曜日

第10回コンピュータビジョン勉強会@関東(番外編) OpenCV祭り

前から気になってた勉強会。
でも,本持ってないし…とか思ってたら番外編があったので参加してきた。
慶応大学矢上キャンパスが会場なのでご近所です。

以下,当日のプログラム。
だいたい予定通りに進んでた。


time 発表者 タイトル
13:00-13:10 Opening
13:10-13:40 ms_wiki リリース動向とOpenCV Groups
13:40-14:10 tomoaki_teshima 画像/行列の扱い方
14:10-14:25 break
14:25-15:00 idojun OpenCVの1/500
15:00-15:40 takmin 物体検出徹底解説!
15:40-16:10 dandelion1124 便利マクロ解説+OpenCV on iOS
16:10-16:25 break
16:25-17:05 miyabiarts OpenCVを用いた一般物体認識
17:05-17:35 fukushima1981 calib3dモジュールで3次元再構築
17:35-17:40 Closing



種々のリンクと,発表内容・思ったことをメモメモ。発表聞いて調べてみたりしたことも入ってるので,必ずしも発表そのものの内容と対応しているわけではありません,あしからず。
詳細みたくなったらTogetterとスライド資料を見直そう。




リリース動向とOpenCV Groups
発表は日大の@ms_wikiさん。Momma's wiki運営。このサイト,OpwnCV以外にもいろいろ面白いトピックあったから後でのぞいてみよう。
内容はOpenCVのリリースとかYahoo GroupsのOpenCVフォーラムの話。

・OpenCV2.3は5月リリース予定。
・最近のホットトピックはGPU対応。
・リリース版にはちょくちょくバグが含まれる。たとえば,2.2だと64bitでUSBカメラ使えないとかね。
・フォーラムで報告されるとウィローガレージの人が直してくれるけど,反映はSVNの方にしかされない。
・ので,OpenCV使うならSVN版のほうがいい。安定したのを使いたいときはBranch,最新手法(今だとKinectやCUDA,androidとか)対応版をすぐに使いたい人はTrunk。ただし,Trankは時々ビルドに失敗したりするよ。
・OpenCVやCV業界の動向追うのはYahooGroupsのOpenCVグループで。
・ググレカス=GIYF(Google is Your Friend)。他バリエーション多数。


画像/行列の扱い方
発表は愛知工科大の@tomoaki_teshimaさん。専門はITSらしい。
内容はIplImageとCvMatとcv::Matの互換性とかあれこれ。
さらにCvArrayも登場。このあたり,ものすごいはまったことがあるので,参考になった。いろいろメモってあるけど,文章でわかるように説明するのむずいの多いから,スライド見直して。
・過去の遺産があるとcv::Matへ移行するの大変そう。0から始めるならcv::Matだけで頑張った方がよさそう。かもしれない。(頑張ったことないからわかんない)
・「行列の行と列」と「画像のx,y」は指定が逆になるから注意!わかってるけど,いっつもわからなくなる。
・widthは画像の幅だけど,widthStepはメモリ上での幅だよ。混同しない!
・さらにIplImage.widthStepは4バイト単位で切り上げするから注意。
Tips集
・@miyabiartsさんのTweetより 
 良ければ、参考にしてください。「OpenCVのcv::Mat / cv::Mat_< T >の使い方」http://miyabiarts.net/?p=626 http://miyabiarts.net/?p=665 #cvsaisentan


OpenCVの1/500
発表は@idojunさん。OpenCV.jpのなかのひと。
内容はテンプレートマッチング。数式多くて難しかった!
手元に資料がなかったんであんまりメモれてないんだけど…とりあえず,紹介されたフーリエ変換のデモには感動した。わかりやすい!

・@miyabiartsさんのTweetより 
名古屋CV・PRML勉強会の1回目が「テンプレートマッチング」だったので、補足のために中京大学 橋本先生の資料 http://bit.ly/hGRzAs 自分が発表したアクティブ探索法http://bit.ly/fX4lwb #cvsaisentan #nagoyacv


物体検出徹底解説!
発表は主催者の@takminさん。
内容は一般物体検出における基本手順やアルゴリズムの解説とOpenCVにおける検出器作成方法(画像DBの紹介やGT取得ツールの紹介)の解説。
聞きなれてる分野の話だから,復習のつもりで聞いてた。

・Viola&Johnsのアルゴリズム解説。えらい分かりやすかった。いつか読もうと思いながらまだ読んでないけど,そろそろ元論文に目を通してみてもいいかもしれないと思った。
・あと,機械学習嫌いだけど,Boosting関連も実装レベルまで理解しておかなきゃマズイ気がする。
・OpenCVでの物体検出。弱識別器として使う特徴量の基底クラスが導入されたので,そいつを継承すれば独自特徴量の実装が楽にできるらしい。HaarとLBPはすでにある。
・ver.2.0以降の物体検出器生成手段を書いた正式なドキュメントは,takminさんの知る限りでは存在しない。
・学習画像の準備。GT取るのがものすごく面倒そう…だけど,コンピュータが正しい結果を出したかどうかを判定する値なんだからコンピュータにやらせる訳にはいかないのかぁ。



便利マクロ解説+OpenCV on iOS
発表は@dandelion1124さん。OpenCVプログラミングブックの執筆者の一人。
内容は,OpenCVにある便利なマクロの紹介と,iOSでOpenCVをつかってみよう話。

・とりあえず,iOS SDK+OpenCV使うようなことになったらこのサイトみながらインストールしよう。あと,「SVN版OpenCVのビルド」なんて項目もあったから目を通すこと(→自分)
・ObjectiveCとかいう懐かしい(※学部4年のころの研究室がMacだったのでちょっと触った。最終的にはCで実装したけど…)単語も聞こえてきたけど,ここしばらく触ってないので,詳細な内容は参考程度に聞く。
・マクロは
-CV_IMAGE_ELEM(image, elemtype, row, col):画素値取得。IplImageのみ,エラー処理なし。
-CV_IS_MAT(img):型判定
とかの紹介。
・リンクするライブラリがわからなくなったらOpenCV-2.2.0¥doc¥OpenCV.pdfを参照。


OpenCVを用いた一般物体認識
発表は名大村瀬研の@miyabiartsさん。専門は車載カメラ画像らしいけど…ものすごくいろいろな分野をやっている印象。オレもこうなりたい。
内容はSIFTからBoF,SVMまで一般物体認識の手順をOpenCVでひと通り。会社入って最初に3ヶ月くらいかけて理解&実装したこと全部説明されたよね…うん,あのころ聞きたかった,これ。
というわけで説明していただいた中身はほぼ全て知っていたので真新しいことは特になく,復習復習。ただ,自分はMATLABで実装したんで,OpenCVでの実装手順は参考になった。
OpenCVってBoFまであるんだね。
ネタ込みですごく面白く,かつ分かりやすかった発表。見習いたい。QBわかんなかったけどw

・OpenCVってdoubleだと落ちることあるからfloatでやるのが無難らしい
・SVMのツールボックス?はOpenCVの使うより将軍なるものがいいらしい。
・Togetter - 「OpenCV機械学習に対する感想の一つ


calib3dモジュールで3次元再構築
発表は名工大の@fukushima1981さん。3D画像処理の人です。
内容もOpenCVを使って3次元再構築しようって話。
そのあたり専門の学生がいたっぽく,キャリブレーションのところでものすごい勢いで質問が出ていた。キャリブレーションはガチでやったことはないけれど,何かにつけて出てくるのでなかなかおもしろい話題だった。
キャリブレーションしやすいのはチェスボードよりも「田」マークで,それよりも円形マーカーの方がいい,って話はこれまでも2,3回聞いたことはあった気がするけど,最近のOpenCVでは円形マーカー使ったキャリブレーション関数が実装されているらしい。cv::findCirclesGrid()。
そのあたりで時間食い過ぎて,本筋だったらしいステレオマッチングの話はあっさり。そこも結構聞いてみたかったから残念。
ちなみに,Kinectは相当にマッチングしやすいパターンを投影してるのでステレオカメラ程度じゃ太刀打ち出来ないらしい。
だがしかし,あのステレオカメラはちょっと欲しいぞ…
Minoru3DWebCam

Togetterでマーカー議論の後日談?があったので引用。発言は全部@chaoticactivityさん
・「チャッカーパターンより黒背景に白矩形の方がコーナーの精度が良い」といのは誤りです.FindCornerSubPix() のアルゴリズムを考えれば,理論的にチャッカーパターンの方が精度が出るはずです.「チェッカーパターンの交点がグレーになって誤差が出る」というのは事実で,その影響を軽減するためにFindCornerSubPix()にはzero_zoneという引数があります.FindCornerSubPix()の引数winとzero_zoneは意外と重要でなのですが,これらは撮影されたパターンの見え方とアルゴリズムを同時に加味する必要があるので「こうやって決めれば良い」という簡単な答えは無いです.とりあえず,zero_zoneは最小でも1x1は指定しておくべき.winは画像中のチェッカー1マスのサイズ程度に設定すれば良いはず.それと,チェッカーパターンは縦横まっすぐ見えるよりも,斜めに傾けた方がcvFindCornerSubPix() の精度は良い.でもレンズ歪を取るには画像全体に見える方が良いので,正面からまっすぐ見せた画像も使うことになります.で,ここまで書いたようなコーナー検出のサブピクセル推定の精度の話は,円形マーカだと原理的に解決されているはず.多分.だから,円形マーカがちゃんと実装されていれば,ここまでの話は過去の異物になる.


関連リンク

0 件のコメント:

コメントを投稿