先日,ある企業の方とお話をしていて,「なかなか独自の進化を遂げているようだね」と言われました.最近流行のキーワード,ガラパゴスってやつでしょうか.それが良い意味で言われたのかどうかは分かりません.

photo credit: jim snapper
今日は何となくプログラム日和でした.かなり集中できました.そしてゼミの時間に気づかずじまいでした.まずかったです.
Objective-C がおもしろいです.生産効率も上がりそうです.研究も含め,本格的にこちらに移そうかなと考えたりします.手始めに,今まで作った画像処理関係のプログラムをライブラリ化していっています.コツのようなものが掴めてきました.
関連して,知りたいことがあったので「OpenCV Objective-C」をキーワードに検索をしてみました.トップに現れたのは自分のブログでした.もちろん,ここには知りたかった情報はありません.そんなこともあり,いずれ関連する情報をまとめていきたいなと思います.
Read the rest of this entry »
ここでは PCA を OpenCV の関数を用いて行うことについてのみ説明します.PCA とは何かなどについては他のサイトや書籍を参考にされて下さい.

OpenCV には PCA を行うために次の3つの関数が用意されています.
cvCalcPCA(const CvArr* data, CvArr* avg, CvArr* eigenvalues, CvArr* eigenvectors, int flags);
1つ目の関数(cvCalcPCA)は,ベクトル集合の主成分分析を行う関数.この関数は,観測されるデータベクトル集合を
,主成分分析によって部分空間へ投影されるベクトルを
としたときの連続写像
を求めます.
cvProjectPCA(const CvArr* data, CvArr* avg, CvArr* eigenvalues, CvArr* project);
2つ目の関数(cvProjectPCA)は,指定された部分空間へベクトルを投影します.あらかじめ求めた連続写像
を用いて
から
を算出します.
cvBackProjectPCA(const CvArr* project, CvArr* avg, CvArr* eigenvectors, CvArr* result);
3つ目の関数(cvBackProjectPCA)は,投影係数から元のベクトルを再構築します.部分空間
から 観測データ空間
への逆写像
を行います.
各関数への引数については次のようになっています.
Read the rest of this entry »
OpenCVでカメラから画像を取り込む場合,次の関数を用います.
> CVAPI(CvCapture*) cvCaptureFromCAM( int index );
このとき,indexの値を変えることで複数のカメラを選択できるはずなのですが,私のMacbookでは常にiSightが認識され,USBカメラを認識させることができませんでした.そこで,実際のソースの中で,
> CvCapture *cap = NULL;
> cap = cvCaptureFromCAM(0);
> cap = cvCaptureFromCAM(1);
のようにすることで,強引に認識されるようにしました.
一度目にiSightを認識し,二度目でUSBカメラを認識します.
> cvReleaseCapture(&cap);
と解放するまで,iSightの緑のランプはついたままになりますが,
実際にキャプチャするのはUSBカメラのみなので,(たぶん)計算の負担にはなりません.
もっとスマートな方法があればよいのですが...

OpenCV(Intel Open Source Computer Vision Library)はintelのオープンソースな計算機画像処理に関するライブラリです.このライブラリを用いることで一般的な画像処理は勿論,WEBカメラから等からのカメラ画像情報の獲得,処理が容易になります.
OpenCVのインストール方法については下記のサイトに詳しく紹介されているので,こちらを参考にすれば簡単にできると思います.
[:きのこレッド:] MYCOMジャーナル:【コラム】OS X ハッキング! (第203回)
[:URL:] http://journal.mycom.co.jp/column/osx/203/