2010年09月28日

領域拡張法のテスト

領域分割にも色々方法があるようですので、とりあえず簡単そうな領域拡張法を試してみました。

参考サイト:http://www7a.biglobe.ne.jp/~fairytale/article/program/graphics.html

近傍8箇所とのRGBの画素値の差が閾値以下なら同じ領域でやっていますが、写真等では分割数が多くなってしまいますね。他の方法も試してみたいと思います。

実行結果

標準画像を領域分割してみました。これで分割数が2500ぐらいなので多すぎですね。
色はその領域の平均色にしてみました。

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

2010年09月26日

自己組織化マップのテスト

領域分割に教師なしクラスタリングでも試してみようかと思い、自己組織化マップのプログラムを作ってみました。

下記サイト等を参考に色を3次元ベクトルの入力にして試してみました。
http://gaya.jp/spiking_neuron/som.htm

実行結果

50x50の2次元SOMになるんでしょうか。

som_test_001.JPG som_test_002.JPG
      初期状態           10万回更新後

今回入力データもランダムでやっているので色々おかしい気がしますが特に気にしないことにします。
クラスタリングとして使用する場合はどんな感じになるんでしょうかね。
web拍手 by FC2
posted by シンドラー at 15:45 | Comment(2) | TrackBack(0) | Neural Network | このブログの読者になる | 更新情報をチェックする

2010年09月17日

OpenGLでビルボードのテスト その3

昨日の続きです。

FBOとビルボードを4つ使用して、1個のウィンドウを4分割したような使い方もできます。こういう使い方が正しいのかどうかはわかりませんが。

視点を変えてレンダリングができますので、視点を左右に少しずらした画像を作って、2枚の画像から奥行き情報を検出するステレオマッチングのテストなどもできます。

自分で実装は必要があればやるということで、OpenCVのcvFindStereoCorrespondenceBMという関数を使用してみることにしました。

手順
1. FBOを4枚準備
2. 1枚目は上面図
3. 2枚目、3枚目を左右に少しずつずらした画像
4. 4枚目はOpenCVの関数を使って視差を計算した結果を描画

OpenGL→OpenCVはglGetTexImageでIplImage構造体のimageDataを渡せば現在バインドしているテクスチャのデータをIplImage構造体に取得できます。

OpenCV→OpenGLはglTexImage2DでimageDataを渡すことで、現在バインドしているテクスチャを上書きできます。

実行結果



昨日の単純な基本図形だと特徴点がほとんどないので視差をうまく取得できませんでしたので、昔作ったXファイルローダで樹海のXファイルを読み込ませていただいております。

右上の検出結果ですが、白い部分が視差が大きい=手前の物体で、黒い部分が視差が小さい=奥の物体となるはずですが、可視化の段階で何か間違っているかもしれません。

どれくらい左右にずらすかなどによって結果が大きく変わってきますので、その辺りのパラメータ調整も必要だと思われます。

AIが2枚のカメラから得た画像から3次元空間を認識して行動を決定とかもできればいいなと思ったのですが、処理時間的にちょっと厳しそうですね。
web拍手 by FC2
posted by シンドラー at 00:09 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

2010年09月15日

OpenGLでビルボードのテスト その2

昨日の続きです。

ゲーム等で現在位置を確認するためにはマップが使用されていると思います。
簡単にマップを作成する方法として、カメラを真上に設置して平行投影でテクスチャにレンダリングして、それをビルボードに貼ることが考えられます。

今回はこれまでも何回か使用していますがFrame Buffer Objectでテクスチャにレンダリングして昨日のビルボードに貼り付けてみました。

参考サイト:http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/computer/OpenGL/framebuffer_object/disp_content

実行結果



画面の右下にマップを表示しています。
小さくて殆ど見えないですが、一応カメラの位置に球を表示しています。

FBOへの書き込み時にはglOrthoを使用して平行投影にしていますので、物体を移動させても距離などは正確に表現されているはずです。

オフスクリーンとはいえ2回レンダリングしていますので、今後は速度が問題になってくるかもしれません。

次は夏休みに全然作れなかったFPSに組み込んでみようかと思います。

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

2010年09月14日

OpenGLでビルボードのテスト

OpenGLでビルボードを使うサンプルを作成してみました。
基本はカメラの方向を向けるためにモデルビュー行列の逆行列を使って、他のオブジェクトより手前に表示させるために近クリップ面辺りに大きさを調整して表示する感じだと思います。

1.ウィンドウ座標で指定した位置にビルボードを表示
2.3次元空間内で指定した位置に見えるようにビルボードを表示

という2つを試してみました。

1.についてはgluUnProject()という関数を使用していますが、使用しなくてもできます。
参考サイト:http://wiki.livedoor.jp/mikk_ni3_92/d/%B4%F0%CB%DC%CA%D416%3A%3AgluUnProject()

2.については直線(カメラから指定した座標のレイ)と平面(近クリップ面)の交点を計算して、その位置にビルボードを表示するようにしています。

実行結果



赤い四角が1.で、マウス座標にビルボードを表示するようにしています。
青い四角が2.で、立方体の真上辺りを指定位置にしてビルボードを表示しています。
一応視点の位置やオブジェクトの位置を変えても大丈夫なようです。
距離に応じて大きさを調整していないので、錯覚でビルボードの大きさが変わっているように見えます。

自分で実装しなくてもPoint Spriteを使えば大きさの調整などもやってくれるので良さそうですね。
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20060227

以下ソース
billboard.cpp
web拍手 by FC2
posted by シンドラー at 20:28 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。