1read 100read
2013年17プログラム238: C++によるDICOMファイル解析 (184) TOP カテ一覧 スレ一覧 2ch元 削除依頼
★★Java質問・相談スレッド164★★ (527)
【SL4】Windows Phone 7 アプリ開発スレ Part4【XNA】 (429)
関数呼出しはgoto文である (192)
【最速へ】LowLevelVirtualMachine【LLVM】 (608)
推薦図書/必読書のためのスレッド 70 (615)
TypeScript part1 (425)

C++によるDICOMファイル解析


1 :2006/08/21 〜 最終レス :2013/07/24
さっそくはじめましょー

2 :
DICOMの紹介をどうぞ

3 :
あ〜、あの電車男のオープニングの元ネタの

4 :
>>2
DICOMとは
Digital Imaging and Communications in Medicineの略で、
医療におけるデジタル画像と通信の企画を定めたやつです。
ものすごーく複雑多岐に及んでいてとても個人で全て
理解できる代物ではないので、ひとまずDICOMファイルを
読み込んでデータを解析するくらいのものを作ってみようかと
>>3
DAICON

5 :
参照URLも貼らずに(ry

6 :
参考URL:
DICOM日本語Webページ
http://www.jfcr.or.jp/DICOM/
本家
http://medical.nema.org/

7 :
規格が決まってるなら別に解析する必要なくね?

8 :
DICOMファイルのサンプル(グロ画像ではありません)
http://149.142.216.30/DICOM_FILES/DICOMfilesIndex.html
>>7
フリーのDICOMファイル解析ツールってのが
Macを除いて殆ど無いので、ショボいのでもいいから作ってみようかと

9 :
ちなみにMacではApple社がMac OS X用に開発した
無料DICOMビューア「OsiriX」(オシリックス?)というのがあります 凄すぎ
http://www.apple.com/jp/medical/osirix/
ココまでのモノを作り上げるのは到底不可能ですが、
できるトコまでやってみたいと思っとります

10 :
「解析ツール」が何を指しているのかよくわからんが、ビューア系なら色々あるぞ。
ttp://www.vector.co.jp/soft/winnt/business/se333639.html
ttp://www.vector.co.jp/soft/winnt/business/se388642.html
ttp://www.vector.co.jp/soft/win95/business/se332625.html
洋物もいくつか使ったことある。

11 :
>>10
情報Thx!
ただ、ソースコード公開してるトコは見た事なかったので、
自己の勉強の意味でも作ってみよーかなと
「解析ツール」って言ったのは
DICOMヘッダ情報解析&画像閲覧できる
Appを指してます

12 :
ほんじゃそろそろDICOMファイルの
詳細な構造から行ってみます
■DICOMファイルは大きく分けて以下の構造になってます
┌─────────────
|DICOMファイルメタ情報
├─────────────
|DICOMデータ集合
└─────────────
まずDICOMファイルメタ情報から見ていきます

13 :
【DICOMファイルメタ情報】
DICOMファイルを構成する為の
ヘッダ情報みたいなものが入っています
具体的には以下構成になっています
■DICOMファイルメタ情報の構造
┌─────────────
|ファイルプリアンブル
├─────────────
|DICOMプリフィックス
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|・・・・・・・・・
├─────────────
|ファイルメタ要素
└─────────────

14 :
【ファイルプリアンブル】
DICOMファイル先頭にある固定128バイト。
アプリケーション特定の用途により使用できるようになっています。
使用しない場合は、全てのバイトに0x00を設定するよう決められています。
【DICOMプリフィックス】
4バイトの文字列。「DICM」固定。
このファイルがDICOMファイルかどうか判断する為に使用されます。
【ファイルメタ要素】
DICOMファイルのヘッダ情報を表す項目。
それぞれ『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。

15 :
>>1はなぜDICOMのファイルを解析したいのか、その動機を具体的に書け。

16 :
詳細な解説は飛ばして、次にDICOMデータ集合に行きます
【DICOMデータ集合】
DICOMファイルの最も重要な部分。
・画像情報(画像の幅、高さ.etc)
・患者情報(患者名、年齢、住所.etc)
等、ありとあらゆるデータが詰め込まれています。
■DICOMデータ集合の構造
┌─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|・・・・・・・・・
├─────────────
|データ要素
└─────────────
【データ要素】
DICOMファイルの各データを表す項目。
それぞれ《基本的に》『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。

17 :
解析する「ソフトを作りたい」動機じゃないぞ。「解析したい動機」だ。

18 :
仕事で必要になったんだが、金が無いので、無料で馬鹿どもを集めて作らせようという魂胆でしょ。

19 :
仕様通りに実装して終了
の気がするんだけど
仕様が巨大らしいから面倒なのかな

20 :
>>17
・C++のお勉強
・DICOM規格のお勉強(最初はDICOM解説サイト作ろうとしたけどメンドいのでやめた)
ってトコかな
別にDICOMじゃなくてもいいんですよ
やり甲斐がある題材が欲しかっただけ
>>18
いや、仕事とは無関係ですよ 完全に趣味

21 :
って、明日も仕事なので
今日はコレくらいで
では

22 :
$ apt-cache search DICOM
libdcmtk0 - The OFFIS DICOM toolkit runtime libraries
libdcmtk0-dev - The OFFIS DICOM toolkit development libraries and headers
ctn - Central Test Node, a DICOM implementation for medical imaging
ctn-dev - Development files for Central Test Node, a DICOM implementation
ctn-doc - Documentation for Central Test Node, a DICOM implementation
dcmtk - The OFFIS DICOM toolkit command line utilities
dcmtk-doc - The OFFIS DICOM toolkit documentation
dcmtk-www - The OFFIS DICOM toolkit worklist www server application
libdcmtk1 - The OFFIS DICOM toolkit runtime libraries
libdcmtk1-dev - The OFFIS DICOM toolkit development libraries and headers
libmdc2 - Medical Image (DICOM, ECAT, ...) conversion tool
libmdc2-dev - Medical Image (DICOM, ECAT, ...) conversion tool
medcon - Medical Image (DICOM, ECAT, ...) conversion tool
xmedcon - Medical Image (DICOM, ECAT, ...) conversion tool
結構ヒットするよ
Debianだからフリーだよ

23 :
DCMTK使えよ。
ttp://dicom.offis.de/dcmtk.php.en
スレ主はちゃんと調べもせずに「ない」と決め付けている。

24 :
>>20
なぜDICOM規格の勉強をしたいのか説明しろ

25 :
あんな糞企画、仕事以外で使いたくなるわけ無い

26 :
>>1
ツール作りたいなら、別に規格の説明などしなくていいから、勝手に自分でやってくれ。

27 :
そんな規格よりXMLSchemaとか解析してくれ

28 :
やるならYAMLだな。
いいものが出来れば、社会に貢献できる。

29 :
ただいま戻りました
あ、情報提供有難うございます。
是非参考にさせてもらいます

30 :
>>16の続き
眠いのでこれだけ・・・
【タグ】
16ビット符号無し整数の「グループ番号」「要素番号」の対で構成され、
データ要素を一意に識別する(例外有り)為の目印。
規格書には(0x0020,0x1011)等と記載されたりします。
【値表現(VR)】
データ要素の値のデータタイプ及び書式を表す2バイトの文字列。
データ要素が持つ値は文字列だったり整数値だったりバイト列だったりしますが、
これらのデータタイプが何なのかを解析する際に使用されます。
DICOMファイルによっては、このVRが存在しない(暗黙的VR)ものもあります。
【値長さ】
値領域の長さ(バイト数)を示す16または32ビット
(VRが明示的か暗黙的かに依存する)符号無し整数。
値長さが未定義の場合、このフィールドには
0xFFFFFFFFが設定されます(未定義長さ)。
【値領域】
データ要素の値が格納されている領域。
値が整数値なのか文字列なのかはVRによって判断されます。

31 :
ブログでやれ

32 :
とりあえず物凄く大まかな構造を解説したところで、
これまでの解説をプログラムでまとめてみましょう
int main(int argc, char* argv[])
{
  DicomFile DcmFile; // DICOMファイルを解析するクラスのインスタンス
  DcmFile.Open(argv[1]);
  DcmFile.ReadMetaInfo() ;
  DcmFile.ReadDataSet() ;
  return 0;
}

33 :
DicomFileクラスはコメントにもある通り
DICOMファイルを読み込み、データを解析するクラスです
直感的に見て分かると思いますが上のプログラムでは
・DICOMファイルをオープンする
・DICOMファイルメタ情報を読み込んで解析する
・DICOMデータ集合を読み込んで解析する
の3つを行います
解析した結果をどうするかについてはまた別途考えます
/* 「解析する」ならRead〜じゃなくてParse〜の方が良かったか・・・ */

34 :
トリップ付けました

35 :
今日はこれで寝ます では

36 :
なに?このキチガイ

37 :
はじめから隔離スレだし、他で暴れられるよりいいじゃね?

38 :
埋め

39 :
産め

40 :
うめ

41 :
うめ

42 :
ウメ

43 :
ウメ

44 :
埋め

45 :


46 :
埋め

47 :
生め

48 :
埋め

49 :
うめ

50 :
うめ

51 :
埋め

52 :
埋め

53 :
ねむー 今日は無理だ・・・
なので続きは明日

54 :
もう来るな

55 :
いやー本業多忙で・・・
もうしばらく延期させてください
>>54
まぁそう言わず

56 :
二度と来るな

57 :
何だか分からないが本業がんばれ

58 :
これですか? わかりません :D
ttp://www.youtube.com/watch?v=a6ErJVffY6E&mode=related&search=

59 :
DCOMの解析かと思った
それだけは勘弁

60 :
おれも、前に作ったが、iso-2022系の文字をサポートしているためハングルとか中国語とか
文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。

61 :
>>57
本業はMFC屋さんです

62 :
>>32の続き
まずはDICOMファイルを全てメモリに読み込んでみます
(最大メモリ量 > ファイルサイズ の前提で話を進めます)
----------------------------------------
#include <fstream>
using namespace std;
class DicomFile
{
private:
 unsigned char* m_pFile;
 unsigned char* m_pCur;
 unsigned char* m_pEnd;
public:
 // コンストラクタ
 DicomFile()
 : m_pFile(NULL)
 , m_pCur(NULL)
 , m_pEnd(NULL)
 {
 }

63 :
 // DICOMファイルをオープンする
 int Open(char* pFileName)
 {
  ifstream file;
  long lLength = 0;
  file.open(pFileName, ios::binary);
  file.seekg(0, ios::end);
  lLength = file.tellg();
  file.seekg(0, ios::beg);
  m_pFile = new unsigned char[lLength];
  file.read((char*)m_pFile, lLength);
  file.close();
  m_pEnd = m_pFile + lLength;
  m_pCur = m_pFile + 128;
  if (memcmp(m_pCur, "DICM", 4) != 0)
  {
   delete [] m_pFile;
   m_pFile = NULL;
   m_pEnd = NULL;
   m_pCur = NULL;
   return 0;
  }
  m_pCur += 4;
  return 1;
 }

64 :
 // メタ情報を解析する
 int ParseMetaInfo()
 {
  return 1;
 }
 // データ集合を解析する
 int ParseDataSet()
 {
  return 1;
 }
};
int main(int argc, char* argv[])
{
 DicomFile DcmFile; // DICOMファイルを解析するクラスのインスタンス
 DcmFile.Open(argv[1]);
 DcmFile.ParseMetaInfo();
 DcmFile.ParseDataSet();
 return 0;
}

65 :
色々と突っ込みどころ満載なのはご愛嬌。
今日はおちまい。

66 :
電波が足りん

67 :
なんで、こんなニッチな分野がスレになってんの?

68 :
sage

69 :
てすと

70 :
半年振りに復活。色々やらされてました。

71 :
久々に再開するかーと思ったけど、
どこかwebスペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし

72 :
復活おめ

73 :
>>72
ありがとうございます
web借りました。
今後はこっちで細々やっていきます。
板汚しすみませんでした。
http://s1.muryo-de.etowns.net/~programming/

74 :
>73
ソースまだー?

75 :
すみません。。HDDがいきなり死亡して
ソースが全部吹っ飛んでしまいました。。
もうしばらくお待ち下さい。。

76 :
期待age

77 :
あの、すいません。
バイトでちょうどDICOMに関することをやらされているので、このスレ見つけて感動しました。
ところで、ちょうどというか本当にちょうどあなたがサイトでやられているようなことをやってくれないかと支持されたのですが
もしよろしければソースコード公開とかされないでしょうか?

78 :
これがゆとりというものか

79 :
埋め立て

80 :
あっはっは(苦笑
いちおうリアルゆとり世代ではないのですが・・・
いちおう、ゆとりなりに努力した結果、一昨日に完成させました。
バイト先に出す成果物なのでソースコードが出せませんが・・・

81 :
でも、毎年追加変更あるんだよね。
俺がやったときは対応する文字コードが多すぎて面倒だったな。

82 :
ところで
http://www.jfcr.or.jp/DICOM/dicom_draft-j.html
とかの、DICOM仕様書の日本語訳とかが消えているっぽいんだけど
他に日本語約手に入るところ知らないかな?
この分量の英語読むのは正直辛い

83 :
libDicomとか無いのかな?

84 :
保守

85 :
http://www.sim.hcuge.ch/papyrus/01_Papyrus_Presentation_EN.htm
DICOM画像読み込みライブラリ

86 :
>>85
なんぞこれ

87 :
CベースのDICOM画像読み込みライブラリ、Windows、Mac、Linux対応
DICOMの通信規格部分は非対応。
Mac用のOsirisXなんかに使われているのが実績
http://japanese.osstrans.net/software/osirix.html
画像の読み出しだけなら十分に便利。

88 :
>>85
試しにテスト画像みたいなのをSCION IMAGEで開こうとしたけど…
自分じゃやり方が良くわからん。

89 :
age

90 :
DICOM画像ってのは簡単に作れるもんなんでしょうか?

91 :
詳しくは知らんが画像そのものはTIFFとかだったような記憶がある。
画像とその付帯情報、医療用なので患者の情報とかが、
いろいろくっついていてポータブル形式というのにパッケージされている。
業界標準的なライブラリはあったと思う。

92 :
ビューワー程度だったら医学生が自作できる程度のものらしい。
特定分野の技術だから情報が仕入れにくいのがネックかもしれない。

93 :
名古屋大学のDICOMViewerでどれでも読めるわけじゃないよ
タグ編集画面の説明は丁寧だけど
SQタグとかは対応してないけどバイナリでエクスポートはできる

94 :
>ビューワー
は沢山あるんだけど、
ファイル作成ライブラリが無いような気がするのは気のせい?

95 :
基本的にDICOMはJPEGに患者なの名前などのタグを入れ込めるようにしたものですね。
ただ、wikipediaにも同じ内容があるのですが、標準仕様が改定のたびに膨大になっていること。
あと、医療機器メーカーなんかがCTスキャンの画像を独自拡張した使用で吐き出したりすることがままあるので、きちんとすべてのDICOM画像を表示できるものは限られているみたいですよ。
ファイル作成ライブラリが無いのは基本的に医療機器側でDICOMデータとして吐き出してくれるから。
間違いあったらごめんなさい。

96 :
情報thx!
機器側の中の人はどうやって作られてるんでしょ?

97 :
DICOMファイルのフォーマットさえ理解できていれば、あとは規格書を見て黙々と必要な情報を出力するだけ。
厳密に運用するなら出力する内容と規格との適合性のチェックが大変なだけで、
ファイルフォーマット自体は>>12-16に挙げられているように単純なものですよ。
>>95
画像部分については、基本的に無圧縮データです。
ただ、何でも受け入れちゃうDICOMだから非可逆/可逆をあわせてJPEGも可能ですけど。
規格上の画像形式はPart.5を参照のこと。
また、画像の表示に関しては画像と通信の規格なんですから、基本的に表示できて当たり前です。
でないと、わざわざ規格を定めている意味がありません。

98 :
CTで吐き出されたDICOM画像のヘッダを自作のRAWやTIF画像のヘッダに載せ替え,デジタルファントムの作成を企てていますが,うまくいきません。
どうやればうまくいくんでしょう?

99 :
99

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Java低速GUI Swing & JavaFX 10 (828)
【QBASIC互換!?】FreeBasic【GPL】 (530)
D言語 Part32 (112)
【VB.NET】LINQ友の会【C#, C♯, C#】 (787)
D言語 Part32 (112)
36歳のオッサンがC言語を始めたいのだが・・・ (971)
--log9.info------------------
のんほいパーク2(豊橋総合動植物公園) (287)
【白鳥全滅】宇部市ときわ公園【完全閉園】 (111)
【レッサー】静岡市立日本平動物園【パンダ】 (529)
葛西臨海水族園 (175)
【ここも】すみだ水族館【オリックス】 (544)
☆★ 旭川市旭山動物園 その10 ★☆ (165)
早く潰れて欲しい劣悪な動物園 2 (143)
男鹿水族館GAO (637)
【愛知県】東山動植物園その3【名古屋市】 (848)
千葉市動物公園 (237)
多摩動物公園★4 (434)
沖縄美ら海水族館 その2 (292)
新江ノ島水族館 (149)
京急油壺マリンパーク (100)
【掛川、神戸】花鳥園総合【富士、松江・・・】 (167)
仙台市八木山動物公園 (182)
--log55.com------------------
鬼束ちひろを古宮裕輔から守る会
一番実戦性の高い武術・格闘技を一つやるなら
詠春拳と大気拳はどっちが勝つと思いますか?
少林寺はなんでK-1にでないんだ
【円心から】真義館part1【独立】
【五輪】GACKTが実践するテコンドーとは【武道】
【マット】もぎゅ康子&女性柔術家【エンジェル】
【マキワラ】巻藁総合【鍛練】【空手】