2011年04月14日

OpenCVでCMakeのメモ

毎回やり方を忘れるのでメモしておこうと思ったのですがメモするほどのものでもなかったですかね。

OpenCVのコンパイルはVisual Studio 2010等で行っているのですが、ソリューションを作成するためにCMakeを使用します。

とりあえずOpenCVとCMakeをダウンロードしてインストールします。

スタートメニューからCMake(cmake-gui)を実行します。

cmake_opencv_001.png

Where is the source code:の右にあるBrowse Source...でOpenCVのフォルダ(例:D:/OpenCV2.2)を指定します。

Where to build the binaries:の右にあるBrowse Build...でビルド先のフォルダ(例:D:/OpenCV2.2で問題ないかと思います)を指定します。

左下のConfigureボタンを押します。

ダイアログが表示されますので、Specify the generator for this projectでコンパイラを選びます(例:Visual Studio 2010)。
Finishを押せば、Configureが終わって色々設定が表示されると思います。

BUILD_EXAMPLEやINSTALL_C_EXAMPLE等必要そうなものにチェックを入れます。
CUDAやTBBにチェックを入れる場合には、事前にそれらをインストールし、インストール場所の設定などを行う必要があります。
もう一度Configureを押します。

エラーがでなければ、Generateボタンを押してプロジェクトファイルを作成します。

成功すればOpenCVのフォルダにOpenCV.slnというファイル等が生成されていますので、それを開いてビルドすれば実行できます。

web拍手 by FC2
posted by シンドラー at 11:53 | Comment(0) | TrackBack(0) | Image Processing | このブログの読者になる | 更新情報をチェックする

2011年04月08日

OBBの求め方

衝突判定などに用いられるOBB(Oriented Bounding Box)を求める方法を書いておきます。

参考サイト
http://www.nomuraz.com/denpa/prog005.htm

主成分分析を用いる方法ということで、頂点座標が、x座標、y座標、z座標という3つの特徴を持つデータで、5000個の頂点があれば、その5000個のデータに固有の特徴を探すといった感じだと思います。

まぁその辺りの詳しいお話は省略して手順だけ書きます。他の方法でもできます。

1. 頂点座標で行列を作る(xyz座標3データ×5000個のデータで3×5000の行列)
2. xyz各行の平均を計算して引く
3. 引いた行列の転置行列を作る(5000×3の行列)
4. 掛けてNで割って共分散行列ができる((3×5000)×(5000×3)→3×3の行列)

この辺はわざわざ行列作ったりしなくても参考サイトのやり方でできますが一応。

5. ヤコビ法などを用いて共分散行列の固有値・固有ベクトルを計算する

参考サイト:http://hooktail.org/computer/index.php?Jacobi%CB%A1

6. 固有値と固有ベクトルが求まれば、固有値の大きい順に固有ベクトルを並べ替えます。
7. 固有ベクトルを並べて3×3の行列を作っておきます。
8. 固有ベクトルの行列と頂点の内積を計算し、各固有ベクトル毎に最大と最小の内積値を計算します。
9. そのデータを使えば重心、OBBの座標が計算できます。(参考サイト参照)

5000×3次元のデータが3×3次元のデータになっているということで、主成分分析はこのような次元圧縮を行うために良く使われるみたいです。

実対称行列の固有ベクトルは直交しているし単位ベクトルになっているので並べれば回転行列として使えたりとても便利ですね。

実行結果

適当に5000点ランダムに生成し、そのOBBを求めてみました。



赤軸が一番固有値の大きい固有ベクトル×(最大内積値−最小内積値)×0.5、緑が2番目、青が3番目になっています。

OBBTreeとか衝突判定とかやるかもしれませんしやらないかもしれません。

web拍手 by FC2
posted by シンドラー at 23:36 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする