DICOMデータついて(1)―メモリ―

DICOMとは「Digital Imaging and Communications in Medicine」の略で、ACR(北米放射線学会)とNEMA(電気工業会)が策定した医療画像の機器同士の接続や通信の規格です。このような規格の元で各メーカが物を作れば、機器間の接続や通信などは容易にしかも安価におこなえる利点がでてきます。そこで、このDICOMデータはどのようになっているのかを簡単に述べてみます。

1. 言葉の意味?

DICOMデータの話になると、タグとかの言葉が出てきます。タグって??なんでしょか?タグは辞書を引くと「値札」「付け札」などの意味がでてきます。このタグってこれだけでも良く分かりません。タグ(0008 , 0070)???これを理解するにはパソコンのメモリについての知識がないとわからないと思います。

2. パソコンのメモリについて?

結論から言うと(0008 , 0070)とはパソコンのメモリに記憶された値を16進数で示したものなのですが、16進数?メモリに記憶?これもメモリを理解していないとわかりません。では、メモリとは何なのかを簡単に述べてみます。
パソコンはメモリに色々な値が記憶され、そのデータが画像であるならば、このデータを目に見える像として表示させているのです。このメモリを知るにはビットとかバイトの意味も理解しておく必要があります。はじめにメモリーからはじめます。


3. メモリとは?

パソコンにはメモリという箱がたくさんあると理解しておいてください。下の図で説明します。ここに0番からn番の箱を準備しました。この箱は全部でn個ありますからこのメモリ容量はnバイトであると表現します。ここでバイトが出てきました。バイトとは8ビットをひとまとまりにして呼んでいる言葉なのです。ではビットとは何でしょうか?

0番 1番 2番 3番 4番 5番 …… n番

 1バイト(8ビット)

                                
ビットとはメモリの最小の単位で、ON−OFFスイッチ(ONのときには1、OFFのときには0を示す)です。ですから、バイトと言う箱にはON―OFFスイッチが8個入っていると考えてください。バイトの箱に入っているON―OFFスイッチは8個ですから、この8個のスイッチがONの状態ならば、バイト箱は(11111111)になります。
ON-OFFスイッチのはじめの5つはOFF、残り3つがONであったならば、このバイト箱は(00000111)となります。この数字は0と1の組み合わせから出来あがっていますので2進数と表現します。このようにパソコンは2進数で動いているのです。

4. 10進数・2進数

上の(11111111)、(00000111)は2進数だと言いました。では、私たちが普通に使っている0,1,2,3…100と言う10進数で上の2進数を表現したらいくつになるのか電卓を使って調べてみます。パソコンの電卓を立ち上げて関数電卓として、2進と書いてあるボタンをチェックし先ほどの11111111を入力してください。

                  

次に、このままの状態で10進ボタンをチェックすると表示される数字は255となります。これは2進で書かれた11111111が10進表示では255になるということなのです。

                  

同じように、00000111を2進で入力して(電卓に00000111 とは入力できませんので0を省いた111を入力します)10進表示にすると7と表示されます。いろんな数字で試してください。

このように数値255は11111111、0は00000000として記憶されます。

5. 大きな数字は?

いまバイト箱1個にはON-OFFスイッチが8個あり、この中に数値が記憶されるといいました。全部ONの状態11111111は10進表現では255でしたので、1つのバイト箱には最小で全部OFFの状態である00000000から全部ONの状態である11111111までの2進数が記憶されることになります。00000000は0で11111111は255ですから、10進にすれば0〜255までの数字(256個)しか入らないことになります。では10進数で300の値をメモリに記憶させるにはどうしたらよいのでしょうか?答えはバイト箱を2つ準備すればいいのです。

300は2進では?電卓を使ってしらべてみます。100101100となります。この2進数を記憶させるには、9個のON-OFFスイッチが必要になるので2個のバイト箱があればよいことになります。2個のバイト箱があれば8×2箱で16個のON-OFFスイッチがあることになるので問題ないのですが……ここでバイト箱は8個のON-OFFスイッチでしたので1個目のバイト箱には100101100のはじめの10010110が記憶されるとします。これで8個入りましたから残りの1つである0を2つめのバイト箱に記憶させるようにします。すると1番目のバイト箱には10010110、2番目には0ですから00000000を記憶されます。1番目は2進で10010110、これは10進では150になります。2番目のバイト箱は00000000なので10進では0になります。困りました…この300が150と0に別れたのですから、この2つの箱を開くと300(2進では100101100)となるような約束事をパソコン(CPU)があらかじめもっていなくては混乱します。


実はこれらの約束事は違う方法で決められています。
      

6.300の数字はどのようにして記憶されるの?  

先ほどの300はパソコンの中では100101100となることを述べました。パソコンではこの300を256で割り、その値を1番目のバイト箱に記憶させ、余りを2番目のバイト箱に記憶させる約束ができています。300÷256=1余り44ですので、1番目のバイト箱には商の1(2進数では00000001)、2番目のバイト箱には余りの44(00101100)を記憶させておき、元に戻すときに1番目のバイト箱の値を256倍し、その値に2番目のバイト箱の値を加えれば元の値になるようにCPUが作業するようになっています。


7. 箱への入れ方は?

前で1番目のバイト箱に「商」を入れ、2番目のバイト箱には「余り」を入れると述べました。しかし、その入れ方(並べ方)はCPUによって違っているようです。この並べ方にの違いでリトルエンディアン、ビッグエンディアンという名称で区別されています。
 「余り」をはじめのバイト箱、「商」を次のバイト箱に入れて記憶させておく方法をリトルエンディアン、「商」をはじめのバイト箱、「余り」を次のバイト箱に入れて記憶させておく方法をビッグエンディアンと呼んでいます。Interu互換CPUはリトルエンディアンで並べてあります。