日々鍛錬

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

OpenCV のインストール

参考にしたサイトはこちらから
Physics-Station: OpenCV を Visual Studio で使う方法


このサイトの通りにしたら、きれいにいけました。


環境は以下の通り

OpenCV 2.4.8をインストールする

1) 以下のサイトから最新版をダウンロードする
http://sourceforge.net/projects/opencvlibrary/files/

「Looking for the latest version? 」の後にLatest Versionがあるので、こちらをダウンロードする
2014年3月19日の最新版は以下の通り.

opencv-2.4.8.exe (362.0 MB)

2) ダウンロードしたファイルをダブルクリックし、展開するOpenCVのディレクトリを指定
ex) C:\OpenCV\

3) あとは動作にしたがうだけ

4)終了後に、「システムのプロパティ」→「システムの詳細設定」→「詳細設定」→「環境変数
と選択する

5) ユーザ変数とこで、「新規」をクリックし「変数名」に「OpenCV」を、「変数値」に2)のパスを通す

6)ユーザ変数に「PATH」があるなら、「;%OpenCV%」と一番後ろにおく



インストールしたOpenCVのライブラリを種々のコードでも利用するため、
ライブラリ読み込みのためのヘッダファイルを作成する。
ライブラリにある番号はOpenCVのバージョンなので、インストールしたバージョンに合わせるといいらしい。
便利ですね。
このファイルは上で設定した%OpenCV%\build\include\opencv2\内の「opencv_lib.hpp」とする。

#if _DEBUG
#pragma comment(lib, "opencv_calib3d248d.lib")
#pragma comment(lib, "opencv_contrib248d.lib")
#pragma comment(lib, "opencv_core248d.lib")
#pragma comment(lib, "opencv_features2d248d.lib")
#pragma comment(lib, "opencv_flann248d.lib")
#pragma comment(lib, "opencv_gpu248d.lib")
#pragma comment(lib, "opencv_highgui248d.lib")
#pragma comment(lib, "opencv_imgproc248d.lib")
#pragma comment(lib, "opencv_legacy248d.lib")
#pragma comment(lib, "opencv_ml248d.lib")
#pragma comment(lib, "opencv_nonfree248d.lib")
#pragma comment(lib, "opencv_objdetect248d.lib")
#pragma comment(lib, "opencv_ocl248d.lib")
#pragma comment(lib, "opencv_photo248d.lib")
#pragma comment(lib, "opencv_stitching248d.lib")
#pragma comment(lib, "opencv_superres248d.lib")
#pragma comment(lib, "opencv_ts248d.lib")
#pragma comment(lib, "opencv_video248d.lib")
#pragma comment(lib, "opencv_videostab248d.lib")
#else
#pragma comment(lib, "opencv_calib3d248.lib")
#pragma comment(lib, "opencv_contrib248.lib")
#pragma comment(lib, "opencv_core248.lib")
#pragma comment(lib, "opencv_features2d248.lib")
#pragma comment(lib, "opencv_flann248.lib")
#pragma comment(lib, "opencv_gpu248.lib")
#pragma comment(lib, "opencv_highgui248.lib")
#pragma comment(lib, "opencv_imgproc248.lib")
#pragma comment(lib, "opencv_legacy248.lib")
#pragma comment(lib, "opencv_ml248.lib")
#pragma comment(lib, "opencv_nonfree248.lib")
#pragma comment(lib, "opencv_objdetect248.lib")
#pragma comment(lib, "opencv_ocl248.lib")
#pragma comment(lib, "opencv_photo248.lib")
#pragma comment(lib, "opencv_stitching248.lib")
#pragma comment(lib, "opencv_superres248.lib")
#pragma comment(lib, "opencv_ts248.lib")
#pragma comment(lib, "opencv_video248.lib")
#pragma comment(lib, "opencv_videostab248.lib")
#endif


Visual studio 2010での設定
Visual studio 2010を起動し、「ファイル」→「新規作成」→「プロジェクト」を選択
「空のプロジェクトを選択する」

プロジェクト名を今回 OpenCV\Tutorial\Smoothとする。
(理由はサンプルコードがあるから!)

1) 読み込むためのライブラリの設定
OpenCVのディレクトリについて、「構成プロパティ」→「VC++ディレクトリ」から以下を設定する

  • インクルードディレクトリ

C:\OpenCV\build\include

  • ライブラリディレクトリ

C:\OpenCV\build\x64\vc10\lib

サンプルコードに、次の一行を入れる。

#include <opencv2/opencv_lib.hpp>

私は、そのまま参考サイトのコードを使ってみました。
(わかりやすいし勉強になりました!ありがとうございます!)

//インクルードファイル指定
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp>
//名前空間の指定
using namespace cv;
int main()
{
 //width120, height100の画像を作成
 Mat src = Mat::zeros(100,120,CV_8UC3);
 //画像にHello World!を描く
 putText(src, "Hello World!", Point(5,50), FONT_HERSHEY_SIMPLEX, 0.6, cv::Scalar(0,0,200), 2, CV_AA);
 //画像を表示
 imshow("",src);
 //ウインドウの表示時間(0はキーが押されるまで閉じない)
 waitKey(0);
 return 0;
}

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