Miyabiarts.net

一年に一度の更新頻度

月別アーカイブ: 5月 2011

第7回 名古屋CV・PRML勉強会

今回は、「画像処理プログラミング入門」をテーマとして開催しました。

画像処理プログラミング基礎(OpenCV):@miyabiarts

オープニングから引き続けての発表です。今回はライブコーディング形式でやってみようかと、PCにOpenCVをインストールしてから、実際に画像を表示させるまでをやってみました。事前に上手く動くように試してみてはいたのですが、やはり本番では色々問題が起こるものですね。特にバージョン管理まわりは皆さんがなかなかやってないだろうと思って、紹介するつもりでやってみたら、全然上手く行かなくてお恥ずかしい限りです。

PRMUアルゴリズムコンテストの紹介:加藤くん

毎年開催されているPRMUアルゴリズムコンテストの紹介です。今年は、「勝ったのは誰だッ! -じゃんけんの勝敗判定-」という内容になっています。ついでに名古屋大学で開発している画像処理ライブラリMISTの紹介をしました。

 

Processingによる画像処理プログラミング:藤吉先生(@hf149)

ProcessingはJAVA上で動く簡易言語ですが、元々コンピュータアートを目的としているため、画像処理を簡単に行うことができます。単純に絵を描くだけではなく、コンピュータビジョンの色々な処理を行うことができるため、プロトタイプを作るために大変便利です。

藤吉研究室では、Prossingによるコンピュータビジョンの例を多く公開しているため、とても参考になります。

OpenCV on Android:高橋さん

当日の飛び入りでOpenCVに付随しているAndroid上で動くサンプルを実機で実際に動いているところを紹介していただきました。FASTによる特徴点検出だとリアルタイムで動くのでなかなか凄いです。自分も環境構築まではやったものの放置したままだったので、なんとかしなければとずっと思っています。

Computer Vision は2次元のパンツの夢を見るか:手島さん(@tomoaki_teshima)

タイトルはタイトルで中身とはほとんど関係なかったりします(笑)。

内容としては、2画像間の対応点を指定することによって、画像を上手く幾何変換してやり、合成するという話でした。前回、時間の都合で一部発表を省いてしまったので、今回そのネタも合わせて披露していただきました(笑)

 

終了後は、恒例の懇親会。 今回は11名の参加者でした。3回連続同じ店に行っています。毎回半分位メンバーが違うため、色々な話が聞けて面白いです。

次回の第8回 名古屋CV・PRML勉強会は、6/18(土)に開催予定です。次回は「デジカメの画像処理」の著者である川出先生を招いての特別公演となります。このような機会を設定して頂いた藤吉先生に感謝します。

 

これで私の3週間連続での勉強会発表+(研究回発表)が終わりとなりました。なかなか大変な1ヵ月でしたが、多くのことを勉強でき、とても楽しかったです。

2枚の画像のモザイキング

前に紹介した「OpenCVを用いた特徴点対応付け」を応用することで複数の画像をモザイキングすることができます。
今回は、OpenCVを用いて下に示す2枚の画像をモザイキングして、1枚の大きな画像を作ります。
今回の例では、2枚の画像が大体半分程度重なり合ってないと上手くいかないです。
あと、画像合成の関係上、1枚目の画像に対して2枚目の画像が左側になるように撮影しないと正しい結果が得られませんので気をつけてください。

モザイキングする画像

画像間の対応付け

SURFで検出した特徴点間の対応を全て表示しています。

モザイキング結果

コード

#include <opencv/opencv2.h>

int main()
{
  // モザイキングする画像
  std::string fn1 = "image0.png";
  std::string fn2 = "image1.png";

  // 画像読み込み(グレースケールで読み込み)
  cv::Mat_< unsigned char > image1 = cv::imread( fn1, 0 );
  cv::Mat_< unsigned char > image2 = cv::imread( fn2, 0 );

  // 特徴点の検出
  cv::SurfFeatureDetector detector;
  std::vector< cv::KeyPoint > keys1, keys2;
  detector.detect( image1, keys1 );
  detector.detect( image2, keys2 );

  // 特徴量の記述
  cv::SurfDescriptorExtractor extractor;
  cv::Mat_ desp1, desp2;
  extractor.compute( image1, keys1, desp1 );
  extractor.compute( image2, keys2, desp2 );

  // 特徴点の対応付け
  std::vector< cv::DMatch > matches;
  cv::FlannBasedMatcher matcher;
  matcher.match( desp1, desp2, matches );

  // 対応点をstd::vectorに格納
  std::vector< cv::Vec2f > points1( matches.size() );
  std::vector< cv::Vec2f > points2( matches.size() );

  for( size_t i = 0 ; i < matches.size() ; ++i )
  {
    points1[ i ][ 0 ] = keys1[ matches[ i ].queryIdx ].pt.x;
    points1[ i ][ 1 ] = keys1[ matches[ i ].queryIdx ].pt.y;

    points2[ i ][ 0 ] = keys2[ matches[ i ].trainIdx ].pt.x;
    points2[ i ][ 1 ] = keys2[ matches[ i ].trainIdx ].pt.y;
  }

  // 画像間の平面射影変換行列を取得
  cv::Mat_< float > homography = cv::findHomography( points1, points2, CV_RANSAC );

  // 画像の読み込み(RGB画像で読み込み直し)
  cv::Mat_< cv::Vec3b > rgb_image1 = cv::imread( fn1, 1 );
  cv::Mat_< cv::Vec3b > rgb_image2 = cv::imread( fn2, 1 );

  // 画像1を画像2の空間に投影
  // 出力画像の大きさは適当に決定
  cv::Mat_< cv::Vec3b > result;
  cv::warpPerspective( rgb_image1, result, homography, cv::Size( static_cast( rgb_image1.cols * 1.5 ), rgb_image1.rows ) );

  // 画像2を結果画像にコピー
  // 合成方法は上書き
  for( int y = 0 ; y < rgb_image2.rows ; ++y )
  {
    for( int x = 0 ; x < rgb_image2.cols ; ++x )
    {
      result( y, x ) = rgb_image2( y, x );
    }
  }

  // モザイキング結果を表示
  cv::imshow( "Mosaicing", result );
  cv::waitKey();

  return 0;
}

第6回 入門自然言語処理読書会

ブログを書くのは参加してから、大体1日経ってからです。

どうもごきげんよう。

今回はナディアパーク9階の研修室に行ってきました。

 

今回は、第6章に入って教師あり学習です。

画像認識でも同じフレームワークで行っているので、理解しやすかったです。

何だか過度に期待されていたようで、隠れマルコフモデルの説明を頑張ってしていましたが、もう少し分かりやすく説明できれば良かった。

あと、私はパターン認識で用いるために機械学習まわりは一通り勉強はしていますけど、純粋な機械学習の人間ではないですよ。

 

終了後は、メイド居酒屋 黒兵衛に行ってきました。

額に思いっきりゆで卵を打ちつけられました。

オムライスにケチャップで「λ」と書いてもらいました。

楽しかったです。

Boost.勉強会 #5 名古屋で発表してきました

  • 開催日時:2011/05/14 13:00~18:00
  • 開催場所:株式会社エイチーム(名古屋市西区牛島町6番1号 名古屋ルーセントタワー32F)
  • ハッシュタグ:#boostjp

先週の関西ゲームプログラミング勉強会に続いて、今度はBoost.勉強会で発表してきました。

発表内容は「OpenCVを使った画像処理」ということで、Boostは一切関係ありません(笑)

いやまぁ、一応Boost.GILは紹介しましたよ!

 

実際のところ、前日に研究室内の種々の資料作成などで、今回の発表スライドをまともに作り始めたのは前日の夜からでした。

大枠は作っていましたが、デモに至っては当日の勉強会の途中で作っていましたからね。

ただ、作ったのはよいですが、プロジェクタにPCの画面が映らずに結局デモは使えなかったという悲しさです。

 

発表終了後に色々な人から画像処理について聴かれたので、なかなか上手く行った感じがして良かったです。

まだまだ色々な内容について発表するような感じでBoost.勉強会で発表することになっているみたいなので、機会があれば、また何かしら話させていただきます。

運営・発表者・参加者の方々はお疲れ様でした。

モテるOpenCV女子力を磨くための4つの心得

こんにちは、コンピュータビジョンを専攻しているmiyabiartsです。

私は職も知識もありませんしドクターですが、コンピュータビジョンに関してはプロフェッショナル。

今回は、モテるOpenCV女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

1. あえてOpenCV1.0を使う

あえてOpenCV1.0をインストールしましょう。

そして好みのOpenCV男子がいたら話しかけ、わざとらしくOpenCVを出していじってみましょう。

そして「あ~ん!このOpenCV本当にマジでチョームカつくんですけどぉぉお~!」と言って、男に「どうしたの?」と言わせましょう。

言わせたらもう大成功。

「OpenCVとか詳しくなくてぇ~!ずっとコレ使ってるんですけどぉ~!使いにくいんですぅ~!ぷんぷくり~ん(怒)」と言いましょう。

大体の男はOpenCV2.2を使いたがる習性があるので、古かったとしてもOpenCV2.1を使っているはずです。

 

そこでOpenCV男子が「新しいOpenCVにしないの?」と言ってくるはず(言ってこない空気が読めないOpenCV男子はその時点でガン無視OK)。

そう言われたらあなたは「なんかなんかぁ~!最近OpenCV3.0が人気なんでしょー!? あれってどうなんですかぁ? 新しいの入れたいんですけどわかんなぁぁああい!! 私かわいそーなコ★」と返します。

するとOpenCV男子は「OpenCV2.2でしょ? 3.0はまだ出てないよ。本当に良くわからないみたいだね。どんな機能が欲しいの?」という話になって、次の休みの日にふたりでインストール作業でデートできるというわけです。

あなたの女子力が高ければ、OpenCV男子がOpenCV作ってくれるかも!?

 

2. C++でCvMatを使うとモテる

「行列」とか「画像」などを表現する「CvMat」をコードに入れると、OpenCVの男性ユーザーは「なんか構造体カワイイなぁ」や「cv::Mat教えてあげたいかも」と思ってくれます。

C++上ではC言語よりも機能が拡張されたコードが書けるので 「CvMat」 を多用することによって、OpenCV男子はあなたをC++初心者で女の子らしいと勘違いしてくれるのです。

そういうキャラクターにするとほぼ絶対にC++erに嫌われますが気にしないようにしましょう。

3. とりあえずOpenCV男子には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

ハッカソンなどでOpenCV男子が女性に話すことといえば実装話や趣味(アニメ)の話ばかり。

よって、女性にとってどうでもいい話ばかりです。

でもそこで適当に「へぇーそうなんですかぁ~?」とか「Viewないですけどすごいんですねぇ」と返してしまうと、さすがのOpenCV男子も「この女Boost.GILユーザだな」と気がついてしまいます。

Boost.GILユーザ女だとバレたら終わりです。

そこは無意味にテンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。

たとえ興味がない話題でも、KinectとGPU対応でその場を乗り切りましょう。

積極的に話を聞いてくれる女性にOpenCV男子は弱いのです。

いろいろと話を聞いたあと、「KinectはOpenNIで、GPU対応がCUDAなんですね! 覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。

続けてキーボードを打つ振りをしつつ「タタンッ!タタッ!ターーーッン!!」と言って、「どうしたの?」とOpenCV男子に言わせるのもアリ。

そこで「私のcmakeに記録しているのでありますっ☆」と言えば女子力アップ!

そこでまたOpenCV男子は「この子カッコカワイイかも!?」と思ってくれます。

私はVisualStudioもcmakeもありませんしMacユーザですが、こういうテクニックを使えば知識がない私のようなバカドクターのほうがモテたりするのです。

OpenCV男子はビルド作業に浸りたいですからね。

4. コーディングでは顔検出手法を使えない女をアピールせよ

OpenCV男子とコーディングに入ったら、真っ先にAdaBoostなどの検出手法を使ったコードを探して「あーん! 私これ使えないんですよねぇ~(悲)」と言いましょう。

するとほぼ100パーセント「どうして? 嫌いなの?」と聞かれるので、「嫌いじゃないし使いたいけど使えないんですっ><」と返答しましょう。

ここでまた100パーセント「嫌いじゃないのにどうして使えないの?」と聞かれるので、うつむいて3~5秒ほど間をおいてからボソッとこう言います。

「……だって、……だって、AdaBoost使ったら学習画像が大量に必要じゃないですかぁっ! 収集する後輩がかわいそうですぅ! まだ研究進んでないのにぃぃ~(悲)。卒論すら書けないんですよ……」と身を震わせて言うのです。

その瞬間、あなたの女子力がアップします。

きっとOpenCV男子は「なんて賢いViola Jonesのようなコなんだろう!絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。

意中のOpenCV男子と付き合うことになったら、そんなことは忘れて好きなだけ顔検出手法を使って大丈夫です。

「使えないんじゃなかったっけ?」と言われたら「科研費使うので大丈夫になった」とか「後輩の扱い慣れた」、「そんなこと言ってない」と言っておけばOKです。

関西ゲームプログラミング勉強会で発表してきました

既に24時間以上経っていますが、昨日関西ゲームプログラミング勉強会で発表してきました。

  • ATND: http://atnd.org/events/14697
  • 日時:2011/05/07 10:00
  • 場所:エビスビル(AAホール本館) 6階 貸会議室 (大阪府大阪市中央区淡路町3丁目2番9号 エビスビル)
  • ハッシュタグ:#oustudy

秋猫(@akineko)さんが主催となって開催された関西ゲームプログラミング勉強会。
ブラウザ三国志などを開発している株式会社ONE-UPさんの後援で、会場設備なども充実していました。

午前中は、自分の発表のデモをもう少し直したかったので、コーディングしながら聴講。
ネットワークゲームを作る上でのノウハウなどを講演していただき、作業半分で聴いてはいたのですが、昔ネットワーク系も触ったことあるので、よい復習になりました。

ちなみに、私のゲームプログラミング経験ですが、高校の時にちょっとしたものを勢いで作ったっきりで、それ以降今まで完成させたものはありません。
大学の学部生時代に趣味で色々やってはいたのですが、グラフィックスを作る力がないくせに、良いものにしたいとこだわったせいで、結局何も作れていないというのが本当のところです。
というわけで、自分は断片的に技術を齧ってはいるものの、ゲームプログラマではありません。
だけど、発表者の、それもトリになっています。
わけがわからないよ。

発表の方ですが、時間的にはおよそ70分の遅れで、色々ばっさり切りながら発表しないといけないなと思っていましたが、なんだかんだで全部話しきることができました。
ただ、早めに話さないといけないという気持ちから、相当な早口だったことと、話すことが上手くまとまらずに何言っているかよく分からないところが多々あった点を反省しておきます。
どこかに動画存在しているようですので、見たい方は探してください(笑)

Twitterのツイートを見る限りでは、割と受けは良かったようなので安心しました。
特に前の@fadis_さんの発表が素晴らしかったので、なおさらどうしたものかと思っていました。
感想として、「触ってみたい」「やってみよう」と思ってくださる方が沢山おられたことは最高の褒め言葉です。
Bulletに限らず物理エンジンは開発期間の割にはドキュメントなどの情報が少ないため、ユーザが増えることでそれらが充実することを願っています。

今回くらいの粒度でなら、まだネタとしてはいくつか話せることがありますため、また話す機会があれば是非呼んでいただけると嬉しいです。
それと、名古屋で開いてくれる方がいればお願いします。
(自分で開きたい気持ちはありますが、ちょっと色々なことが身体的な限界を迎えていますため。。。)

資料は以下に置いておきます。
(DropBox上に置いていますが、後ほど場所を移動して、リンクを貼り直す予定です。)

関西ゲームプログラミング勉強会 #oustudy

ひたすら原稿執筆か発表資料作りしているばかりで、ブログは停滞の一途を辿っています。
仕様です。

明日は、いつのまにか発表することになっていた関西ゲームプログラミング勉強会 #oustudyに参加するために大阪に向かう予定です。
本業の進捗が気まずいことになっているので、進めるために徹夜で研究をしていたため、現在体力の限界を向かえています。
発表スライドはまだ完成していません。
さて、どうなることやら。