日々鍛錬

日本で一番?わかり易い??システムの落書き帳???を目指し????,日々鍛錬中な元SEさん主婦によるデベロッパとユーザと自分のための雑記帳

3D slicer

3D slicerとは,ハーバード大学医学部の関連病院の一つ,Brigham And Women's HospitalのSurgical Planning Lab. で主に開発されている,医用画像の可視化,解析用のオープンソースソフトウェアのことである.
3D slicerの嬉しいところは,以下の部分も非常に大きい.

  • マルチプラットフォーム
  • オープンソースによる開発
    • 何と言っても無料
    • 世界チュの研究者,開発者による開発が行われている!(プロの意見がもらえる!)
    • インストール時から充実した機能(自分の考える理論の段取りを確認できた!)
  • 必要に応じたPluginの開発,追加が容易
    • ITKライブラリ(画像処理),VTKライブラリ(画像可視化)のPluginが導入
    • Python, Tcl/Tkでも開発可能なので,codeを書いての実験が容易!(嬉涙目)
    • Open IGTによる,デバイス間との通信も可能らしい(これは理解不足です)

とにかく,画像解析結果を確認するときには多いに私は利用しているのであります.

また,このシステムは医用画像に特化しているというわけではないらしく,様々なモデルや画像に対しても対応出来るのがまた嬉しいところと思います.
友人の一人はこのシステムを用いて,車部品のモデル(stl形式)で色々遊んでいたのを見て,「すごー!!」としか,言葉が出ませんでした...

2014年2月1日現在のStable VersionはVer.4.3.1のようです.
公式サイトはこちらです.
3D slicer : http://www.slicer.org/

もう少し詳しく勉強して,現在研究中のシステムに統合出来るといいなぁ...

参照サイト:

医用画像工学

まずは医用画像工学の説明を簡単に
#ここで,コメントを頂けますと嬉しいです.

医用画像工学

  • 医学(免疫,病理学,解剖,臨床など)
    • 生体系の構造,組織,機能について考察,解析,理解すること
    • 上記の知識を基に,生体機能の正常かを目指した応用技術
  • 画像工学
    • 得られた情報を視覚的に理解,解析,考察,改善すること
    • 上記を基に,目的技術への展開,サポートを応用とする技術

まとめると,私は以下の様に定義している.

医学知識と工学知識の融合による,より正確な医療研究,臨床を目指した技術とその応用

医用画像工学は,大きく以下の分野へ分けられると考える.

  • 医用画像画質改善:医用画像内のアーチファクトやノイズ等の影響除去
  • 医用画像解析:得られた医用画像から,臨床に必要な情報の抽出,解析を行うこと
  • 医用画像ソリューション:実際に臨床に必要な情報を加工し,サポートするシステムの構築,提案

ひとまず,私の専門は3番目ということになるのです.

Cannot find or open the PDB file に悩まされる.

正直,この記事を書いてる時もよくわかってません.
そもそもPDB fileとは??と考えますが,よくわかりません.
ただし,以下のメッセージ,

Cannot find or open the PDB file

あまりに気持ち悪い気がしますので,その解決を行う.

Visual studioのプロジェクトの設定において,

  1. デバッグ」から「プロジェクトと設定」(オプションのこと)を開く
  2. 「全般」から「シンボル」を選択
  3. 「Microsoft シンボルサーバ」のチェックを入れる

以上で,シンボルが読み込まれます.
色々調べて見たところ,どうやらDebug用の読み出しファイルであるらしい.
おまけに,このエラーは無視して良いとのことです.

デバッグなら有効にしたほうが良いかもしれないけど,「デバッグなしで実行」で基本問題なし.

一番,情報として理解したサイトを提示
Cannot find or open the PDB file in Visual Studio C++ 2010 - Stack Overflow

Cannot find or open the PDB file in Visual Studio C++ 2010

I use Visual Studio 2010 C++ and my project builds without errors but when I run it I get this. I am on Windows XP.
'Shaders.exe': Loaded 'C:\Documents and Settings\User\My Documents\Visual Studio 2010\Projects\Shaders\Win32\Debug\Shaders.exe', Symbols loaded.
'Shaders.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file
'Shaders.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file
・・・・

Answer:
PDB is a debug information file used by Visual Studio. These are system DLLs, which you don't have debug symbols for. Go to Tools->Options->Debugging->Symbols and select checkbox "Microsoft Symbol Servers", Visual Studio will download PDBs automatically. Or you may just ignore these warnings if you don't need to see correct call stack in these modules.

何かしら,いるんだろうとは思うけど,今のところいらないので,この指示に従っておく.
理解り次第,色々掲載を行う.

VTKの各ディレクトリの関係について理解する.

VTKが無事インストールされたなら,VTKのSourceとVTKをBuild*1したディレクトリの2つが出来上がるはず.
今回はこの中身について考えてみる

Source以下にある,Exampleというディレクトリの構成*2を示す.

├─Examples
│ ├─AMR
│ │ └─Cxx
│ ├─Annotation
│ │ ├─Cxx
│ │ │ └─LabeledMesh
│ │ ├─Python
│ │ └─Tcl
│ ├─Array
│ │ └─Cxx
│ ├─Build
│ │ ├─vtkLocal
│ │ │ └─Testing
│ │ │ └─Cxx
│ │ └─vtkMy
│ │ ├─Common
│ │ ├─Examples
│ │ │ ├─Cxx
│ │ │ │ ├─Ex1
│ │ │ │ └─Ex2
│ │ │ └─Tcl
│ │ ├─Imaging
│ │ ├─Unsorted
│ │ ├─Utilities
│ │ │ └─Doxygen
│ │ └─Wrapping
│ │ └─Tcl
│ │ ├─vtkmy
│ │ ├─vtkmycommon
│ │ ├─vtkmyimaging
│ │ └─vtkmyunsorted
│ ├─Charts
│ │ └─Cxx
│ ├─DataManipulation
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─Graphics
│ │ └─Python
│ ├─GUI
│ │ ├─Cocoa
│ │ │ ├─Documentation
│ │ │ └─SimpleCocoaVTK.xcodeproj
│ │ ├─Motif
│ │ ├─Python
│ │ ├─Qt
│ │ │ ├─Events
│ │ │ ├─FourPaneViewer
│ │ │ ├─GraphicsView
│ │ │ ├─GraphicsViewPython
│ │ │ ├─ImageViewer
│ │ │ └─SimpleView
│ │ │ └─Icons
│ │ ├─Tcl
│ │ └─Win32
│ │ ├─SampleMFC
│ │ │ └─res
│ │ ├─SimpleCxx
│ │ ├─vtkBorland
│ │ │ ├─Package
│ │ │ └─ProjectDemo
│ │ └─vtkMFC
│ │ ├─vtkDLG
│ │ │ └─res
│ │ ├─vtkMDI
│ │ │ └─res
│ │ └─vtkSDI
│ │ └─res
│ ├─Hybrid
│ │ ├─Cxx
│ │ └─Python
│ ├─ImageProcessing
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─Infovis
│ │ ├─Cxx
│ │ │ ├─ChartView
│ │ │ │ └─Icons
│ │ │ ├─CustomLinkView
│ │ │ │ └─Icons
│ │ │ ├─EasyView
│ │ │ │ └─Icons
│ │ │ └─StatsView
│ │ │ └─Icons
│ │ ├─Java
│ │ ├─Python
│ │ └─Tcl
│ ├─IO
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─MangledMesa
│ │ └─Tcl
│ ├─Medical
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─Modelling
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─MultiBlock
│ │ └─Cxx
│ ├─ParallelProcessing
│ │ ├─Generic
│ │ │ └─Cxx
│ │ └─MPI
│ │ ├─Python
│ │ └─Tcl
│ ├─Rendering
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─Tutorial
│ │ ├─Step1
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step2
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step3
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step4
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step5
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ └─Step6
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─VisualizationAlgorithms
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ ├─VolumeRendering
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl
│ └─Widgets
│ └─Cxx

この例からも確認出来るように,VTKにはたくさんのサンプルコードを持っており.
基本はこのサンプルコードをどのようにいじっていくのかがポイントとなる.
また,上記からも確認できるよう,cxxだけでなく,Java, Python, Tcl についても揃っているので,試して行きたい.

また,導入として,上記のExample 以下にある,Tutorialのディレクトリを見てみると,最初のステップのレクチャからプリミティブ形状(Cone)を用いて,
VTKによるレンダリングから少々難しいインタラクションまでのコードを取り揃えている.
VTKによる勉強を始める前に,まずこれを最初は見ていくようにしたい.

│ ├─Tutorial 
│ │ ├─Step1  Hello World のように,簡単にVTK内のコード利用についての説明 (レンダリングとアニメーション)
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step2  Step 1 にTime call back関数をいれこんで,もう少しテクニカルにしたコードの内容を紹介
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step3  Step 2のコードに複数のプリミティブな情報を入れた場合におけるコードの内容を紹介 
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step4  プリミティブに対して,各プロパティの情報を変更する場合におけるコードの紹介
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ ├─Step5  任意のインタラクションを行った場合におけるコードの紹介
│ │ │ ├─Cxx
│ │ │ ├─Java
│ │ │ ├─Python
│ │ │ └─Tcl
│ │ └─Step6  3次元空間上におけるインタラクションコードを紹介
│ │ ├─Cxx
│ │ ├─Python
│ │ └─Tcl

このように,たくさんのコードが用意されているらしいのでサンプルコードから手をつけていくといいかもしれません.
特にTutorialには,各項目において,どのような手順に従って処理を施すかが記述されている.
しっかりと理解して進むようにしたい.

*1:こちらについては,以前掲載している記事を参照に

*2:スペースの関係上,CMake関連のディレクトリは除外

 VTKのExample source

VTK 自体は本当に多くの例題コードが掲載されており,勉強はこのSample codeから読む様にする.

VTKの基本のコード(5.10)の手順は以下のとおりである(Tutorial Step1 に従う).

  1. reader = (vtk上で取り扱うデータ形式)Reader()
    1. ここは形式に従って,Readerで読み込み,セットする
  2. mapper = (vtk上で取り扱うデータ形式)Mapper(reader)
    1. mapper->setInputConnection (reader->GetOutputPort() )
  3. actor = vtkActor()
    1. actor->SetMapper(mapper)
  4. render = vtkRenderer()
    1. render->AddActor( actor )
    2. render->SetBackground(R, G, B)
  5. renderWindow = RendererWindow()
    1. renderWindow->AddRenderer(render)
    2. renderWindow->SetSize( W, H)

これが,VTKの基本的な記述方法である.

自由度について

自由度(Degrees of Freedom: DOF)の定義

変数のうち,独立して選択できる変数の数,すなわち,式において,全変数から相互間に成り立つ関係式(束縛条件、拘束条件)の変数の数を引いた数.(WikiPediaより)
 例:系の状態がN個で表現される時,「その系の自由度はNである」

任意の物体(質点)において,

  • 並進(平行移動)の場合
    • 前後方向や左右方向,上下方向というように,一つの方向しか移動できない→ 自由度1
    • 上記において,2つの方向を組み合わせた平行移動 →自由度2
    • 3つの方向を組み合わせた平行移動 → 自由度3

上記は重心の平行移動を考えたもの.
つまり,3方向のみを考えるので,並進の3方向で最大は自由度3

さらに,ひねり,つまり,回転などを考慮すると,

  • 並進+回転
    • Yaw: Y軸方向の回転→ 天井から吊り下げてくるくる回転した感じ
    • Pitch: X軸方向の回転→ 鉄棒でくるくると回転している感じ
    • Roll: Z軸方向の回転→ 北極星を中心にくるくると回転させる感じ

つまり,3方向の回転も加わる.
従って, 3+3=6方向,ゆえに 自由度6となる.

この自由度について表現した図*1が以下になる.

*1:図中の飛行機は,Microsoftさんのクリップアートを利用規定に基いて使用させて頂いてます.そのため,無断複製について固くお断り致します.