ドラえもん

プログラミング/画像情報処理

回転空間SO(3)の均等なサンプリング

・回転空間SO(3)の均等なサンプリング

 3次元回転における規則的サンプリングの生成問題は、生物学、科学、物理学などの多くのコンピュータサイエンスの分野において、基礎的な問題である。

 連続空間上の数値計算は、しばしばサンプリング集合の生成を必要とする。数値的な最適化や統合問題だけではなく、ロボットの動作計画における衝突回避経路の生成などの、技術的あるいは科学的な分野における様々な手法の性能は、サンプリングの質に大きく依存している。したがって、根本的なサンプリングの質が出来る限り良好であることは、非常に重要となる。

 通常、物体はある回転軸方向を中心にして回転を行うものと定義できる。下記の図1左は、回転軸方向の緯度経度によるサンプリングであるが、このサンプリングの仕方では北極南極点付近はサンプリング点が非常に密になってしまい、非常に無駄なサンプリングの仕方になってしまっていることがわかるだろう。

 

f:id:ikaros2015:20150121162809p:plain

 

 そこで、Anna Yershova らによる研究「 Generating Uniform Incremental Grids on SO(3) Using the Hopf Fribration  」では、この3次元回転の均等なサンプリングを実現している。彼らの研究では、3次元の回転を、四元数を用いて表している。彼らの研究のポイントは、Hopf Fibration の概念に基づき、先行研究である HEALPix を用いた2次元球面の等面積サンプリングと回転平面の等間隔サンプリングを組み合わせることで、3次元回転の均等なサンプリングを実現している点である。図2では、HEALPix を用いた2次元球面の等面積サンプリングとそれに対応する回転平面の等間隔サンプリングを示している。

f:id:ikaros2015:20150121165307p:plain

 

 ここで、彼らの研究のサンプリング効率を示す。図3では、図2左に示した2次元球面のサンプリングと、緯度・経度による2次元球面の通常のサンプリングを比較している。

f:id:ikaros2015:20150121165359p:plain

 

図3における2つの2次元球面のサンプリングを比べると、彼らの研究における2次元球面の等面積サンプリングは、サンプリング点を12点生成しているのに対し、通常の緯度・経度による等間隔サンプリングは、サンプリング点を約18点生成している。すなわち、彼らの研究における3次元回転の均等なサンプリングでは、サンプリング効率は約 12/18 = 2/3 まで抑えられている。

 また、彼らの3次元回転の均等サンプリングでは、回転のサンプリングを階層的に行うことができる。図4には、階層化されたサンプリング点が表されている。

f:id:ikaros2015:20150121165500p:plain

 

この構造を利用することにより、最適化問題などにおいて、粗い解像度から密な解像度へ最適な回転パラメータを高速に探索することが可能となる。

□ 英論文:Generating Uniform Incremental Grids on SO(3) Using the Hopf Fribration  

http://msl.cs.uiuc.edu/~yershova/journals/SO3-ijrr2009/author/main.pdf

□ 英論文:HEALPix:a framework for high-resolution discretization and fast analysis of data distributed on the sphere

http://web.ipac.caltech.edu/staff/fmasci/home/astro_refs/HEALPix.pdf

 

・回転空間SO(3)の均等なサンプリングのサンプルプログラム

 彼らは回転空間SO(3)の均等なサンプリングのサンプルプログラムを以下のサイトで公開している。プログラムは C/C++ で記述されており、サイトからダウンロードして使用することが可能なようである。  

□ サンプルプログラム配布サイト

http://msl.cs.uiuc.edu/~yershova/software/so3sampling/so3sampling.htm

 しかし、彼らの配布するサンプルプログラムでは、3次元の回転を階層的にサンプリングした際の、解像度レベル間でのサンプリング点の対応関係が出力されない。そこで、彼らのサンプルプログラムを改良したプログラムを以下に示す URL に保存する。

□ 改良版サンプルプログラム配布サイト

https://github.com/Jingasan/UniformSamplingOnSO3

 本プログラムは、彼らの研究によるサンプリング方法を改良して実装したものである。解像度レベルを指定し、プログラムを実行すると、各回転を表す四元数のパラメータ4個と次の解像度において近傍となる回転のID番号8個、各回転を表す角度のパラメータ4個と次の解像度において近傍となる回転のID番号8個が、それぞれエクセルファイルに出力される。

Unity - ゲーム開発エンジン

・Unity

Unity は商用のゲームエンジン統合開発環境)であるが、基本的な機能を備えた無料版が提供されている。無料版には、小規模ゲーム開発に必要なほぼすべての機能が網羅されており、開発したゲームの Windows 版/ Mac 版/ Web Player 版を無制限に出力可能である。

 

公式サイトURL:http://japan.unity3d.com/


 

・Unity における開発

 Unity では、C#, JavaScript, Unity 専用の言語である Boo を用いてスクリプトを作成する。スクリプトの作成方法の詳細については、以下のサイトで紹介されている Demo 動画の No.12 から解説されている。

□ ドットインストール - Unity入門

URL:http://dotinstall.com/lessons/basic_unity

なお、Unity に用意されている関数のリファレンスについては、以下の URL を参照すればわかる。

□ Unity 公式リファレンス

URL:http://japan.unity3d.com/developer/document/

 

・Unity のインストール手順

 1. 下記の Unity 公式サイトから Unity を適当な場所にインストールする。

URL:http://japan.unity3d.com/unity/download/
2. インストールが成功したら、Unity を実行し、無料版の Unity か有料版の Unity Pro を選択し、アカウントとパスワードを登録する。
3. 上記の作業が終了すれば、Unity のインストールは成功である。
※ 詳細は、ドットインストールにおける Unity の DEMO 動画中で解説されている。

 

・Unity を用いたゲーム開発コンテスト

 Unity では、年間を通して様々なゲーム開発企画やゲーム開発コンテストが開かれており、ゲーム開発に興味がある、あるいはゲームプログラマを目指している多くの若者がこれらに参加している。

 

Unity-Chan! 公式サイトURL:http://unity-chan.com/


 

・研究活動での Unity 利用

 Unity では、3次元のオブジェクトを作成することができ、オブジェクト指向プログラミングの考え方で、作成した個々の物体に対して、動作命令を与えることができる。このことから、大学などにおける研究で、Unity の開発環境を用いた3次元物体のシミュレーション実験を行うことも可能である。

 

SVM-Light - サポートベクタマシンプログラム

SVM-Light

SVM-Light とは、C 言語で書かれた SVM ( Support Vector Machine ) プログラムである。ここで SVM とは、機械学習により、2 クラスの分類を行うことができる学習機械の一種である。

 

公式サイトURL:http://svmlight.joachims.org/


 

SVM-Light で使用されているSVMアルゴリズム

 SVMアルゴリズムについては、SVM-Lightの公式サイトより、SVMアルゴリズムについて詳述された英論文(PDF)がダウンロード可能となっている。

 

SVM-Light 実装アルゴリズムの英論文(PDF):http://www.cs.cornell.edu/People/tj/publications/joachims_99a.pdf

 

SVM-Light の使い方について

 SVM-Light は、上記の公式サイトにてバイナリ版とソース版の2種類がダウンロード可能である。バイナリ版は、すでにコンパイルされたアプリケーションプログラムであり、入力ベクトルが記載されたテキストファイルがあれば、すぐに使用可能である。ソース版は、公式サイトよりダウンロードしたC言語ソースファイル群をコンパイルすることにより、使用可能となる。

 

以下のURLに示したファイル共有サーバに、SVM-Light の使い方の簡易資料(PDF)を保管

URL:https://drive.google.com/folderview?id=0Bz9yuvZCp4qSQjBGeWI3SmF5M2M&usp=sharing

SVM-Light を使用するためには、入力となる特徴ベクトル群を作成する必要がある。

※ 特徴ベクトル群が作成できたら、まずは SVM-Light のバイナリ版を簡易資料を参考にしながら実行してみると良いだろう。

VisualStudio - Windows 専用統合開発環境

・VisualStudio

 VisualStudioとは、Microsoft社が提供する統合開発環境のことである。Visual C++Visual Basicを始めとした、複数プログラミング言語に対応したソフトウェア開発ツールの詰め合わせになっている。

 また、VisualStudioが最初から対応しているプログラミング言語の他に、サードパーティが独自に特定のプログラミング言語をVisualStudioの環境に対応させることも可能で、すでにPerlなどの言語については、対応パッケージがリリースされている。

 VisualStudioで作成したソフトウェアは、MSILというバイトコードの一種で出力され、動作には.NET Framework ( 厳密にはそれに含まれるCLR )が必要になる。

 ただし、Visual C++だけは従来のWindows用プログラムと同じバイナリ形式での出力ができるため、ハードウェアに直接命令を与えるようなプログラムの作成も可能となっている。

 なお、VisualStudioの大規模開発業務向けバージョンには、開発環境本体の他に、テスト環境となるOSやソースコード管理用ソフトウェアも含まれている。

 

公式サイトURL:http://www.microsoft.com/ja-jp/dev/default.aspx

 

f:id:ikaros2015:20150117081453p:plain

VisualStudio2010 Visual C++ の使用例

 

・VisualStudioの使い方について

以下のURLに示したファイル共有サーバに、VisualStudioの使い方( 簡易版 )についてのPDF資料を保管

URL:https://drive.google.com/folderview?id=0Bz9yuvZCp4qSNGZjZm9UdHl2QW8&usp=sharing

 

GitHub - バージョン管理ソフトウェア

GitHub

 ソフトウェア開発プロジェクトのための共通Webサービスである。

f:id:ikaros2015:20150117070147p:plain

公式サイトURL:https://github.com/

GitHubで出来ること

GitHubを使用することで、自分のソースコードを公開したり、ソースコードのバージョンを管理したりすることができる。これにより、開発の際に必要ではあるが、非常に煩雑になりがちなソースコードのバックアップをスマートに行うことができるようになる。また、Web上でソースコードを公開することにより、そのソースコードを他人にダウンロードしてもらったり、逆に修正・レビューを付け加えてもらうこともでき、GitHubにはプログラマSNSのような一面もある。

f:id:ikaros2015:20150117072345p:plain

GitHubの導入と使い方について

以下のURLに示したファイル共有サーバに、GitHubの導入方法とGUIによる簡単な使用方法をまとめたPDF資料を保管

URL:https://drive.google.com/folderview?id=0Bz9yuvZCp4qSZTRiMHR0UjlFNGM&usp=sharing