TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
HSP総合スレ【part 10】
Rust Part6
【論理】Prolog【初心者】
この先き主流となる言語
Go language part 2
【TDD】テスト駆動開発【TestFirst】
次世代言語18 Go Rust Elixir Kotlin TypeScript
【Intel】OpenCV総合スレ 5画素目【画像処理】
Boost総合スレ part10
訃報: C 言語の開発者、デニス・リッチー氏が死去
C++によるDICOMファイル解析
- 1 :2006/08/21 〜 最終レス :2019/05/08
- さっそくはじめましょー
- 2 :
- DICOMの紹介をどうぞ
- 3 :
- あ〜、あの電車男のオープニングの元ネタの
- 4 :
- >>2
DICOMとは
Digital Imaging and Communications in Medicineの略で、
医療におけるデジタル画像と通信の企画を定めたやつです。
ものすごーく複雑多岐に及んでいてとても個人で全て
理解できる代物ではないので、ひとまずDICOMファイルを
読み込んでデータを解析するくらいのものを作ってみようかと
>>3
DAICON
- 5 :
- 参照URLも貼らずに(ry
- 6 :
- 参考URL:
DICOM日本語Webページ
http://www.jfcr.or.jp/DICOM/
本家
http://medical.nema.org/
- 7 :
- 規格が決まってるなら別に解析する必要なくね?
- 8 :
- DICOMファイルのサンプル(グロ画像ではありません)
http://149.142.216.30/DICOM_FILES/DICOMfilesIndex.html
>>7
フリーのDICOMファイル解析ツールってのが
Macを除いて殆ど無いので、ショボいのでもいいから作ってみようかと
- 9 :
- ちなみにMacではApple社がMac OS X用に開発した
無料DICOMビューア「OsiriX」(オシリックス?)というのがあります 凄すぎ
http://www.apple.com/jp/medical/osirix/
ココまでのモノを作り上げるのは到底不可能ですが、
できるトコまでやってみたいと思っとります
- 10 :
- 「解析ツール」が何を指しているのかよくわからんが、ビューア系なら色々あるぞ。
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
洋物もいくつか使ったことある。
- 11 :
- >>10
情報Thx!
ただ、ソースコード公開してるトコは見た事なかったので、
自己の勉強の意味でも作ってみよーかなと
「解析ツール」って言ったのは
DICOMヘッダ情報解析&画像閲覧できる
Appを指してます
- 12 :
- ほんじゃそろそろDICOMファイルの
詳細な構造から行ってみます
■DICOMファイルは大きく分けて以下の構造になってます
┌─────────────
|DICOMファイルメタ情報
├─────────────
|DICOMデータ集合
└─────────────
まずDICOMファイルメタ情報から見ていきます
- 13 :
- 【DICOMファイルメタ情報】
DICOMファイルを構成する為の
ヘッダ情報みたいなものが入っています
具体的には以下構成になっています
■DICOMファイルメタ情報の構造
┌─────────────
|ファイルプリアンブル
├─────────────
|DICOMプリフィックス
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|ファイルメタ要素
├─────────────
|・・・・・・・・・
├─────────────
|ファイルメタ要素
└─────────────
- 14 :
- 【ファイルプリアンブル】
DICOMファイル先頭にある固定128バイト。
アプリケーション特定の用途により使用できるようになっています。
使用しない場合は、全てのバイトに0x00を設定するよう決められています。
【DICOMプリフィックス】
4バイトの文字列。「DICM」固定。
このファイルがDICOMファイルかどうか判断する為に使用されます。
【ファイルメタ要素】
DICOMファイルのヘッダ情報を表す項目。
それぞれ『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。
- 15 :
- >>1はなぜDICOMのファイルを解析したいのか、その動機を具体的に書け。
- 16 :
- 詳細な解説は飛ばして、次にDICOMデータ集合に行きます
【DICOMデータ集合】
DICOMファイルの最も重要な部分。
・画像情報(画像の幅、高さ.etc)
・患者情報(患者名、年齢、住所.etc)
等、ありとあらゆるデータが詰め込まれています。
■DICOMデータ集合の構造
┌─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|データ要素
├─────────────
|・・・・・・・・・
├─────────────
|データ要素
└─────────────
【データ要素】
DICOMファイルの各データを表す項目。
それぞれ《基本的に》『タグ』、『値表現(VR)』、『値長さ』、『値領域』で構成されています(※)。
※詳細は後述。
- 17 :
- 解析する「ソフトを作りたい」動機じゃないぞ。「解析したい動機」だ。
- 18 :
- 仕事で必要になったんだが、金が無いので、無料で馬鹿どもを集めて作らせようという魂胆でしょ。
- 19 :
- 仕様通りに実装して終了
の気がするんだけど
仕様が巨大らしいから面倒なのかな
- 20 :
- >>17
・C++のお勉強
・DICOM規格のお勉強(最初はDICOM解説サイト作ろうとしたけどメンドいのでやめた)
ってトコかな
別にDICOMじゃなくてもいいんですよ
やり甲斐がある題材が欲しかっただけ
>>18
いや、仕事とは無関係ですよ 完全に趣味
- 21 :
- って、明日も仕事なので
今日はコレくらいで
では
- 22 :
- $ 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だからフリーだよ
- 23 :
- DCMTK使えよ。
ttp://dicom.offis.de/dcmtk.php.en
スレ主はちゃんと調べもせずに「ない」と決め付けている。
- 24 :
- >>20
なぜDICOM規格の勉強をしたいのか説明しろ
- 25 :
- あんな糞企画、仕事以外で使いたくなるわけ無い
- 26 :
- >>1
ツール作りたいなら、別に規格の説明などしなくていいから、勝手に自分でやってくれ。
- 27 :
- そんな規格よりXMLSchemaとか解析してくれ
- 28 :
- やるならYAMLだな。
いいものが出来れば、社会に貢献できる。
- 29 :
- ただいま戻りました
あ、情報提供有難うございます。
是非参考にさせてもらいます
- 30 :
- >>16の続き
眠いのでこれだけ・・・
【タグ】
16ビット符号無し整数の「グループ番号」「要素番号」の対で構成され、
データ要素を一意に識別する(例外有り)為の目印。
規格書には(0x0020,0x1011)等と記載されたりします。
【値表現(VR)】
データ要素の値のデータタイプ及び書式を表す2バイトの文字列。
データ要素が持つ値は文字列だったり整数値だったりバイト列だったりしますが、
これらのデータタイプが何なのかを解析する際に使用されます。
DICOMファイルによっては、このVRが存在しない(暗黙的VR)ものもあります。
【値長さ】
値領域の長さ(バイト数)を示す16または32ビット
(VRが明示的か暗黙的かに依存する)符号無し整数。
値長さが未定義の場合、このフィールドには
0xFFFFFFFFが設定されます(未定義長さ)。
【値領域】
データ要素の値が格納されている領域。
値が整数値なのか文字列なのかはVRによって判断されます。
- 31 :
- ブログでやれ
- 32 :
- とりあえず物凄く大まかな構造を解説したところで、
これまでの解説をプログラムでまとめてみましょう
int main(int argc, char* argv[])
{
DicomFile DcmFile; // DICOMファイルを解析するクラスのインスタンス
DcmFile.Open(argv[1]);
DcmFile.ReadMetaInfo() ;
DcmFile.ReadDataSet() ;
return 0;
}
- 33 :
- DicomFileクラスはコメントにもある通り
DICOMファイルを読み込み、データを解析するクラスです
直感的に見て分かると思いますが上のプログラムでは
・DICOMファイルをオープンする
・DICOMファイルメタ情報を読み込んで解析する
・DICOMデータ集合を読み込んで解析する
の3つを行います
解析した結果をどうするかについてはまた別途考えます
/* 「解析する」ならRead〜じゃなくてParse〜の方が良かったか・・・ */
- 34 :
- トリップ付けました
- 35 :
- 今日はこれで寝ます では
- 36 :
- なに?このキチガイ
- 37 :
- はじめから隔離スレだし、他で暴れられるよりいいじゃね?
- 38 :
- 埋め
- 39 :
- 産め
- 40 :
- うめ
- 41 :
- うめ
- 42 :
- ウメ
- 43 :
- ウメ
- 44 :
- 埋め
- 45 :
- 梅
- 46 :
- 埋め
- 47 :
- 生め
- 48 :
- 埋め
- 49 :
- うめ
- 50 :
- うめ
- 51 :
- 埋め
- 52 :
- 埋め
- 53 :
- ねむー 今日は無理だ・・・
なので続きは明日
- 54 :
- もう来るな
- 55 :
- いやー本業多忙で・・・
もうしばらく延期させてください
>>54
まぁそう言わず
- 56 :
- 二度と来るな
- 57 :
- 何だか分からないが本業がんばれ
- 58 :
- これですか? わかりません :D
ttp://www.youtube.com/watch?v=a6ErJVffY6E&mode=related&search=
- 59 :
- DCOMの解析かと思った
それだけは勘弁
- 60 :
- おれも、前に作ったが、iso-2022系の文字をサポートしているためハングルとか中国語とか
文字で死にそうだった。後は楽な仕様だが、規格が大きいので関係ないところを読み飛ばさないとつらい。
- 61 :
- >>57
本業はMFC屋さんです
- 62 :
- >>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)
{
}
- 63 :
- // 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;
}
- 64 :
- // メタ情報を解析する
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;
}
- 65 :
- 色々と突っ込みどころ満載なのはご愛嬌。
今日はおちまい。
- 66 :
- 電波が足りん
- 67 :
- なんで、こんなニッチな分野がスレになってんの?
- 68 :
- sage
- 69 :
- てすと
- 70 :
- 半年振りに復活。色々やらされてました。
- 71 :
- 久々に再開するかーと思ったけど、
どこかwebスペースを借りてやった方が良いですかね。。
書込行数も制限されちゃうし
- 72 :
- 復活おめ
- 73 :
- >>72
ありがとうございます
web借りました。
今後はこっちで細々やっていきます。
板汚しすみませんでした。
http://s1.muryo-de.etowns.net/~programming/
- 74 :
- >73
ソースまだー?
- 75 :
- すみません。。HDDがいきなり死亡して
ソースが全部吹っ飛んでしまいました。。
もうしばらくお待ち下さい。。
- 76 :
- 期待age
- 77 :
- あの、すいません。
バイトでちょうどDICOMに関することをやらされているので、このスレ見つけて感動しました。
ところで、ちょうどというか本当にちょうどあなたがサイトでやられているようなことをやってくれないかと支持されたのですが
もしよろしければソースコード公開とかされないでしょうか?
- 78 :
- これがゆとりというものか
- 79 :
- 埋め立て
- 80 :
- あっはっは(苦笑
いちおうリアルゆとり世代ではないのですが・・・
いちおう、ゆとりなりに努力した結果、一昨日に完成させました。
バイト先に出す成果物なのでソースコードが出せませんが・・・
- 81 :
- でも、毎年追加変更あるんだよね。
俺がやったときは対応する文字コードが多すぎて面倒だったな。
- 82 :
- ところで
http://www.jfcr.or.jp/DICOM/dicom_draft-j.html
とかの、DICOM仕様書の日本語訳とかが消えているっぽいんだけど
他に日本語約手に入るところ知らないかな?
この分量の英語読むのは正直辛い
- 83 :
- libDicomとか無いのかな?
- 84 :
- 保守
- 85 :
- http://www.sim.hcuge.ch/papyrus/01_Papyrus_Presentation_EN.htm
DICOM画像読み込みライブラリ
- 86 :
- >>85
なんぞこれ
- 87 :
- CベースのDICOM画像読み込みライブラリ、Windows、Mac、Linux対応
DICOMの通信規格部分は非対応。
Mac用のOsirisXなんかに使われているのが実績
http://japanese.osstrans.net/software/osirix.html
画像の読み出しだけなら十分に便利。
- 88 :
- >>85
試しにテスト画像みたいなのをSCION IMAGEで開こうとしたけど…
自分じゃやり方が良くわからん。
- 89 :
- age
- 90 :
- DICOM画像ってのは簡単に作れるもんなんでしょうか?
- 91 :
- 詳しくは知らんが画像そのものはTIFFとかだったような記憶がある。
画像とその付帯情報、医療用なので患者の情報とかが、
いろいろくっついていてポータブル形式というのにパッケージされている。
業界標準的なライブラリはあったと思う。
- 92 :
- ビューワー程度だったら医学生が自作できる程度のものらしい。
特定分野の技術だから情報が仕入れにくいのがネックかもしれない。
- 93 :
- 名古屋大学のDICOMViewerでどれでも読めるわけじゃないよ
タグ編集画面の説明は丁寧だけど
SQタグとかは対応してないけどバイナリでエクスポートはできる
- 94 :
- >ビューワー
は沢山あるんだけど、
ファイル作成ライブラリが無いような気がするのは気のせい?
- 95 :
- 基本的にDICOMはJPEGに患者なの名前などのタグを入れ込めるようにしたものですね。
ただ、wikipediaにも同じ内容があるのですが、標準仕様が改定のたびに膨大になっていること。
あと、医療機器メーカーなんかがCTスキャンの画像を独自拡張した使用で吐き出したりすることがままあるので、きちんとすべてのDICOM画像を表示できるものは限られているみたいですよ。
ファイル作成ライブラリが無いのは基本的に医療機器側でDICOMデータとして吐き出してくれるから。
間違いあったらごめんなさい。
- 96 :
- 情報thx!
機器側の中の人はどうやって作られてるんでしょ?
- 97 :
- DICOMファイルのフォーマットさえ理解できていれば、あとは規格書を見て黙々と必要な情報を出力するだけ。
厳密に運用するなら出力する内容と規格との適合性のチェックが大変なだけで、
ファイルフォーマット自体は>>12-16に挙げられているように単純なものですよ。
>>95
画像部分については、基本的に無圧縮データです。
ただ、何でも受け入れちゃうDICOMだから非可逆/可逆をあわせてJPEGも可能ですけど。
規格上の画像形式はPart.5を参照のこと。
また、画像の表示に関しては画像と通信の規格なんですから、基本的に表示できて当たり前です。
でないと、わざわざ規格を定めている意味がありません。
- 98 :
- CTで吐き出されたDICOM画像のヘッダを自作のRAWやTIF画像のヘッダに載せ替え,デジタルファントムの作成を企てていますが,うまくいきません。
どうやればうまくいくんでしょう?
- 99 :
- 99
- 100 :
- 100
100〜のスレッドの続きを読む
フリーソフトなどに使われる言語は?
0から始める2chブラウザfor超漢字 "2ch de BTRON"
Excel VBA 質問スレ Part55
次世代言語10[Rust Swift TypeScript Dart]
ふらっと C#,C♯,C#(初心者用) Part148
わんくま死亡か?
Subversion r15
【会津】パソコン甲子園2004【若松】
洋書推薦図書/洋書必読書のためのスレッド 1
Rust Part5
--------------------
【VG】カードファイト!!ヴァンガード 336枚目【総合】
宇野常寛と第二次惑星開発委員会 3 【PLANETS】
【悲報】IZ*ONEさん、ガチのマジで終わる 日本でのリリイベも延期・返金対応決定 ★2
(´・ω・`)ショボーンして1h以内に
ドラゴンクエストウォーク792歩目
からくりサーカスの声優について語るスレ
高校生の8割が「周りでK-POPが流行っている」と回答!なぜそこまでK-POPは日本の若者の心を動かすのか?
【D専】
【西日本豪雨】テレビ局の報道が手薄だったと疑問声。被災地でも大雨特別警報が出る中、音楽番組やバラエティー番組などを放送していた [385687124]
【総合】日本男子体操を語るスレ73
隠れ坂47
テンヨー総合スレ5
四川地震の日本救援隊へ@五七五
【パラサイトパパ活ニート インスタライブで嘘恋バナ】水野佐彩アンチスレ25【匂わせと悪口大好き 不倫バツイチ】
オジュウチョウサン宝塚記念回避決定
東京核撃 万が一のそのとき、あなたはどう動く!? [616817505]
【韓国与党代表】 GSOMIA「必須不可欠なものではない」 終了の全ての原因と責任は日本にある
デジモン玩具スレ38
【switchモンハン確定?】ドラガリのモンハンコラボが本気出し過ぎな件
晩飯・夕食何食った?4食目
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼