1read 100read
2013年06月プログラム347: C++によるDICOMファイル解析 (183) TOP カテ一覧 スレ一覧 2ch元 削除依頼
JAVAってこんなことも出来ないの? (670)
ATL/WTL Part7 (188)
マルチプラットフォーム プログラミング言語 haXe (110)
【RAD統合環境】 Qt 総合スレ 15 【Win/Mac/Linux】 (136)
Perl初心者スレ(マジレス回答) (172)
Matplotlib でグラフプログラミング【Python】 (171)

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


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

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元 削除依頼
C/C++の宿題片付けます 165代目 (293)
ファミリーベーシック (138)
【日本語不自由】Eclipse Pleiades プラグイン (124)
VB.NET質問スレ(Part40) (216)
ネットワークプログラミング雑談 (189)
Excel VBA 質問スレ Part30 (440)
--log9.info------------------
Roland S-760を使い倒そう! (100)
◆うたウガ◆歌えるカラオケ◆うたブロ◆ (148)
【Noise】ノイズつくろうぜ!【騒音】 (113)
【販売終了】Roland MC-909 5th【でも最強】 (158)
ギターの録音方法 2 (271)
★ここだけ80年代のスレ★ (128)
【徹底】ソフトシンセVSハードシンセ4【比較】 (203)
音楽は結局、自己満足の世界か?お金のためか? (208)
【エキタン】Sampletank/Soniksynth13【(;´Д`)ハァハァ】 (287)
【MONDO GROSSO】大沢伸一を語れ パート1 (239)
★ヤフオク★通電のみ確認しました★ギャンブル★ (118)
【XMSNES】スーパーファミコン音源で音楽データ制作【SPC】 (830)
 たこ焼きをお腹いっぱい食べる方法  (918)
アナログモジュラーシンセ 2 (442)
DTM/DTWの機材についてアドバイスお願いします (196)
【桜高軽音部】けいおん!スレ in DTM板 その1 (713)
--log55.com------------------
【中央日報】「南京大虐殺のとき25万人助けてくれた」…コロナ事態受けてドイツに恩返しする中国 ジョン・ラーベ ★2[4/3]
【中央日報】3月は乗り越えたが…輸出「4月の成績表」が恐ろしい理由=韓国 [4/5]
【アンミカ(安美佳)外国人】政府のPCR検査可能数は不十分!説明不足を指摘!「受けに行けるんだなと(国民が)思ってしまう」[4/7]
【朝鮮日報】韓国6大製造業の営業利益率5.4%、世界平均の半分 韓国の産業の世界競争力は非常事態 [4/7]
【セメント仏像】韓国 1400年前の百済石仏にまつわる秘密とは 日本の飛鳥時代まで影響を及ぼした [4/5]
【コスピャス】韓国、コスピ1710維持(下落)... 外国人18営業日連続売り [3/30]
【韓国】1日の失業者6100人…毎日大企業1社分の雇用が消える 無給休職や休業などは除外…事実上の失業状態さらに多い [4/7]
【聯合ニュース】ユニクロ韓国法人がリストラ検討か 社長のメール誤送信で社内騒然 [4/7]