日々鍛錬

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

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さんのクリップアートを利用規定に基いて使用させて頂いてます.そのため,無断複製について固くお断り致します.

 Radial Basis Function

通称,RBFでお馴染みの関数.


\phi({\bf x}) = \phi(||{\bf x}||)
\phi(x_i, \: {\bf c}) = \phi(||x_i \:- \:{\bf c}||)


つまり,任意の点がその原点からの距離に依存する実数値を表現する関数.
これに,日本語があったのですね!(お恥ずかしいことに,今まで日本語の存在を全く知らなかった!)

「放射基底関数」


たしかに,Radial(放射状の)Basis(基底)関数(Function)

よく考えれば日本語に直訳できることなのに,すっかり,RBFとか,「Radial Basis」でお馴染みになってました.
本日一番勉強になったキーワードでもありました.
そして,とにかく勉強不足だ!ということを猛省したキーワードでもありました.


恥ずかしかったけど,質問してよかったと自分では思います.
でもやっぱり,この日本語訳より,「RBF」というキーワードのほうが私にはしっくり来てしまいます.
#ご専門の方々はどちらを通常で使うのかしら,,


こういう,大失敗談も載せていきながら,勉強不足を解消したいと思います.(本気の雑記帳)

 医用画像,解剖学における方向

毎回良くわからなくなるので,メモ書き

  • 解剖学的正位 (anatomical position)
    • 手のひらを,顔が向いている方向に向けてまっすぐ立った姿勢
    • この方向を基準にして記述


上記は,解剖学的正位を用いて,各方向と平面を示した図*1

  • 上部方向(Superior)
  • 下部方向(Inferior)
  • 前部(Anterior)
  • 後部(Posterior)
  • 右部(Right)
  • 左部(Left)

ただし,左右については,観察される側(患者)から見た左右の表現

  • 臨床医が患者と向かい合う場合(Posterior方向へ観測),臨床医から見て右側は患者の左半身
  • 臨床医が患者の後ろから観測の場合(Inferior方向へ観測),臨床医から見て右側は患者の右半身

画像の軸方向(Orientation)の例については,以下のとおり

  • RPI:各軸が,「右部から左部」,「後部から前部」,「下部から上部」
  • RAI:各軸が,「右部から左部」,「前部から後部」,「下部から上部」
  • RAS:各軸が,「右部から左部」,「後部から前部」,「上部から下部」


また,各平面について

  • 体軸断面
    • Axial
    • 体に対して水平方向(InferiorとSuperiorを結ぶ体軸)の断面
  • 矢状面(しじょう)
    • coronal
    • 左右(正中)方向(RightとLeftを結ぶ軸)に垂直な面
  • 冠状面(かんじょう)
    • sagittal
    • 上下方向(AnteriorとPosteriorを結ぶ軸)に対し平行な断面,,つまり,体軸断面に対して平行な断面

このように,医用画像はそれぞれ軸と平面の表記方法がある.
これを画像間で間違えると泣きそうになるので,注意されたい.
#私は以前,プロジェクト全員から違うOrientationのデータ集約からのスタートという状態が来て,夜中に泣いたことがある.
#そしてこの苦しみを誰にもわかってもらえなかった...orz

*1:図はダウンロードフリーですが,一応著作権ありと言っておきます.
だって,学生さんたちにも笑われながらも見てもらったので...

Lp normの表記について

論文でよく見かける,Lpノルム
この表記について,「L」の表記は大文字なのだろうか,小文字なのだろうか.
正しい表記を色々調べたが,どこにも掲載されていなかった.
ただ,調べた所,最も多い表記法はCapsでの表記だった.
つまり,「大文字」の表記です.
今後はこの情報に一応,従う.