リスト1 DICOMデータの例 000: 010: 020: 030: 040: 050: 060: 070:

Slides:



Advertisements
Similar presentations
平成 27 年 10 月 21 日. 【応用課題 2-1 】 次のビット列は、ある 10 進数を 8 ビット固定小数点表示で表した時の ものです。ただし、小数点の位置は 3 ビット目と 4 ビット目の間としてお り、負数は2の補数で表しています。このとき、元の 10 進数を求めてく ださい。
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
Accessによるデータベース(1) Ver.1 /11.
【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
コンパイラ 2011年10月17日
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
プログラミング入門2 第7回 情報工学科 篠埜 功.
データ構造とアルゴリズム 第10回 mallocとfree
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
エクセル(2)の目次 セル範囲の指定方法 データの消去法 アクティブセルの移動 セル内容の複写と移動 セル幅の変更方法
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
コンパイラ 2012年10月15日
データベース設計 第2回 データベースモデル(1)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
ハッシュテーブル.
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
画像処理プログラムの説明.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
前回の練習問題.
第7回 プログラミングⅡ 第7回
Ibaraki Univ. Dept of Electrical & Electronic Eng.
独習XML ~第3章 文書と構造~ 3.3 スキーマ 3.3 XML Schema
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
もっと詳しくArrayクラスについて調べるには → キーワード検索
プログラミング基礎B 文字列の扱い.
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
エクセル(2)の目次 セル範囲の指定方法 データの消去法 アクティブセルの移動 セル内容の複写と移動 セル幅の変更方法
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
Excel 2002,2003基本11 時間と日付を扱う.
プログラミング 3 2 次元配列.
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
基本情報技術概論(第13回) 埼玉大学 理工学研究科 堀山 貴史
アルゴリズムとプログラミング (Algorithms and Programming)
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
アルゴリズムとデータ構造1 2009年6月15日
ネットワーク・プログラミング Cプログラミングの基礎.
標準入出力、変数、演算子、エスケープシーケンス
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
アルゴリズムとデータ構造 2010年6月17日
プログラミング演習I 数値計算における計算精度と誤差
情報処理Ⅱ 第2回 2004年10月12日(火).
モバイルプログラミング第2回 C言語の基礎 (1).
第3回簡単なデータの入出力.
情報処理Ⅱ 2005年11月25日(金).
プログラミング入門2 第5回 配列 変数宣言、初期化について
第3章 関係データベースの基礎 3.1 関係とは 3.2 関係代数.
7.集合 7.1 集合とは [集合と要素] 関東の都道府県 群馬県 栃木県 要素 埼玉県 茨城県 東京都 千葉県 神奈川県
Presentation transcript:

リスト1 DICOMデータの例 000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 080: 44 49 43 4d 02 00 00 00 55 4c 04 00 56 00 00 00 DICM....UL..V... 090: 02 00 01 00 4f 42 00 00 02 00 00 00 01 00 02 00 ....OB.......... 0a0: 10 00 55 49 12 00 31 2e 32 2e 38 34 30 2e 31 30 ..UI..1.2.840.10 0b0: 30 30 38 2e 31 2e 32 00 02 00 12 00 55 49 12 00 008.1.2.....UI.. 0c0: 31 2e 32 2e 31 32 34 2e 31 31 33 35 33 32 2e 31 1.2.124.113532.1 0d0: 2e 31 02 00 13 00 53 48 0c 00 4d 49 54 52 41 31 .1....SH..MITRA1 0e0: 30 53 45 50 39 36 08 00 00 00 04 00 00 00 b4 00 0SEP96.......... 0f0: 00 00 08 00 16 00 1a 00 00 00 31 2e 32 2e 38 34 ..........1.2.84 リスト1を見てください。DICOMのデータは、最初に128バイトの0x00が続きます。そして、このデータがDICOMデータであることを示す宣言 が、129バイトから132バイトにある"DICM"という文字列です。次のバイトからはメタファイル情報を示すタグ、VR、データ長、データ・フィール ドが続きます。タグ、VR、データ長、データというDICOMデータ要素の関係は次の図で表すことができます。

図1 DICOM画像データファイル構成図 DICOM画像データのファイルは、次の図のような構成になっています。 タグはグループ番号と要素番号の対で構成されます。 short group; /* タグのグループ番号 */ 4: short element; /* タグの要素番号 */

表2 グループ番号の意味 グループ番号 内容 0x0008 検査日等の画像に関する情報 0x0010 患者氏名等の患者に関する情報 0x0028 画像に関する付帯情報 0x7fe0 画像データ メンバーgroupは、グループ番号と呼ばれています。グループ番号は患者に関する情報や画像情報等をまとめた集合を表しています。たとえば、グループ番号が0x0008であれば「画像に対する情報」、0x0010であれば「患者情報」というような意味を持ちます。上記の表に、プログラムを作成する上で、特に重要となるグループ番号を示します。メンバーelementは、集合groupの要素を表しています。たとえば、グループ番号0x0010で要素番号(エレメント番号とも呼ばれています。)が0x0010であるならば患者氏名、0x0030であるならば患者の誕生日というように意味を持たせています(タグの詳細はパート6 「DICOM辞書」にあります。)。 タグというのは、グループ番号と要素番号の対で出来ています。タグは(グループ番号, 要素番号)のように書きます。先の例で言いますと、タグ(0x0010, 0x0010)が患者氏名を表しています。以下の表は、DICOMにおけるタグの一例です。 表3 DICOMタグの例 タグ VR 意味 (0x0008, 0x0020) DA 検査日付 (0x0008, 0x0030) TM 検査時刻 (0x0010, 0x0010) PN 患者の名前 (0x0010, 0x1010) AS 患者の年齢 (0x0018, 0x0015) CS 検査部位 (0x0020, 0x0011) IS シリーズ番号 (0x0028, 0x0004) CS 光度測定解釈 (0x0028, 0x0010) US 横行のPIXEL数 (0x0028, 0x0011) US 縦列のPIXEL数 (0x0028, 0x0100) US 割当てビット (0x0028, 0x0101) US 格納ビット (0x0028, 0x0102) US 高位ビット (0x0028, 0x1050) DS ウィンドウ中心 (0x0028, 0x1051) DS ウィンドウ幅 (0x7fe0, 0x0010) OW, OB 画素データ(画像イメージデータ)

上記の表にはありませんが、グループ番号0x0002と0x0004は、ちょっと特殊なグループでDICOMメタファイル情報、DICOMディレク トリ構造化要素となっています。DICOMメタファイル情報は、DICOMデータの先頭部分に付属したファイル全般に関する情報が含まれています。 DICOMディレクトリ構造化要素は、ファイルの構造に関する情報を含んでいます。  プログラムを作成する上で重要になるのが、表3中のグループ番号0x0028と0x7fe0の要素です。タグ(0x0028, 0x0010)と(0x0028, 0x0011)によって、画像の大きさが分かります。割当てビット(0x0028, 0x0100)は、1つのピクセル(画素)を表すのに何ビット必要なのかを表しています。次に、割当てビットの中で実際に意味があるのは何ビットかを表すのが格納ビット(0x0028, 0x0101)です。そして、意味のあるデータ位置を高位ビット(0x0028, 0x0102)によって示します。  割当てビット、格納ビット、高位ビットは、次のように解釈します。例として、割当てビット=8,格納ビット=5,高位ビット=6としましょう。こ のとき、1つの画素データを2進数で表すと、"0XXXXX00"という形になっています。ここで、0は常に値が0になっていることを示します。そして、 Xが実際に意味のあるデータが入っている場所を示しています。以上より、実際のデータ値は、次の式によって得ることが出来ます。画素データをd、割当て ビット、格納ビット、高位ビットをそれぞれa, s, hとし、実際のデータ値をxとすると、以下の式が成り立ちます。 x = getbits(d, h, s) = ((d >> (h + 1 - s)) & ~(~0 << s))  ここで、getbits(x, p, n)という関数は、カーニハン&リッチーによる「プログラミング言語C 第2版」に掲載されている関数を意味します。getbits(x, p, n)は、pの位置からnビット持ってくるという関数です。以下に、この関数がどのようなものか引用します。 /* getbits: pの位置からnビットを取ってくる */ unsigned getbits(unsigned x, int p, int n) { return (x >> (p + 1 - n)) & ~(~0 << n); }  光度測定解釈(0x0028, 0x0004)は、画素データ(0x7fe0, 0x0010)がどのようなものであるのかを示すのに使われます。画素データが白黒データであるか、カラーデータであるかが定義されるのです。この値 が"MONOCHROME1"であるならば、画素データは単一のモノクロ画像を表し、画素データの最小値が白色を意味します。この 値"MONOCHROME2"である場合には、画素データの最小値が黒色を意味しています。光度測定解釈は、この他に"RGB"、"PALETTE COLOR"や"CMYK"などの値を取ることが出来ます。本書で作成するDICOMビューワでは、"MONOCHROME1" と"MONOCHROME2"のみを取り扱います。

次に、ウィンドウ中心(0x0028, 0x1050)、ウィンドウ幅(0x0028, 0x1051)について述べます。ウィンドウ幅と言うのは、画素データ(0x7fe0, 0x0010)の取りうる値の幅のことです。画素データ(0x7fe0, 0x0010)が0から1024の値をとる場合、ウィンドウ幅は1024となります。そして、ウインドウ中心というのは、画素データの中心値を表したものになります。  タグの後にはVR、データ長、データ・フィールドと続きます。VRはValue Represntations(値表現)の頭文字 を取ったもので、データ・フィールドに含まれる文字列や時刻、数値などのデータ形式を表しています。ただし、DICOMデータには、このVRを省略した形 式もあります。これが、リスト3中の共用体dicom_dataの3番目のメンバーimplicitのことです。さらに、VRを省略しない場合には、VR の後に4バイトのデータ長さを表すデータが続く場合と、2バイトのダミーデータを挿入した後で4バイトのデータ長さを表すデータを続ける場合があります。 VRを省略した形式を、暗黙的VR(Implicit VR)と言います。VRを省略しない場合には、明示的VR(Explicit VR)と言います。明示的VRの場合、VRの値によってデータ長さの前にダミーデータを挿入する場合があります。このために、リスト3中の共用体 dicom_dataは3つのメンバーを持っているのです。図1と、リスト1およびリスト2を見比べて見てください。リスト1はメタファイル情報が付いた DICOMデータであり、リスト2はメタファイル要素のないDICOMデータであると言えます。  VRには、以下のようなものがあります。VRに関する詳細はパート5の22頁ぐらいにあります。VRに関して注意しなければいけないことがありま す。データが明示的VRでOB,OW,SQおよびUNをVRに持つ場合、リスト3中のメンバーexplicit_2のような形式でデータが配置されます。 逆に、それ以外のVRを持つ場合には、メンバーexplicit_4のような形式でデータが配置されています。

表4 主なVRの値と意味 AS 年齢列 固定4バイトの文字列データで日週月年(nnnD,nnnW,nnnM,nnnY)を表します。 DA 日付 固定8バイトの文字列でyyyymmdd(年月日)となっています。 DS 10進数列 最大16バイトまでの固定小数点数または浮動小数点数を表す文字列を表します。 FL 単精度浮動小数点数 4バイトのバイナリーの単精度浮動小数点数を表します。 FD 倍精度浮動小数点数 8バイトのバイナリーの倍精度浮動小数点数を表します。 OB その他バイト列 1バイトのバイナリデータ並びです。 OW その他ワード列 2バイトのバイナリデータ並びで、エンディアンに注意します。 PN 人名 最大64バイトまでの文字列で人名を表します。 TM 時間文字列 最大16バイトの文字列で書式hhmmss.fracを持ちます。 UL 符号無し長整数 符号無しの32ビットバイナリ整数です。 UN 未知のデータ 内容の符号化が未知のデータです。 US 符号無し短整数 符号無しの16ビットバイナリ整数です。