C++によるDICOMファイル解析
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2006/08/21(月) 21:49:44 さっそくはじめましょー
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
復活おめ
731
2007/04/15(日) 23:15:21 >>72
ありがとうございます
web借りました。
今後はこっちで細々やっていきます。
板汚しすみませんでした。
http://s1.muryo-de.etowns.net/~programming/
ありがとうございます
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に関することをやらされているので、このスレ見つけて感動しました。
ところで、ちょうどというか本当にちょうどあなたがサイトでやられているようなことをやってくれないかと支持されたのですが
もしよろしければソースコード公開とかされないでしょうか?
バイトでちょうど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仕様書の日本語訳とかが消えているっぽいんだけど
他に日本語約手に入るところ知らないかな?
この分量の英語読むのは正直辛い
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画像読み込みライブラリ
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
画像の読み出しだけなら十分に便利。
DICOMの通信規格部分は非対応。
Mac用のOsirisXなんかに使われているのが実績
http://japanese.osstrans.net/software/osirix.html
画像の読み出しだけなら十分に便利。
2008/03/26(水) 20:45:22
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タグとかは対応してないけどバイナリでエクスポートはできる
タグ編集画面の説明は丁寧だけど
SQタグとかは対応してないけどバイナリでエクスポートはできる
94デフォルトの名無しさん
2008/08/25(月) 08:40:50 >ビューワー
は沢山あるんだけど、
ファイル作成ライブラリが無いような気がするのは気のせい?
は沢山あるんだけど、
ファイル作成ライブラリが無いような気がするのは気のせい?
95デフォルトの名無しさん
2008/09/03(水) 14:50:14 基本的にDICOMはJPEGに患者なの名前などのタグを入れ込めるようにしたものですね。
ただ、wikipediaにも同じ内容があるのですが、標準仕様が改定のたびに膨大になっていること。
あと、医療機器メーカーなんかがCTスキャンの画像を独自拡張した使用で吐き出したりすることがままあるので、きちんとすべてのDICOM画像を表示できるものは限られているみたいですよ。
ファイル作成ライブラリが無いのは基本的に医療機器側でDICOMデータとして吐き出してくれるから。
間違いあったらごめんなさい。
ただ、wikipediaにも同じ内容があるのですが、標準仕様が改定のたびに膨大になっていること。
あと、医療機器メーカーなんかがCTスキャンの画像を独自拡張した使用で吐き出したりすることがままあるので、きちんとすべてのDICOM画像を表示できるものは限られているみたいですよ。
ファイル作成ライブラリが無いのは基本的に医療機器側でDICOMデータとして吐き出してくれるから。
間違いあったらごめんなさい。
96デフォルトの名無しさん
2008/09/03(水) 14:59:47 情報thx!
機器側の中の人はどうやって作られてるんでしょ?
機器側の中の人はどうやって作られてるんでしょ?
97デフォルトの名無しさん
2008/09/17(水) 00:42:5598デフォルトの名無しさん
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
101デフォルトの名無しさん
2009/04/19(日) 02:07:41 はいはい
102デフォルトの名無しさん
2009/04/20(月) 16:08:39 102ならDICOM終焉w
103デフォルトの名無しさん
2009/05/25(月) 03:17:32 意外とライブラリ多いんだな
ttp://mist.suenaga.cse.nagoya-u.ac.jp/document/group__dicom__group.html
どれ使えばいいんだかわからん
ttp://mist.suenaga.cse.nagoya-u.ac.jp/document/group__dicom__group.html
どれ使えばいいんだかわからん
104デフォルトの名無しさん
2009/07/05(日) 23:33:35 >>19
仕様に自由度があってメーカーごとにグチャグチャ
仕様に自由度があってメーカーごとにグチャグチャ
105デフォルトの名無しさん
2009/07/05(日) 23:53:08 そこらのDICOMファイルの構造をみまくったんだけど、
DICOMのファイルメタなんとか(すなわち、一番目のタグが0002のやつ)って、
Explicit VRで決まってるんだっけ?
俺の見た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.
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.
107デフォルトの名無しさん
2009/07/07(火) 01:54:11108デフォルトの名無しさん
2009/09/17(木) 22:30:00 age
109デフォルトの名無しさん
2010/02/10(水) 13:40:42 ここの「プログラミングの部屋」に、DICOMに関する記述がありますた。
ttp://www7.plala.or.jp/nekogrammer/
ただ、C++ではなく、Cでビュワーを作っているんですよね。
プログラムもあんまりきれいではないようだし、どうなんでしょうかね?
ttp://www7.plala.or.jp/nekogrammer/
ただ、C++ではなく、Cでビュワーを作っているんですよね。
プログラムもあんまりきれいではないようだし、どうなんでしょうかね?
110デフォルトの名無しさん
2010/02/21(日) 16:21:51 101?
111デフォルトの名無しさん
2010/02/21(日) 19:52:31112デフォルトの名無しさん
2010/02/21(日) 19:56:34113デフォルトの名無しさん
2010/02/21(日) 20:11:51 >>109
フリーのツールは探せばいろいろあるよ
専用ツール使わなくてもMATLABとかOctaveとかVTKで足りるんじゃない?
むかしMRIの造影シミュレーションやったことあるけどどれ使ったかわすれたゃった
研究で必要なら適当にそのへんでggって
フリーのツールは探せばいろいろあるよ
専用ツール使わなくてもMATLABとかOctaveとかVTKで足りるんじゃない?
むかしMRIの造影シミュレーションやったことあるけどどれ使ったかわすれたゃった
研究で必要なら適当にそのへんでggって
114デフォルトの名無しさん
2010/02/22(月) 00:15:10115デフォルトの名無しさん
2010/02/24(水) 18:14:18 NEMAのサイトで落とせるのが正式な規格書って聞いたんだが、
無くなってるだよね。
ttp://www.dclunie.com/dicom-status/status.html
ここにある奴が正式版って事でいいのか?
(結局はDICOM Homepageの奴だが)
無くなってるだよね。
ttp://www.dclunie.com/dicom-status/status.html
ここにある奴が正式版って事でいいのか?
(結局はDICOM Homepageの奴だが)
116デフォルトの名無しさん
2010/04/30(金) 10:30:08 ちょっとスレ違いですみません。
OsiriXの最初から今に至るまでMAC版だけで、
Windows版なんて出た事ないですよね?
OsiriXの最初から今に至るまでMAC版だけで、
Windows版なんて出た事ないですよね?
117デフォルトの名無しさん
2010/04/30(金) 15:04:17 ないです。少なくとも自分は聞いたことがない。
118デフォルトの名無しさん
2010/04/30(金) 16:43:50 その前身のosirisだけですよね、
色んなプラットフォームで出てたのは。
溜飲が下りました。
ありがとうございます。
色んなプラットフォームで出てたのは。
溜飲が下りました。
ありがとうございます。
119デフォルトの名無しさん
2010/12/23(木) 15:32:12 なにこれ
2011/01/02(日) 01:27:03
地味にここ見てる人っているんだろうか
121デフォルトの名無しさん
2011/01/02(日) 10:57:30 見てるよ
122デフォルトの名無しさん
2011/01/02(日) 18:48:43 えええいたの?
123デフォルトの名無しさん
2011/01/02(日) 22:09:40 いますがなにか?
124デフォルトの名無しさん
2011/01/03(月) 08:37:29 どうやら自演が過ぎて分裂症ぎみのようだな。
いるはずがないのは分かっていたことだ。
いるはずがないのは分かっていたことだ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【東京】赤坂サウナ火事2人死亡 サウナ室のドアノブ外れ閉じ込められた可能性 ★8 [nita★]
- 〝魔の三角地帯〟バミューダ・トライアングルの謎解明か 地下に岩石の巨大な構造物 | 東スポ [少考さん★]
- EU、エンジン車禁止見直しへ 35年以降も条件付き販売容認―日本勢に追い風 [蚤の市★]
- 中国国防省が再反論 SNSで公開した音声とは“別の通報”で日本に訓練の時間や海域を通報したと主張★3 [夜のけいちゃん★]
- 【ドイツ】メルツ独首相「正しい措置」「技術革新と柔軟性が必要」 EUのエンジン車禁止撤回を歓迎 [少考さん★]
- 資さんうどんが「PayPay」の取り扱いを停止 他のキャッシュレス決済は引き続き利用可能 [少考さん★]
- 有名なロボットゲームをイメージしてスレを開いて下さい
- ポテサラに七味かけて食いたい
- 【ババア】高市早苗、稲田朋美、三浦瑠麗「中国との戦争と日本の徴兵制は仕方ない、賛成。」 [153490809]
- お前らって口にガムテープ貼られたら死にそう
- 廃盤のAVの海賊版を売るという画期的なビジネスを考えたんだが
- 反省ゼロのホモ野郎いい加減にしろよ
