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
2006/08/21(月) 22:15:52
参照URLも貼らずに(ry
2006/08/21(月) 22:20:21
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を除いて殆ど無いので、ショボいのでもいいから作ってみようかと
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/
ココまでのモノを作り上げるのは到底不可能ですが、
できるトコまでやってみたいと思っとります
無料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
洋物もいくつか使ったことある。
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を指してます
情報Thx!
ただ、ソースコード公開してるトコは見た事なかったので、
自己の勉強の意味でも作ってみよーかなと
「解析ツール」って言ったのは
DICOMヘッダ情報解析&画像閲覧できる
Appを指してます
2006/08/21(月) 23:07:29
ほんじゃそろそろDICOMファイルの
詳細な構造から行ってみます
■DICOMファイルは大きく分けて以下の構造になってます
┌─────────────
|DICOMファイルメタ情報
├─────────────
|DICOMデータ集合
└─────────────
まずDICOMファイルメタ情報から見ていきます
詳細な構造から行ってみます
■DICOMファイルは大きく分けて以下の構造になってます
┌─────────────
|DICOMファイルメタ情報
├─────────────
|DICOMデータ集合
└─────────────
まずDICOMファイルメタ情報から見ていきます
2006/08/21(月) 23:47:00
【DICOMファイルメタ情報】
DICOMファイルを構成する為の
ヘッダ情報みたいなものが入っています
具体的には以下構成になっています
■DICOMファイルメタ情報の構造
┌─────────────
|ファイルプリアンブル
├─────────────
|DICOMプリフィックス
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|・・・・・・・・・
├─────────────
|ファイルメタ要素
└─────────────
DICOMファイルを構成する為の
ヘッダ情報みたいなものが入っています
具体的には以下構成になっています
■DICOMファイルメタ情報の構造
┌─────────────
|ファイルプリアンブル
├─────────────
|DICOMプリフィックス
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|・・・・・・・・・
├─────────────
|ファイルメタ要素
└─────────────
2006/08/22(火) 00:05:30
【ファイルプリアンブル】
DICOMファイル先頭にある固定128バイト。
アプリケーション特定の用途により使用できるようになっています。
使用しない場合は、全てのバイトに0x00を設定するよう決められています。
【DICOMプリフィックス】
4バイトの文字列。「DICM」固定。
このファイルがDICOMファイルかどうか判断する為に使用されます。
【ファイルメタ要素】
DICOMファイルのヘッダ情報を表す項目。
それぞれ『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。
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)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。
【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
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だからフリーだよ
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
スレ主はちゃんと調べもせずに「ない」と決め付けている。
ttp://dicom.offis.de/dcmtk.php.en
スレ主はちゃんと調べもせずに「ない」と決め付けている。
2006/08/22(火) 11:53:11
>>20
なぜDICOM規格の勉強をしたいのか説明しろ
なぜ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によって判断されます。
眠いのでこれだけ・・・
【タグ】
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;
}
これまでの解説をプログラムでまとめてみましょう
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〜の方が良かったか・・・ */
DICOMファイルを読み込み、データを解析するクラスです
直感的に見て分かると思いますが上のプログラムでは
・DICOMファイルをオープンする
・DICOMファイルメタ情報を読み込んで解析する
・DICOMデータ集合を読み込んで解析する
の3つを行います
解析した結果をどうするかについてはまた別途考えます
/* 「解析する」ならRead〜じゃなくてParse〜の方が良かったか・・・ */
351 ◆6MkREOQ1to
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
埋め
531 ◆6MkREOQ1to
2006/08/25(金) 02:53:29 ねむー 今日は無理だ・・・
なので続きは明日
なので続きは明日
2006/08/25(金) 19:19:27
もう来るな
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=
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系の文字をサポートしているためハングルとか中国語とか
文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。
文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。
621 ◆6MkREOQ1to
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)
{
}
まずは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)
{
}
631 ◆6MkREOQ1to
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;
}
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;
}
641 ◆6MkREOQ1to
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;
}
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;
}
651 ◆6MkREOQ1to
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スペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし
どこかwebスペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- れいわ議員「母親はね、子どもを戦争に行かせるために産んだんじゃないんだよ」 高市総理に“10秒回答”迫り、残り5分は“独壇場”★3 [♪♪♪★]
- BreakingDown選手がくも膜下出血、瓜田純士、平手打ちを行った江口響は「もう格闘技も辞めます。責任取りたいです』とまで言ってきてる」 [muffin★]
- 中国国防省が再反論 SNSで公開した音声とは“別の通報”で日本に訓練の時間や海域を通報したと主張★3 [夜のけいちゃん★]
- 資さんうどんが「PayPay」の取り扱いを停止 他のキャッシュレス決済は引き続き利用可能 [少考さん★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★7 [お断り★]
- 【令和】「ゲーム機にスペックは必要かどうか」議論が白熱 ユーザーが実際に求めているものは? [王子★]
- 障害者だからカレーの作り方が分からない
- おまいらってセックスしないの?
- あのちゃんってマン毛処理してそうよな
- 【速報】高市早苗、文春砲wwwwwwwwwwwwwwwwwwwwwwwwwwwww [339035499]
- 息子の名前を「業~悲しみの連鎖、人は過ちを繰り返す~」にしようと思うんだが
- プロレスラーってロープに振ると走って戻ってくるけど
