1 :
デフォルトの名無しさん :
2006/08/21(月) 21:49:44 さっそくはじめましょー
DICOMの紹介をどうぞ
あ〜、あの電車男のオープニングの元ネタの
>>2 DICOMとは
Digital Imaging and Communications in Medicineの略で、
医療におけるデジタル画像と通信の企画を定めたやつです。
ものすごーく複雑多岐に及んでいてとても個人で全て
理解できる代物ではないので、ひとまずDICOMファイルを
読み込んでデータを解析するくらいのものを作ってみようかと
>>3 DAICON
参照URLも貼らずに(ry
規格が決まってるなら別に解析する必要なくね?
>>10 情報Thx!
ただ、ソースコード公開してるトコは見た事なかったので、
自己の勉強の意味でも作ってみよーかなと
「解析ツール」って言ったのは
DICOMヘッダ情報解析&画像閲覧できる
Appを指してます
ほんじゃそろそろDICOMファイルの 詳細な構造から行ってみます ■DICOMファイルは大きく分けて以下の構造になってます ┌───────────── |DICOMファイルメタ情報 ├───────────── |DICOMデータ集合 └───────────── まずDICOMファイルメタ情報から見ていきます
【DICOMファイルメタ情報】 DICOMファイルを構成する為の ヘッダ情報みたいなものが入っています 具体的には以下構成になっています ■DICOMファイルメタ情報の構造 ┌───────────── |ファイルプリアンブル ├───────────── |DICOMプリフィックス ├───────────── |ファイルメタ要素 ├───────────── |ファイルメタ要素 ├───────────── |ファイルメタ要素 ├───────────── |・・・・・・・・・ ├───────────── |ファイルメタ要素 └─────────────
【ファイルプリアンブル】 DICOMファイル先頭にある固定128バイト。 アプリケーション特定の用途により使用できるようになっています。 使用しない場合は、全てのバイトに0x00を設定するよう決められています。 【DICOMプリフィックス】 4バイトの文字列。「DICM」固定。 このファイルがDICOMファイルかどうか判断する為に使用されます。 【ファイルメタ要素】 DICOMファイルのヘッダ情報を表す項目。 それぞれ『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。 ※詳細は後述。
>>1 はなぜDICOMのファイルを解析したいのか、その動機を具体的に書け。
詳細な解説は飛ばして、次にDICOMデータ集合に行きます 【DICOMデータ集合】 DICOMファイルの最も重要な部分。 ・画像情報(画像の幅、高さ.etc) ・患者情報(患者名、年齢、住所.etc) 等、ありとあらゆるデータが詰め込まれています。 ■DICOMデータ集合の構造 ┌───────────── |データ要素 ├───────────── |データ要素 ├───────────── |データ要素 ├───────────── |・・・・・・・・・ ├───────────── |データ要素 └───────────── 【データ要素】 DICOMファイルの各データを表す項目。 それぞれ《基本的に》『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。 ※詳細は後述。
解析する「ソフトを作りたい」動機じゃないぞ。「解析したい動機」だ。
仕事で必要になったんだが、金が無いので、無料で馬鹿どもを集めて作らせようという魂胆でしょ。
仕様通りに実装して終了 の気がするんだけど 仕様が巨大らしいから面倒なのかな
>>17 ・C++のお勉強
・DICOM規格のお勉強(最初はDICOM解説サイト作ろうとしたけどメンドいのでやめた)
ってトコかな
別にDICOMじゃなくてもいいんですよ
やり甲斐がある題材が欲しかっただけ
>>18 いや、仕事とは無関係ですよ 完全に趣味
って、明日も仕事なので 今日はコレくらいで では
$ 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だからフリーだよ
>>20 なぜDICOM規格の勉強をしたいのか説明しろ
あんな糞企画、仕事以外で使いたくなるわけ無い
>>1 ツール作りたいなら、別に規格の説明などしなくていいから、勝手に自分でやってくれ。
そんな規格よりXMLSchemaとか解析してくれ
やるならYAMLだな。 いいものが出来れば、社会に貢献できる。
ただいま戻りました あ、情報提供有難うございます。 是非参考にさせてもらいます
>>16 の続き
眠いのでこれだけ・・・
【タグ】
16ビット符号無し整数の「グループ番号」「要素番号」の対で構成され、
データ要素を一意に識別する(例外有り)為の目印。
規格書には(0x0020,0x1011)等と記載されたりします。
【値表現(VR)】
データ要素の値のデータタイプ及び書式を表す2バイトの文字列。
データ要素が持つ値は文字列だったり整数値だったりバイト列だったりしますが、
これらのデータタイプが何なのかを解析する際に使用されます。
DICOMファイルによっては、このVRが存在しない(暗黙的VR)ものもあります。
【値長さ】
値領域の長さ(バイト数)を示す16または32ビット
(VRが明示的か暗黙的かに依存する)符号無し整数。
値長さが未定義の場合、このフィールドには
0xFFFFFFFFが設定されます(未定義長さ)。
【値領域】
データ要素の値が格納されている領域。
値が整数値なのか文字列なのかはVRによって判断されます。
ブログでやれ
とりあえず物凄く大まかな構造を解説したところで、 これまでの解説をプログラムでまとめてみましょう int main(int argc, char* argv[]) { DicomFile DcmFile; // DICOMファイルを解析するクラスのインスタンス DcmFile.Open(argv[1]); DcmFile.ReadMetaInfo() ; DcmFile.ReadDataSet() ; return 0; }
DicomFileクラスはコメントにもある通り DICOMファイルを読み込み、データを解析するクラスです 直感的に見て分かると思いますが上のプログラムでは ・DICOMファイルをオープンする ・DICOMファイルメタ情報を読み込んで解析する ・DICOMデータ集合を読み込んで解析する の3つを行います 解析した結果をどうするかについてはまた別途考えます /* 「解析する」ならRead〜じゃなくてParse〜の方が良かったか・・・ */
トリップ付けました
今日はこれで寝ます では
なに?このキチガイ
はじめから隔離スレだし、他で暴れられるよりいいじゃね?
埋め
産め
うめ
うめ
ウメ
ウメ
埋め
梅
埋め
生め
埋め
うめ
うめ
埋め
埋め
ねむー 今日は無理だ・・・ なので続きは明日
もう来るな
いやー本業多忙で・・・
もうしばらく延期させてください
>>54 まぁそう言わず
二度と来るな
57 :
デフォルトの名無しさん :2006/08/31(木) 02:20:48
何だか分からないが本業がんばれ
DCOMの解析かと思った それだけは勘弁
おれも、前に作ったが、iso-2022系の文字をサポートしているためハングルとか中国語とか 文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。
>>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)
{
}
// 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; }
// メタ情報を解析する 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; }
色々と突っ込みどころ満載なのはご愛嬌。 今日はおちまい。
66 :
デフォルトの名無しさん :2006/09/16(土) 20:38:37
電波が足りん
67 :
デフォルトの名無しさん :2006/10/29(日) 00:10:00
なんで、こんなニッチな分野がスレになってんの?
68 :
sage :2007/03/05(月) 18:54:58
sage
69 :
エルモア :2007/04/06(金) 15:46:19
てすと
70 :
1 :2007/04/12(木) 22:49:38
半年振りに復活。色々やらされてました。
71 :
1 :2007/04/12(木) 23:51:19
久々に再開するかーと思ったけど、 どこかwebスペースを借りてやった方が良いですかね。。 書込行数も制限されちゃうし
復活おめ
73 :
1 :2007/04/15(日) 23:15:21
74 :
デフォルトの名無しさん :2007/08/22(水) 11:36:55
>73 ソースまだー?
すみません。。HDDがいきなり死亡して ソースが全部吹っ飛んでしまいました。。 もうしばらくお待ち下さい。。
期待age
77 :
デフォルトの名無しさん :2007/10/06(土) 20:29:16
あの、すいません。 バイトでちょうどDICOMに関することをやらされているので、このスレ見つけて感動しました。 ところで、ちょうどというか本当にちょうどあなたがサイトでやられているようなことをやってくれないかと支持されたのですが もしよろしければソースコード公開とかされないでしょうか?
これがゆとりというものか
79 :
デフォルトの名無しさん :2007/10/17(水) 23:25:42
埋め立て
80 :
77 :2007/10/19(金) 17:18:12
あっはっは(苦笑 いちおうリアルゆとり世代ではないのですが・・・ いちおう、ゆとりなりに努力した結果、一昨日に完成させました。 バイト先に出す成果物なのでソースコードが出せませんが・・・
81 :
デフォルトの名無しさん :2007/10/31(水) 20:27:58
でも、毎年追加変更あるんだよね。 俺がやったときは対応する文字コードが多すぎて面倒だったな。
82 :
デフォルトの名無しさん :2007/11/10(土) 17:30:33
libDicomとか無いのかな?
保守
>>85 試しにテスト画像みたいなのをSCION IMAGEで開こうとしたけど…
自分じゃやり方が良くわからん。
age
90 :
デフォルトの名無しさん :2008/08/22(金) 18:26:23
DICOM画像ってのは簡単に作れるもんなんでしょうか?
詳しくは知らんが画像そのものはTIFFとかだったような記憶がある。 画像とその付帯情報、医療用なので患者の情報とかが、 いろいろくっついていてポータブル形式というのにパッケージされている。 業界標準的なライブラリはあったと思う。
ビューワー程度だったら医学生が自作できる程度のものらしい。 特定分野の技術だから情報が仕入れにくいのがネックかもしれない。
名古屋大学のDICOMViewerでどれでも読めるわけじゃないよ タグ編集画面の説明は丁寧だけど SQタグとかは対応してないけどバイナリでエクスポートはできる
94 :
デフォルトの名無しさん :2008/08/25(月) 08:40:50
>ビューワー は沢山あるんだけど、 ファイル作成ライブラリが無いような気がするのは気のせい?
95 :
デフォルトの名無しさん :2008/09/03(水) 14:50:14
基本的にDICOMはJPEGに患者なの名前などのタグを入れ込めるようにしたものですね。 ただ、wikipediaにも同じ内容があるのですが、標準仕様が改定のたびに膨大になっていること。 あと、医療機器メーカーなんかがCTスキャンの画像を独自拡張した使用で吐き出したりすることがままあるので、きちんとすべてのDICOM画像を表示できるものは限られているみたいですよ。 ファイル作成ライブラリが無いのは基本的に医療機器側でDICOMデータとして吐き出してくれるから。 間違いあったらごめんなさい。
96 :
デフォルトの名無しさん :2008/09/03(水) 14:59:47
情報thx! 機器側の中の人はどうやって作られてるんでしょ?
97 :
デフォルトの名無しさん :2008/09/17(水) 00:42:55
DICOMファイルのフォーマットさえ理解できていれば、あとは規格書を見て黙々と必要な情報を出力するだけ。
厳密に運用するなら出力する内容と規格との適合性のチェックが大変なだけで、
ファイルフォーマット自体は
>>12-16 に挙げられているように単純なものですよ。
>>95 画像部分については、基本的に無圧縮データです。
ただ、何でも受け入れちゃうDICOMだから非可逆/可逆をあわせてJPEGも可能ですけど。
規格上の画像形式はPart.5を参照のこと。
また、画像の表示に関しては画像と通信の規格なんですから、基本的に表示できて当たり前です。
でないと、わざわざ規格を定めている意味がありません。
98 :
デフォルトの名無しさん :2008/11/23(日) 23:51:40
CTで吐き出されたDICOM画像のヘッダを自作のRAWやTIF画像のヘッダに載せ替え,デジタルファントムの作成を企てていますが,うまくいきません。 どうやればうまくいくんでしょう?
99 :
デフォルトの名無しさん :2009/02/28(土) 09:37:09
99
100 :
デフォルトの名無しさん :2009/02/28(土) 09:37:35
100
はいはい
102ならDICOM終焉w
>>19 仕様に自由度があってメーカーごとにグチャグチャ
そこらのDICOMファイルの構造をみまくったんだけど、 DICOMのファイルメタなんとか(すなわち、一番目のタグが0002のやつ)って、 Explicit VRで決まってるんだっけ? 俺の見たDICOMファイルって全部そうだったんだけど。 で、それって、仕様書でどっかに明記されてるっけ?
106 :
デフォルトの名無しさん :2009/07/07(火) 01:00:02
>>106 さんきゅー
そのページ精読してみますよ
108 :
デフォルトの名無しさん :2009/09/17(木) 22:30:00
age
101?
>>109 フリーのツールは探せばいろいろあるよ
専用ツール使わなくてもMATLABとかOctaveとかVTKで足りるんじゃない?
むかしMRIの造影シミュレーションやったことあるけどどれ使ったかわすれたゃった
研究で必要なら適当にそのへんでggって
>>111 つか、あの日本語訳作った奴の顔を見てみたいよな。
日本語訳がひどすぎて、結局英語版読まないとだめだ。
116 :
デフォルトの名無しさん :2010/04/30(金) 10:30:08
ちょっとスレ違いですみません。 OsiriXの最初から今に至るまでMAC版だけで、 Windows版なんて出た事ないですよね?
ないです。少なくとも自分は聞いたことがない。
その前身のosirisだけですよね、 色んなプラットフォームで出てたのは。 溜飲が下りました。 ありがとうございます。
なにこれ
地味にここ見てる人っているんだろうか
見てるよ
えええいたの?
いますがなにか?
どうやら自演が過ぎて分裂症ぎみのようだな。 いるはずがないのは分かっていたことだ。
このスレ立ってから4、5年経つのに120レス前後か… DICOMは興味持ってる人意外と多そうだが参考資料が殆ど英語なのがきつい 大体何から始めたらいいものやら
操作の仕方を覚えてしまったらいちいちこのスレ見なくなるからじゃね?
随分前の話だがOsiriXとiPad使って3DCT見ながら手術ってのがあったな OsiriXって事は全部自前で用意したんかなぁ… あそこまで行かなくても何か簡単なソフトくらい作ってみたいもんだ
それにしても、日本語版より英語原文読んだ方がわかりやすいって 一体どんな酷い翻訳プロジェクトだよな全く あれって多分、機械翻訳通しただけだろ?
>>125 高額な医療機器しかはきださないようなデータフォーマットに興味がある人間がそれほどいるとは思えない。
いたとしても医療関係者ぐらいでニーズは医療ミスを隠蔽する目的でのデータの改竄ぐらいじゃないか。
医者だったらソフトを買う金に不自由はしないだろう。
いや、自分で作りたいだろ
一般人はそもそもDICOMファイルを簡単に入手できないんだよ。 自分のMRI画像ですらコピーするだけで病院は金を取るのさ。
テスト画像転がってるよ
つか、シーメンス製機器端末が吐き出すDICOMが プライベートタグ使いまくりで泣けた おかげで他で撮ったDICOMがなかなかシーメンスの端末で読めない
けっこうどこでもプライベートタグ使ってるよね
あかの他人の医用画像なんか見て何が楽しいんだ?
所見とか、解析結果とか
俺、プログラマー兼医者だし
若いなぁ でもどっかの先生がソフト作って公開してるって見た事はあるな DICOMと関係ないけどAccess使ってダイナミクス?だったか 医師側からは既存のソフトウェアって物足りないんだろうか
LHAなんて有名すぎるだろ
吉崎さん内科部長だっけz
あと有名どころだと、芸夢狂人とかな。 たしかどこかの放射線科医だろ。 俺もこの人に影響受けて大学の放射線科に残っとるよ。
dat落ち寸前のスレッドで忍法 誰か、書き込みしてー
このスレ、俺がもーらった
書き込み放題!かっきこみ〜
結局まだだめなんかー
あーらよっと!
aaa
わん、つー、すりー、ふぉーっあ! アルロビュー
ここって本当におれ様しか使ってないんだな
あらよっと! こんな糞スレでも愛着が沸いてきたー 保守してやんよ 1000行くまでは俺様以外書き込みするんじゃねーぞ
このスレビリだったよ!あげといたよ!
155 :
sage :2011/06/12(日) 13:02:15.12
ファイルフォーマットよりも通信規格がわからん・・・。
157 :
デフォルトの名無しさん :2011/06/29(水) 00:21:20.81
>>135 モダリティメーカーでプログラム組んでた俺がぶっちゃけると、DICOMタグが多すぎて、
全部把握できずに、とりあえずプライベートタグで対応しまくり。
あとから標準タグでも行けたと知っても時既に遅しってパターンがほとんど。
158 :
デフォルトの名無しさん :2011/06/29(水) 00:24:30.88
159 :
デフォルトの名無しさん :2011/06/29(水) 07:14:31.14
162 :
デフォルトの名無しさん :2011/07/01(金) 23:55:59.78
163 :
デフォルトの名無しさん :2011/07/04(月) 00:37:50.03
164 :
デフォルトの名無しさん :2011/07/04(月) 13:50:26.37
>>160 TOTOKU (東京特殊電線) - サブピクセル製品を真っ先に出したが。
が。の後が気になるw
165 :
デフォルトの名無しさん :2011/07/05(火) 00:29:46.47
対応ソフトがない!とか
ぽつぽつあるだろ
167 :
デフォルトの名無しさん :2011/07/09(土) 21:56:23.12
エンディアン判別ってどうやるの?
struct _endian{ union{ short s; char c[2]; } u; } endian_test = {0x55AA}; bool is_little_endian = (endian_test.u.c[0] == 0x55);
169 :
デフォルトの名無しさん :2011/07/10(日) 12:02:01.49
いやDICOMファイルの
170 :
デフォルトの名無しさん :2011/07/12(火) 09:53:05.55
171 :
デフォルトの名無しさん :2011/07/12(火) 10:09:00.59
172 :
デフォルトの名無しさん :2011/09/01(木) 14:53:57.14
173 :
デフォルトの名無しさん :2011/11/28(月) 18:51:51.00
DICOM通信意味不明すぎるだろ 日本語の噛み砕いた資料ないの?
>>173 そうなのか?
OSIの基本を知ってさえいれば、難易度の低いAP層プロトコルだろ
量が大きいから全体を理解/把握するのは大変かもしれないけど、
それは技術的な問題では無いし、意味不明でもない
知ってれば作れるって 訳でもないけどね
そりゃそうだw HTTPのプロトコル仕様を知っている人は多いと思うけど、 実際に実装できるプログラマは少ない たとえ作れる人でも、普通は既存のライブラリを利用する
DICOM通信は、PDU仕様がLDAPやX.509みたいに OSI標準のASN.1で定義されていれば専用のコンパイラがあるから 少しは実装が楽になったと思うけど、 独自の仕様で定義されている点が残念なところ
178 :
デフォルトの名無しさん :2011/11/30(水) 14:43:19.04
一番の問題点は仕様がアホみたいに巨大かつ肥大化を続けてることだろう
HTTP実装はまた流行るよ。 VPSが安くなってきたから。 レンタルサーバが安くなってくると同時にLinuxが流行ったのと同じ感じ。
180 :
デフォルトの名無しさん :2011/12/27(火) 11:38:41.63
pdfがでか過ぎるんだよ
182 :
デフォルトの名無しさん :2012/09/11(火) 10:46:38.80
長文pdf作るより標準ライブラリ作って配布した方がいいと思うの・・・
仕様が膨大&複雑すぎて、肝心のデータの受け渡しでトラブル起こりまくりだよね。DICOMって。 ばかげてる。
185 :
デフォルトの名無しさん :2014/07/11(金) 10:14:43.91 ID:mvmx812y
3Dプリンタで模擬の臓器や骨を作りたいんだけども、DICOMって座標情報に対応してる? voxelから無理矢理変換して、さらに影とかを修正するしか無いのかな・・・?
零点をどこに合わせるかは撮影者の腕次第だが スライス間隔とピクセルの大きさがタグに書かれているから そこから座標を構築できる 詳しくはPDF読め 注意点 撮影方法によってはスライスが重なっていたり飛び飛びになっている CTではthin sliceデータを自分で再構成するより モダリティで再構成したほうがノイズの少ないものができる機種がある (仕掛けは非公開だが内部に持っているraw dataを利用している?)
>>184 他の規格でもそうだが
情報交換することを優先するなら
解釈の差が生まれないように規格を設計すべきだし
平均的労働者が短時間で理解できる仕様を構成すべきなんだが
実際に起きているトラブルはそんなところじゃなくて
あり得る可能性の重みを無視して実装を省略した結果起きている
ことがまれによくある
セントリシティが吐いたデータを他で読めないのとかは
そんな感じじゃないか?
188 :
デフォルトの名無しさん :2014/07/14(月) 11:27:07.46 ID:dHoXNDCZ
>>186 いちおー座標による3Dにも対応してるのね、ありがとう
PDFが厚すぎて、読む気にもなれんのよ・・・w
結局EXIFみたいなファイル、ディレクトリ構造なんだからまず基本データ型のデコードメソッド作って その構造エントリ名含めて丸ごとXMLに吐き出させて外部ツールで解析、統計分析等したらいいのに
どこかにわかりやすいDICOM講座とかは無い物か