日々鍛錬

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

Mac でisoファイルのDVDを作成する

だいぶ簡単過ぎて,びっくりした.

参考はこちら
MacでISOイメージディスクを作成 | EzXNetwork

私が改めて說明するまでもないです.

  1. 「アプリケーション」から「ユーティリティ」を選択.

f:id:tomokop:20140318221228j:plain

  1. →「ディスクユーティリティ」をダブルクリックして,DVDに焼きたいデータを選択

f:id:tomokop:20140318221306j:plain

最後に、ディスク作成を押下する
これで、isoの作成ができる.・・・・なるほど!

OpenGLのインストールについて

学生さんから質問があったので、おさらいがてらにメモを記述

OpenGLのインストールは以下の環境で行いました。

以下からソースを適当なフォルダ上に落とす
Nate Robins - OpenGL - GLUT for Win32

  • ダウンロードしたZipを解凍すると、以下の通り
  • 32bit版
    • glut.h
    • glut32.dll
    • glut32.lib


次のようにいれてみる。

  • (64bit)


設定は以上。

以下のコード*1をビルドして、動けば、OK

#include <GL/glut.h> // 環境によっては<glut.h>なので,自分の環境に合わせる
#include <math.h>

int mouse_l = 0;
int mouse_m = 0;
int mouse_r = 0;

int mpos[2];  // mpos[0]=xコツノク, mpos[1]=yコツノク

double trans[3] = {0.0, 0.0, 0.0};
double theta[3] = {0.0, 0.0, 0.0};
double angle[3] = {0.0, 0.0, 0.0};

void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glRotated(angle[0], 1.0, 0.0, 0.0);  // xシエ 、豼エ、ヒイセ
  glRotated(angle[1], 0.0, 1.0, 0.0);  // yシエ 、豼エ、ヒイセ
  glRotated(angle[2], 0.0, 0.0, 1.0);  // zシエ 、豼エ、ヒイセ

  glutWireCone(1.0, 2.0, 5, 10);
  glutSwapBuffers();
}

void mouse(int button, int state, int x, int y)
{
  switch(button){
  case GLUT_LEFT_BUTTON:
    if(state == GLUT_DOWN){
      mpos[0] = x;
      mpos[1] = y;
      mouse_l = 1;
    }
    if(state == GLUT_UP){
      mouse_l = 0;
    }
    break;
  default:
    break;
  }
}

void motion(int x, int y)
{
  if(mouse_l == 1){
    theta[0] = (double)(y-mpos[1])/5.0;
    theta[1] = (double)(x-mpos[0])/5.0;
  }
  if(mouse_l == 1 || mouse_m == 1 || mouse_r == 1){
    mpos[0] = x;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホxコツノク
    mpos[1] = y;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホyコツノク
    angle[0] += theta[0];
    angle[1] += theta[1];
    glutPostRedisplay();
  }
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w, 2.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
    else
        glOrtho(-2.0*(GLfloat)w/(GLfloat)h, 2.0*(GLfloat)w/(GLfloat)h, -2.0, 2.0, -10.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(500, 500);
  glutCreateWindow(argv[0]);

  glutReshapeFunc(reshape);
  glutDisplayFunc(display);
  glutMouseFunc(mouse);
  glutMotionFunc(motion);
  
  glutMainLoop();
  return 0;
}

*1:すみません。。。拾いものなのですが、どこから拾ったか忘れました。。。orz

VTKでC++のパスを通す

VTKを利用して,C++のCmakeをかけるとPathが通ってないというエラーが発生した.
よくわからないので,友人のVTKスペシャルなX博士に相談
なんと,VTKのBuildの時,「Build SHARE LIB」にチェックを入れたのがまずかったらしい*1..

つまり,dllができちゃったのがまずいのよ,と言われ泣きそうなった...
そうなのか...
そして,再Buildを行うとすんなりととおりました.

うん,これで,いちいち,Directory直下にライブラリを入れなくても良くなりました.(謎)

3D slicerのVolume 画像重ねあわせ方

3D slicer の画像重ね合わせの方法について,記述しておく.
まずは,3D slicerの画面構成の画像を提示
 f:id:tomokop:20140201234059j:plain

説明は画像内でも行ってますので,省略します.
もし必要なら,別の機会にでもキレイに記述する予定(あくまで未定ということ)

1. 重ねあわせたいVolumeの読み込み
読み込むためのVolumeを上の画像内のTool bar内Dataアイコンをクリックする.
読み込みたいファイルを選択すると以下の画像の通りになります.
複数選択も可能なので,試してみてください.
f:id:tomokop:20140201234502j:plain

私は今回,Slicerの公式サイトのTutrialのデータとして配布されているデータを用いました

  • spgr.nhdr : 人体の脳部医用画像(おそらく,MRI画像?)
  • all.nhdr*1:上記の画像から,各組織へ分けたRegionのラベル統合画像(多分)

2.上記の処理終了後,以下の画像が提示されます.
私の画面では,

  • モジュールが「volume」で提示されていることに注意.
  • 読み込まれたデータのうち,「all」というデータで提示されていることに注意.

f:id:tomokop:20140202001126j:plain

3. 3D Viewer上に画像を表示します.
2D anatomical Viewer上でどれでも良いので,各画面内の一番左端の「押しピン」ぽいアイコンをクリックすると以下の画像が出現します.
f:id:tomokop:20140202001519j:plain

Defaultは2つのリングが外れている状態ですので,このリングのアイコンをクリックし,リングをくっつけて下さい.
そうすると,3枚の画像間で連結でき,3D Viewer上で,3つの画像を同時に出力することができます.
リングの隣のつぶらな瞳をクリックすると,3D viewer上に3枚のスライス画像を出力することができます.
このつぶらな瞳こそ,3D viewer上に画像を表示するかどうかのボタンとなるわけです.

瞳の隣は,この画面上で表示したい平面を選択できます.
一番右端のリストは読み込んだデータのうち,提示したいデータを提示するものとなります.

4. では,3D Viewerを見ましょう
この3D Viewer上で左マウスでグリグリすると回転,右マウスでグリグリすると拡大縮小します.
f:id:tomokop:20140201234636j:plain

3D Viewerの一番左端にある,押しピンぽいアイコンをクリックすると,以下の画像が出現

*1:nhdr formatについて,すみません...わかりません.情報いただけると嬉しいです

続きを読む

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番目ということになるのです.

f(x, θ)の表記方法の意味

本日,論文に載っていた式.

 f(x; \theta)

xを変数,\thetaをパラメータとして考える
例えば,尤度関数になると,

 f(x;\theta) =L(x, \theta) = L(x|\theta) = f_{\theta}(x)

これが,任意の変数で表現すると,

 f(x_1, x_2, \cdots;\theta) =L(x_1, x_2, \cdots ;\theta) = L(x_1, x_2, \cdots|\theta)

また,平均値 \mu ,標準偏差 \sigmaとした時,尤度関数,Gaussianで表現する.

 f(x;\mu,\sigma)=\(1/\sqrt 2\pi \sigma \) \cdot \exp\({-(y-\mu)}^2 / \(2 {\sigma}^2 \) \)

理解した.