探検
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スペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし
2007/04/13(金) 00:06:08
復活おめ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【日本人の旅行離れ】国内旅行すら行けなくなった……オーバーツーリズムだけじゃない 旅行者減少の異常事態 [ぐれ★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★12 [蚤の市★]
- “ひとり焼肉”でおなじみ「焼肉ライク」が閉店ラッシュ。なぜ「コスパが悪い」と言われてしまうのか [Gecko★]
- 女性天皇「賛成」69%、将来の皇位継承「不安」68%…読売世論調査 [蚤の市★]
- 中国の渡航自粛要請1カ月 大阪の観光バス予約ゼロ、東北にも波及 [蚤の市★]
- 女性のハイヒールが消滅の危機!「今いる職人がいなくなったら終わってしまう」老舗メーカー、歌姫の引退が痛手とも [牛丼★]
- なぜ、ネトウヨは例外なく狂っているのか? [805596214]
- これから生まれる子どもたちはAIが友達なんて当たり前になるんだろうな
- 女だが
- 🏡おい!返事しろ︎︎!知的障害者!
- 魔法先生ネギまでシコってたお前らに戻ってよ
- 高市、メガソーラー廃止。環境破壊が社会問題化 [792147417]
