2017年7月11日 更新

VR解剖アプリを作る その2 ~Unity上でCTデータを扱う~

3DデータをUnityに取り込んで、カメラで観察するアプリを作ります。 非VRとVRを実装します。

676 view お気に入り 1

概要

前回はCTスキャンで得られたDICOMファイルをOsiriXで編集し、OBJファイルとして出力しました。

将来的にはもっと細かく部位ごとに個別のOBJファイルとするつもりですが、ひとまずこのまとまりファイルを使ってアプリを作っていきます。



以下の2つのもののプロトタイプを作ります。

  • ドラッグなどで画面操作できる非VRアプリ(MRアプリを想定して)
  • 首振りで操作するVRアプリ


ちなみに、前回までヒト頭部を使っていましたが、東京大学附属動物医療センターからイヌのCTデータを提供していただいたので以降はこちらを使わせていただきます。

*CTデータは東京大学所属の供血犬のものであり、データの公開は許可を得ています。



3Dモデルを取り込む

 (4087)

まずUnityプロジェクトを新規作成します。
 (4089)

「Assets -> Materials」の中にでもOBJファイルをドラッグ&ドロップで放り込みます。
Sceneにドラッグ&ドロップすれば右のようにUnityのSceneビューに表示されます。
左上の操作パネルを使って、いろんな方向から観察することができます。

ただしこれはUnityのSceneビューの機能なのでこのままアプリをデプロイしてもカメラを動かす機能はついていません。

自由なカメラを手に入れるためにはUnity上でカメラなどにスクリプトを添えてあげる必要があります。


非VRアプリ: カメラ回転、移動、ズーム機能

非VRアプリはスマホやタブレットのタッチパネル操作を想定して作っていきます。

将来的にはイベントのトリガーをHoloLensの操作に置き換えてあげればMRアプリになるという算段です。



対象を観察する方法として、カメラを動かす方法と対象自体を動かす方法が考えられます。

今回はカメラを動かすことにしました。



直交座標より極座標の方が理解しやすいので三次元極座標で空間を捉えます。

まず、原点に3Dモデルの中心をセットします。

前述のように3Dモデルは不動です。



基準点(後述)は原点を中心とした半径rの球表面を移動することになります。(r可変)

球の半径はr変化がズームを表現します。

角度θ、φが球表面上での位置を表現します。



肝心のカメラは基準点を原点とするxy二字平面上を移動します。

デフォルトでは(x, y) = (0, 0)の位置、すなわち基準点と同じ位置から原点を観察します。



三次元極座標

三次元極座標

Oが原点で、ここに3Dモデルの中心が置かれます。
Pが基準点で、さらにPからxy分だけずれたP'を新しく考え、これがカメラの位置になります。

対応オブジェクトを作る

ここまで出てきた、原点、基準点、カメラに対応するオブジェクトを作成し、関連づけます。

  • 原点: Origin
  • 基準点: ReferencePoint
  • カメラ: Camera(デフォルトがあるので作成不要)


 (4096)

「Origin -> ReferencePoint -> Camera」という風に親子関係を設定します。


対応スクリプトを作る

 (4099)

ReferencePointをクリックして「Inspector -> Add Component -> New Script」で、新しいスクリプトを作ります。
同様にCameraに対してもスクリプトを用意します。
それぞれPolarCoordinates、CameraMoveと名付けました。

Assetsで右クリックして「Create -> C# Script」で作成したのちにオブジェクトにドラッグしても良いです。
49 件

関連する記事 こんな記事も人気です♪

VR解剖アプリを作る その1 ~CTスキャンの結果から3Dデータを得る~

VR解剖アプリを作る その1 ~CTスキャンの結果から3Dデータを得る~

VR解剖アプリを作る連載物です。今回はOsiriXというソフトを使ってCTのデータから3Dデータを作成しました。
山田涼太 | 1,086 view
医療×人工知能の最前線を追え‼ 「人工知能エンジニアMeetUp!#4〜AI医療画像診断支援 & RSNA報告会〜 」のまとめ。Part 2

医療×人工知能の最前線を追え‼ 「人工知能エンジニアMeetUp!#4〜AI医療画像診断支援 & RSNA報告会〜 」のまとめ。Part 2

今回の記事は、前回投稿したLPixel主催MeetUp記事のPart2です!医師である龍さんと講演後の懇親会の様子を振り返ってみようと思います。 この記事はLpixelインターンの北村が担当しています。
北村 旭 | 1,970 view
About IMACEL Academy

About IMACEL Academy

人工知能・画像解析スキルが身につく専門サイト-IMACEL Academy-についてです
三好 裕之 | 3,683 view
Deep learningで画像認識③〜ネオコグニトロンとは?〜

Deep learningで画像認識③〜ネオコグニトロンとは?〜

Deep learningは、画像認識において大きな成功を収めています。そこで用いられる多層ネットワークは、畳み込みニューラルネットワーク(convolutional neural network:CNN)と呼ばれており、画像認識に適した独特の構造を持っています。
木田智士 | 4,430 view
Neural Network with Julia 〜Kaggleの文字認識(DeepLearning)の前処理〜

Neural Network with Julia 〜Kaggleの文字認識(DeepLearning)の前処理〜

今回もNeural NetworkをJuliaで実装する方法についてご紹介します。

この記事のキーワード

この記事のキュレーター

山田涼太 山田涼太