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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2006/08/21(月) 21:49:44
さっそくはじめましょー
2006/08/22(火) 00:45:56
って、明日も仕事なので
今日はコレくらいで
では
2006/08/22(火) 00:49:46
$ 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だからフリーだよ
2006/08/22(火) 11:33:11
DCMTK使えよ。
ttp://dicom.offis.de/dcmtk.php.en

スレ主はちゃんと調べもせずに「ない」と決め付けている。
2006/08/22(火) 11:53:11
>>20
なぜDICOM規格の勉強をしたいのか説明しろ
2006/08/22(火) 12:10:17
あんな糞企画、仕事以外で使いたくなるわけ無い
2006/08/22(火) 12:16:51
>>1
ツール作りたいなら、別に規格の説明などしなくていいから、勝手に自分でやってくれ。
2006/08/22(火) 19:42:12
そんな規格よりXMLSchemaとか解析してくれ
2006/08/22(火) 19:45:16
やるならYAMLだな。
いいものが出来れば、社会に貢献できる。
2006/08/22(火) 23:33:35
ただいま戻りました

あ、情報提供有難うございます。
是非参考にさせてもらいます
2006/08/23(水) 00:17:11
>>16の続き
眠いのでこれだけ・・・

【タグ】
16ビット符号無し整数の「グループ番号」「要素番号」の対で構成され、
データ要素を一意に識別する(例外有り)為の目印。
規格書には(0x0020,0x1011)等と記載されたりします。

【値表現(VR)】
データ要素の値のデータタイプ及び書式を表す2バイトの文字列。
データ要素が持つ値は文字列だったり整数値だったりバイト列だったりしますが、
これらのデータタイプが何なのかを解析する際に使用されます。
DICOMファイルによっては、このVRが存在しない(暗黙的VR)ものもあります。

【値長さ】
値領域の長さ(バイト数)を示す16または32ビット
(VRが明示的か暗黙的かに依存する)符号無し整数。
値長さが未定義の場合、このフィールドには
0xFFFFFFFFが設定されます(未定義長さ)。

【値領域】
データ要素の値が格納されている領域。
値が整数値なのか文字列なのかはVRによって判断されます。
2006/08/23(水) 00:40:58
ブログでやれ
2006/08/24(木) 00:32:06
とりあえず物凄く大まかな構造を解説したところで、
これまでの解説をプログラムでまとめてみましょう

int main(int argc, char* argv[])
{
  DicomFile DcmFile; // DICOMファイルを解析するクラスのインスタンス

  DcmFile.Open(argv[1]);

  DcmFile.ReadMetaInfo() ;

  DcmFile.ReadDataSet() ;

  return 0;
}
2006/08/24(木) 00:47:21
DicomFileクラスはコメントにもある通り
DICOMファイルを読み込み、データを解析するクラスです
直感的に見て分かると思いますが上のプログラムでは

・DICOMファイルをオープンする
・DICOMファイルメタ情報を読み込んで解析する
・DICOMデータ集合を読み込んで解析する

の3つを行います
解析した結果をどうするかについてはまた別途考えます

/* 「解析する」ならRead〜じゃなくてParse〜の方が良かったか・・・ */
2006/08/24(木) 00:49:44
トリップ付けました
2006/08/24(木) 00:50:27
今日はこれで寝ます では
2006/08/24(木) 01:25:55
なに?このキチガイ
2006/08/24(木) 03:20:00
はじめから隔離スレだし、他で暴れられるよりいいじゃね?
2006/08/24(木) 17:24:54
埋め
2006/08/24(木) 17:27:04
産め
2006/08/24(木) 17:36:28
うめ
2006/08/24(木) 19:31:14
うめ
2006/08/24(木) 19:36:53
ウメ
2006/08/24(木) 19:38:25
ウメ
2006/08/24(木) 20:03:42
埋め
2006/08/24(木) 21:07:33
2006/08/24(木) 21:54:20
埋め
2006/08/24(木) 22:00:56
生め
2006/08/24(木) 22:08:25
埋め
2006/08/24(木) 22:11:01
うめ
2006/08/24(木) 22:17:09
うめ
2006/08/24(木) 22:35:59
埋め
2006/08/25(金) 00:39:51
埋め
2006/08/25(金) 02:53:29
ねむー 今日は無理だ・・・
なので続きは明日
2006/08/25(金) 19:19:27
もう来るな
2006/08/29(火) 23:31:18
いやー本業多忙で・・・
もうしばらく延期させてください

>>54
まぁそう言わず
2006/08/30(水) 22:25:37
二度と来るな
57デフォルトの名無しさん
垢版 |
2006/08/31(木) 02:20:48
何だか分からないが本業がんばれ
2006/08/31(木) 03:26:55
これですか? わかりません :D
ttp://www.youtube.com/watch?v=a6ErJVffY6E&mode=related&search=
2006/08/31(木) 03:36:32
DCOMの解析かと思った
それだけは勘弁
2006/09/02(土) 13:25:59
おれも、前に作ったが、iso-2022系の文字をサポートしているためハングルとか中国語とか
文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。
2006/09/05(火) 01:49:25
>>57
本業はMFC屋さんです
2006/09/05(火) 01:58:33
>>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)
 {
 }
2006/09/05(火) 02:00:15
 // 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;
 }
2006/09/05(火) 02:00:49
 // メタ情報を解析する
 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;
}
2006/09/05(火) 02:07:01
色々と突っ込みどころ満載なのはご愛嬌。
今日はおちまい。
66デフォルトの名無しさん
垢版 |
2006/09/16(土) 20:38:37
電波が足りん
67デフォルトの名無しさん
垢版 |
2006/10/29(日) 00:10:00
なんで、こんなニッチな分野がスレになってんの?
68sage
垢版 |
2007/03/05(月) 18:54:58
sage
69エルモア
垢版 |
2007/04/06(金) 15:46:19
てすと
701
垢版 |
2007/04/12(木) 22:49:38
半年振りに復活。色々やらされてました。
711
垢版 |
2007/04/12(木) 23:51:19
久々に再開するかーと思ったけど、
どこかwebスペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし
2007/04/13(金) 00:06:08
復活おめ
731
垢版 |
2007/04/15(日) 23:15:21
>>72
ありがとうございます

web借りました。
今後はこっちで細々やっていきます。
板汚しすみませんでした。
http://s1.muryo-de.etowns.net/~programming/
74デフォルトの名無しさん
垢版 |
2007/08/22(水) 11:36:55
>73
ソースまだー?
2007/08/30(木) 01:43:33
すみません。。HDDがいきなり死亡して
ソースが全部吹っ飛んでしまいました。。

もうしばらくお待ち下さい。。
2007/09/14(金) 17:09:49
期待age
77デフォルトの名無しさん
垢版 |
2007/10/06(土) 20:29:16
あの、すいません。
バイトでちょうどDICOMに関することをやらされているので、このスレ見つけて感動しました。

ところで、ちょうどというか本当にちょうどあなたがサイトでやられているようなことをやってくれないかと支持されたのですが
もしよろしければソースコード公開とかされないでしょうか?
2007/10/07(日) 21:01:40
これがゆとりというものか
79デフォルトの名無しさん
垢版 |
2007/10/17(水) 23:25:42
埋め立て
8077
垢版 |
2007/10/19(金) 17:18:12
あっはっは(苦笑
いちおうリアルゆとり世代ではないのですが・・・

いちおう、ゆとりなりに努力した結果、一昨日に完成させました。
バイト先に出す成果物なのでソースコードが出せませんが・・・
81デフォルトの名無しさん
垢版 |
2007/10/31(水) 20:27:58
でも、毎年追加変更あるんだよね。
俺がやったときは対応する文字コードが多すぎて面倒だったな。
82デフォルトの名無しさん
垢版 |
2007/11/10(土) 17:30:33
ところで
http://www.jfcr.or.jp/DICOM/dicom_draft-j.html
とかの、DICOM仕様書の日本語訳とかが消えているっぽいんだけど
他に日本語約手に入るところ知らないかな?
この分量の英語読むのは正直辛い
2007/11/10(土) 17:35:31
libDicomとか無いのかな?
2008/01/12(土) 04:42:33
保守
2008/03/25(火) 12:31:46
http://www.sim.hcuge.ch/papyrus/01_Papyrus_Presentation_EN.htm
DICOM画像読み込みライブラリ
2008/03/25(火) 12:32:59
>>85
なんぞこれ
2008/03/25(火) 13:05:48
CベースのDICOM画像読み込みライブラリ、Windows、Mac、Linux対応
DICOMの通信規格部分は非対応。
Mac用のOsirisXなんかに使われているのが実績
http://japanese.osstrans.net/software/osirix.html
画像の読み出しだけなら十分に便利。
2008/03/26(水) 20:45:22
>>85
試しにテスト画像みたいなのをSCION IMAGEで開こうとしたけど…
自分じゃやり方が良くわからん。
2008/03/26(水) 21:27:47
age
90デフォルトの名無しさん
垢版 |
2008/08/22(金) 18:26:23
DICOM画像ってのは簡単に作れるもんなんでしょうか?
2008/08/22(金) 18:35:35
詳しくは知らんが画像そのものはTIFFとかだったような記憶がある。
画像とその付帯情報、医療用なので患者の情報とかが、
いろいろくっついていてポータブル形式というのにパッケージされている。
業界標準的なライブラリはあったと思う。
2008/08/22(金) 18:38:01
ビューワー程度だったら医学生が自作できる程度のものらしい。
特定分野の技術だから情報が仕入れにくいのがネックかもしれない。
2008/08/23(土) 14:44:42
名古屋大学の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
2009/04/19(日) 02:07:41
はいはい
2009/04/20(月) 16:08:39
102ならDICOM終焉w
2009/05/25(月) 03:17:32
意外とライブラリ多いんだな
ttp://mist.suenaga.cse.nagoya-u.ac.jp/document/group__dicom__group.html

どれ使えばいいんだかわからん
2009/07/05(日) 23:33:35
>>19
仕様に自由度があってメーカーごとにグチャグチャ
2009/07/05(日) 23:53:08
そこらのDICOMファイルの構造をみまくったんだけど、
DICOMのファイルメタなんとか(すなわち、一番目のタグが0002のやつ)って、
Explicit VRで決まってるんだっけ?
俺の見たDICOMファイルって全部そうだったんだけど。


で、それって、仕様書でどっかに明記されてるっけ?
106デフォルトの名無しさん
垢版 |
2009/07/07(火) 01:00:02
>105

ftp://medical.nema.org/medical/Dicom/2008/08_10pu.pdf

22ページに書いてるよ

the File Meta Information shall be encoded using
the Explicit VR Little Endian Transfer Syntax (UID=1.2.840.10008.1.2.1) as defined in DICOM PS 3.5.
2009/07/07(火) 01:54:11
>>106
さんきゅー
そのページ精読してみますよ
108デフォルトの名無しさん
垢版 |
2009/09/17(木) 22:30:00
age
2010/02/10(水) 13:40:42
ここの「プログラミングの部屋」に、DICOMに関する記述がありますた。
ttp://www7.plala.or.jp/nekogrammer/
ただ、C++ではなく、Cでビュワーを作っているんですよね。
プログラムもあんまりきれいではないようだし、どうなんでしょうかね?
2010/02/21(日) 16:21:51
101?
2010/02/21(日) 19:52:31
翻訳
http://www.jfcr.or.jp/DICOM/dicom_draft-j.html
癌研は死んでるが慶応は生きてる
2010/02/21(日) 19:56:34
こんなのもあった
便利になったな
http://www.jira-net.or.jp/dicom/index.html
2010/02/21(日) 20:11:51
>>109
フリーのツールは探せばいろいろあるよ
専用ツール使わなくてもMATLABとかOctaveとかVTKで足りるんじゃない?

むかしMRIの造影シミュレーションやったことあるけどどれ使ったかわすれたゃった
研究で必要なら適当にそのへんでggって
2010/02/22(月) 00:15:10
>>111
つか、あの日本語訳作った奴の顔を見てみたいよな。
日本語訳がひどすぎて、結局英語版読まないとだめだ。
2010/02/24(水) 18:14:18
NEMAのサイトで落とせるのが正式な規格書って聞いたんだが、
無くなってるだよね。

ttp://www.dclunie.com/dicom-status/status.html
ここにある奴が正式版って事でいいのか?
(結局はDICOM Homepageの奴だが)
116デフォルトの名無しさん
垢版 |
2010/04/30(金) 10:30:08
ちょっとスレ違いですみません。

OsiriXの最初から今に至るまでMAC版だけで、
Windows版なんて出た事ないですよね?
2010/04/30(金) 15:04:17
ないです。少なくとも自分は聞いたことがない。
2010/04/30(金) 16:43:50
その前身のosirisだけですよね、
色んなプラットフォームで出てたのは。
溜飲が下りました。
ありがとうございます。
2010/12/23(木) 15:32:12
なにこれ
2011/01/02(日) 01:27:03
地味にここ見てる人っているんだろうか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況