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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2006/08/21(月) 21:49:44
さっそくはじめましょー
2006/08/21(月) 21:51:32
DICOMの紹介をどうぞ
2006/08/21(月) 21:56:40
あ〜、あの電車男のオープニングの元ネタの
2006/08/21(月) 21:59:50
>>2
DICOMとは

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

>>3
DAICON
2006/08/21(月) 22:15:52
参照URLも貼らずに(ry
2006/08/21(月) 22:20:21
参考URL:

DICOM日本語Webページ
http://www.jfcr.or.jp/DICOM/

本家
http://medical.nema.org/
2006/08/21(月) 22:25:54
規格が決まってるなら別に解析する必要なくね?
2006/08/21(月) 22:35:46
DICOMファイルのサンプル(グロ画像ではありません)
http://149.142.216.30/DICOM_FILES/DICOMfilesIndex.html

>>7
フリーのDICOMファイル解析ツールってのが
Macを除いて殆ど無いので、ショボいのでもいいから作ってみようかと
2006/08/21(月) 22:46:19
ちなみにMacではApple社がMac OS X用に開発した
無料DICOMビューア「OsiriX」(オシリックス?)というのがあります 凄すぎ
http://www.apple.com/jp/medical/osirix/

ココまでのモノを作り上げるのは到底不可能ですが、
できるトコまでやってみたいと思っとります
2006/08/21(月) 22:47:07
「解析ツール」が何を指しているのかよくわからんが、ビューア系なら色々あるぞ。
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

洋物もいくつか使ったことある。
2006/08/21(月) 22:56:43
>>10
情報Thx!
ただ、ソースコード公開してるトコは見た事なかったので、
自己の勉強の意味でも作ってみよーかなと

「解析ツール」って言ったのは
DICOMヘッダ情報解析&画像閲覧できる
Appを指してます
2006/08/21(月) 23:07:29
ほんじゃそろそろDICOMファイルの
詳細な構造から行ってみます

■DICOMファイルは大きく分けて以下の構造になってます
┌─────────────
|DICOMファイルメタ情報
├─────────────
|DICOMデータ集合
└─────────────

まずDICOMファイルメタ情報から見ていきます
2006/08/21(月) 23:47:00
【DICOMファイルメタ情報】
DICOMファイルを構成する為の
ヘッダ情報みたいなものが入っています

具体的には以下構成になっています

■DICOMファイルメタ情報の構造
┌─────────────
|ファイルプリアンブル
├─────────────
|DICOMプリフィックス
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|・・・・・・・・・
├─────────────
|ファイルメタ要素
└─────────────
2006/08/22(火) 00:05:30
【ファイルプリアンブル】
DICOMファイル先頭にある固定128バイト。
アプリケーション特定の用途により使用できるようになっています。
使用しない場合は、全てのバイトに0x00を設定するよう決められています。

【DICOMプリフィックス】
4バイトの文字列。「DICM」固定。
このファイルがDICOMファイルかどうか判断する為に使用されます。

【ファイルメタ要素】
DICOMファイルのヘッダ情報を表す項目。
それぞれ『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。

※詳細は後述。
2006/08/22(火) 00:30:03
>>1はなぜDICOMのファイルを解析したいのか、その動機を具体的に書け。
2006/08/22(火) 00:30:27
詳細な解説は飛ばして、次にDICOMデータ集合に行きます

【DICOMデータ集合】
DICOMファイルの最も重要な部分。
・画像情報(画像の幅、高さ.etc)
・患者情報(患者名、年齢、住所.etc)
等、ありとあらゆるデータが詰め込まれています。

■DICOMデータ集合の構造
┌─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|・・・・・・・・・
├─────────────
|データ要素
└─────────────

【データ要素】
DICOMファイルの各データを表す項目。
それぞれ《基本的に》『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。

※詳細は後述。
2006/08/22(火) 00:30:56
解析する「ソフトを作りたい」動機じゃないぞ。「解析したい動機」だ。
2006/08/22(火) 00:32:07
仕事で必要になったんだが、金が無いので、無料で馬鹿どもを集めて作らせようという魂胆でしょ。
2006/08/22(火) 00:34:54
仕様通りに実装して終了

の気がするんだけど

仕様が巨大らしいから面倒なのかな
2006/08/22(火) 00:44:01
>>17
・C++のお勉強
・DICOM規格のお勉強(最初はDICOM解説サイト作ろうとしたけどメンドいのでやめた)
ってトコかな

別にDICOMじゃなくてもいいんですよ
やり甲斐がある題材が欲しかっただけ

>>18
いや、仕事とは無関係ですよ 完全に趣味
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画像読み込みライブラリ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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