DICOM

VOI

7월 27, 2016 DICOM No comments

VOI (Values of Interest)

WWL과 같이 Pixel Data를 원하는 LUT를 적용하여 사용자가 좀 더 영상을 다양하게 보는 방법을 제공 합니다.

그중에 최종단의 LUT역활을 하는것이 VOI LUT입니다.

이외에도 Modality LUT, Presentation LUT와 같이 다양하게 적용됩니다. 아래 이미지를 참고해 주세요.

voi_sequence

우선 VOI LUT Modlue Attriutes라고 하여 VOI와 관련된 Group이 있습니다.

Group ID 0028로 여기에 Window Center(0028,1050), Window Width(0028,1051도 포함되어 있습니다.

그리고 VOI LUT Function(0028,1056)에서 WWL Window가 Linear Function인지 Sigmoid Function인지 구분해 줍니다.

Linear Function인 경우DICOM Standard에는

if (x <= c - 0.5 - (w-1) /2), then y = ymin
else if (x > c - 0.5 + (w-1) /2), then y = ymax
else y = ((x - (c - 0.5)) / (w-1) + 0.5) * (ymax- ymin) + ymin

위와 같이 구현 되고,

Sigmoid Function인 경우 아래 식으로 DICOM Standard에 나와 있습니다.

sigmoid_expression

where
IN
is the input value of the LUT (i.e., the output of the (conceptual) Modality LUT).
WC
is the Window Center defined interactively by the user or by using the values provided in (0028,1050).
WW
is the Window Width defined interactively by the user or by using the values provided in (0028,1051).
Output_range
is the maximum output value (see Note below on encoding depth)

아래는 VOI LUT Sequence Group의 DICOM Standard의 내용 입니다.

voi_table

LUT Descriptor(0028,3002)에서 LUT Data(0028,3003)의 형태를 정의하고 실제 Data는 LUT Data(0028,3003)에 저장 되게 됩니다.

LUT Explanation은 그냥 VOI LUT의 Text 설명이 포함 됩니다.

monochrome

7월 27, 2016 DICOM No comments

DICOM Image의 Pixel Data에 실제 Image Raw Data가 저장 됩니다.

이때 저장되는 Raw Data의 Type을 결정해 주는 한가지 element가 Photometric Interpratation (0028,0004) 입니다.

tag (0028, 0004)에 RGB 값인경우 Pixel Data에는 RGB 형태로 저장되어 있다는 것을 명시 합니다.

CR Image에서는 MONOCHROME1 or MONOCHROME2 로 저장 되어 있습니다.

Grayscale Image 라고 생각 하시면 됩니다.

monochrome2

MONOCHROME1MONOCHROME2의 차이점은 MONOCHROME2는 Pixel Data의 가장 큰 값을 흰색으로 표시하고,

MONOCHROME1은 가장 큰 값을 검정색으로 표시합니다. 즉 MONOCHROME1은 기존에 보던 Image의 반전 된 영상이라고 생각하시면 됩니다.

monochrome1

ES ImageSecondary Capture와 같은 DICOM중 PALETTE COLOUR형태도 있습니다. Bitmap의 Pallete 형태와 동일하다고 생각하시면 됩니다.

해당 Palette Table은 Red, Green, Blue Palette Color Lookup Table Descriptor (0028,1101~1103)을 참조 하여 사용 됩니다.

WWL (Sigmoid)

7월 25, 2016 DICOM No comments

WWL Sigmoid

WWL에서 center를 기준으로 좌우가 log 함수처럼 생긴 graph형태를 sigmoid라고 합니다.

DICOM에서도 이런 특이한 형태를 지원합니다. 보통 element안에 lut 형태로 저장하여 사용하게 끔 되어있습니다.

보통 많이 사용하는곳이 MR image나 Mammo영상에서 판독을 좋게 한다고 해서 가끔 사용 합니다.

internet 발췌한 간단한 sigmoid graph 그리기 입니다.

sigmoid

아래 함수를 통해서 구현 합니다.

sigmoid_function

python code로는 아래와 같습니다.

import math

def sigmoid(x):
    a = []
    for item in x:
        a.append(1/(1+math.exp(-item)))
    return a

import matplotlib.pyplot as plt
import numpy as np


x=np.arange(-10, 10, 0.2)
sig = sigmoid(x)
plt.plot(x,sig)
plt.show()

LeadTools library의 document에서도 쉽게 해당 식의 parameter를 참조 하여 구현 할 수 있습니다.

sigmoid_leadtools

아래는 leadtools document에 있는 내용 발췌 입니다.

Y = uStart + (uEnd uStart) * (1./ (1 + exp(2*nFactor/10. * (x-Center))/(uEnd- uStart)) - nFirstValue)/ (nLastValue nFirstValue)
where:

nFirstValue = 1./(1+exp(2.*nFactor/10.*(nStart - Center)/ (uEnd- uStart))).
nLastValue = 1./(1+exp(2.*nFactor/10.*(nEnd - Center)/ (uEnd- uStart))).
Center = (nEnd + nStart)/2.
x = the intensity value of the selected point
uStart = the nLow parameter of this function
uEnd = the nHigh parameter of this function

WWL

7월 25, 2016 DICOM No comments

WWL (Window Width Level)

WWL이라고 DICOM에서 CR, MR, CT영상의 BrightnessContrast를 조정하여 medical image를 좀 더 다양하게 볼수 있도록 도와 줍니다.

WWL을 Window의 width와 level을 조절 한다고 하여 Window width level이라고 하기도 하고, level대신 center라는 용어를 사용하기도 합니다.

아래와 같이 x, y축을 가지며, x축이 input, y축이 출력으로 사용하는 window 입니다.

width = 1024, cener = 512인 wwl의 graph 입니다.

wwl

x축이 실제 pixel data 값인 input이 되는거고, y축이 output인 최종 출력된는 gray scale값이 됩니다.

python으로 간단하게 구현해 보면,

먼저 numpy array를 input pixel 값 만큼 만듭니다. 10bit 짜리 pixel data이면 1024 크기로 설정 합니다.

d = np.arange(1024)

그리고 width, center 값을 임의로 설정 합니다. 우선 전체 window로 설정 해 보죠

width = 700
center = 512

그럼 center를 기준으로 width/2만큼 이전의 모든 값은 0이고,

반대로 `width/2’만큼 이후의 값은 모든 값이 255값이 됩니다.

start = center - (width/2) 
end = center + (width/2) 
d[:start] = 0 d[end:] = 255

마지막으로 실제 linear 기울기에 맞는 값으로 설정 해 주면 되겠네요

idx = start
for i in d[start:end] :
    d[idx] = (idx-start) * (256/width)
    idx = idx + 1

최종 matplotlib로 plot을 출력 해 보면

plot(d)

width_700_512

10. US DICOM Image

7월 13, 2016 DICOM No comments

이번에 설명드릴 DICOM은 US 영상 즉 Ultrasound인 초음파 영상 입니다.

나름 초음파장비는 의료 영상 장비내에서 DICOM으로 File을 저장 해주며 PACS로 전송도 해줍니다.

즉 DICOM이 지원되는 장비죠. 하지만 모든 초음파 장비가 지원되는것은 아니지만 최근에는 기본적으로 포함됩니다.

간혹 영업에 의해서 DICOM Module이라는 이름으로 Lock을 걸고 비용을 지불해야 이 Lock을 풀어줌으로써 사용할 수 있는경우도

있습니다. 그래서 DICOM Module 비용이 고가 인경우에는 내시경영상에서 설명드렸던 Gateway를 초음파에서도 사용하곤 합니다.

US DICOM은 ES보다는 조금 복잡합니다. 특히 아래 이미지에서 보이듯이 Doppler Mode니 M mode와 같이 각 Mode별로 이미지의

영역이 구분되어 지기에 추가적인 정보를 포함하고 있습니다.

us

이렇게 영역 정보를 가지는 이유는 Measurement 때문 입니다. 즉 정확한 데이터 측정을 위해서 필요한거죠. 예를 들어 상단이미지에서

B Mode영상에 혈류의 흐름을 보여주고 있습니다. 이때 하단에 있는 그래프에서 속도의 차이를 계산하고 싶다고 하면 아래 그래프가

분리된 영역으로 존재해야 정확한 측정이 가능하게 됩니다.

관련 내용이 DICOM Standard Part3. C.8.5.5.1.3 Region Flags Intersecting Spatial Format Regions and Overlapping Measurement

에 자세히 설명되어 있습니다.

dicom_us

각 Region A, B, C와 같이 각 Region을 구분해 주며 해당 Region의 Pixel의 단위가 mm인지 degree 인지 와관련된 Unit정보가 포함되며

각 영역이 B, C, M Mode인지 ECG인지 같이 종류도 명시합니다.

us_dicom_doppler

위 영상은 이러한 정보를 이용하여 분석할 수 있는 예제를 DICOM Standard에서 발췌하였습니다.

DICOM Standard Part3. C.8.5 Ultrasound Modules에서 부터 US Region이라는 항목으로 워낙 자세히 나와있으니 Standard를 참고

하시는 쪽이 더 좋을듯 하네요.

초음파 영상도 Multiframe DICOM을 지원합니다. 즉 여러 영상이 하나의 DICOM파일에 저장된다는 얘기지요.

하지만 US Multiframe DICOM은 각 Region정보가 포함되어 있기에 전체 영상을 다 가지고 있을 필요가 없게 됩니다.

그리하여 첫번째 영상은 Base가 되는 B Mode 전체 영상을 나머지 나오는 영상은 변하는 부분의 Region영상만을 가지고 있는 경우도

있습니다.

그럼 Display하는 입장에서는 해당 첫번째 영상에 해당 Region만을 Overwrite하여 반복적으로 Display하면 Cine Play를 할 수

있는겁니다.

이렇게 하는 이유는 단지 용량을 줄여보고자 한것 같습니다. 이런식으로 유사하게 한게 DICOM Overlay입니다.

기회가 되면 추후에 자세히 설명하겠지만 CT나 MR에 12bit영상인경우 실제 저장은 어쩔수 없이 16bit 2byte를 저장하게됩니다.

이때 4bit는 남게 되죠. 여기에 overlay라는 data를 4bit에 저장하여 추후 활용 할 수 있게 됩니다.

Bit로 풀어써보면 아래와 같은 형식으로 저장됩니다.

bit 15..12 :Overlay Data
bit 11..0 : Pixel Data

ex) 아래와 같이 특정위치에 Pixel Data 2byte 값이 하단과 같다면
bit16..0 1111 1111 1111 1000  ( 보기 편하게 bit순서를 반대로 적었습니다.)    
이는 12bit 모두 1이기에 4095는 Pixel Data값을 의미하고
마지막 4bit는 1이기에 overlay Data는 1이라는 값을 가집니다.

개념적으로 아래와 같은 그림으로 이해하시면 됩니다.

dicom_overlay

원래 MR이미지에 선이 표시된 Overlay 이미지가 있고 이것을 화면에 Display할때는 결과 화면과 같이 표시하게 됩니다.

그럼 뭐하러 굳이 이렇게 Overlay를 구분할까요? 다양한 장점이 있습니다. 우선 Overlay는 판독에 불필요 할 수도 있기에

Show & Hide가 가능하겠네요. 그리고 별도의 이미지다 보니, WWL(Window Width Level)과 같이 설정 변경시 실제 MR이미지는

WWL에 맞추어 변경이 되지만 Overlay는 변경되어서는 안되겠지요.

09. ES DICOM Image

7월 13, 2016 DICOM No comments

ES는 Endoscopy 즉 내시경을 의미합니다.

즉 내시경영상을 저장하는 DICOM에 대해서 설명하려고 합니다.

우선 내시경장비는 현재 까지 DICOM이 지원되는 장비가 없습니다.

DICOM이 지원된다는 의미는 초음파, CT, MR장비와 같이 의료기기에서 DICOM 형식으로 File을 저장하며 전송 할 수 있는

장비를 의미합니다.

하지만 내시경 장비는 꽤 오래전부터 광학장비로 사용되어 왔지만 이런 의료IT와 관련하여서는 받아들이는 속도가 느린듯 합니다.

그래서 일반적으로 전용 칼라프린터를 연결하여 프린트 출력하여 차트에 붙이곤 하죠. 하지만 아시다시피 내시경 칼라 프린터 전용

용지는 꽤 비싸기에 사용에 부담이 되곤 합니다. 그래서 초기에 는 내시경장비에서 나오는 신호 보통 일반 장비에서는 NTSC

신호가 나오죠. 이 NTSC신호라는것은 예전 칼라TV신호라고 생각하시면 됩니다. 예전 VTR과 칼라 TV를 연결할 때 흰색 빨간색

composite을 통해 연결하 게 되는데 이때 신호가 NTSC신호가 TV로 입력되어 비디오를 볼 수 있는거죠.

그래서 초기에는 간혹 NTSC신호를 TV캡쳐카드를 이용하여 이미지 파일로 저장하고 관리하는 프로그램도 있었습니다.

하지만 요즘은 PACS와의 연동이 중요시 되기에 Gateway를 사용하여 내시경영상을 DICOM으로 저장하고 PACS로 전송 합니다.

Gateway라는 것은 이처럼 의료기기와 PACS 중간에서 의료기기에서 나오는 영상을 DICOM으로 변환하고

PACS로 전송까지 하는 역할을 담당하게 됩니다.

보통 이때 추후에 자세히 설명하겠지만 DICOM 통신 관련하여 PACS로 DICOM 파일을 전송하는 DICOM Send기능을 수행하고,

그 이전에 환자 및 검사관련 정보를 받아볼 수 있는 DICOM Q/R을 지원하게 됩니다.

DICOM Q/R이란 DICOM Query & Retrieve로 DICOM통신 표준중에 “오늘 내과 내시경 검사실의 2번 내시경장비에서 검사할 환자정보를

알려줘~!” 라고 요청(Query)하면 그에대한 대답으로 PACS측에서 “오늘 10시 30분 위내시경검사 환자 홍길동, 11시 00부 대장내시경

검사 환자 김철수가 있다~!”라는 응답(Retrieve)을 받게 됩니다.

그럼 사용자 입장에서는 검사전 DICOM QR을 통해 검사할 환자 목록을 확인후 선택만 하면 환자 및 검사와 관련된 정보가 사용자의

수작업 없이 바로 입력되게 됩니다.

이는 환자정보를 수작업으로 입력하는데 발생되는 오류, 환자ID를 잘못입력하여 엉뚱한 환자에 잘못된 영상이 저장되는 오류를 방지하는

효과가 있습니다.

그럼 ES영상의 DICOM 구조를 살펴보죠. 아주 단순합니다.

es

우선 SOP Class UID는 Secondary Capture Image Storage를 1.2.840.10008.5.1.4.1.1.7를 많이 사용합니다.

uid

DICOM Standard 6. Annex A Registry of DICOM unique identifiers (UID)

다음은 환자 정보가 있겠죠. Patient ID, Name, Sex, Birth-Date…

그리고 Study 정보가 오겠네요. Study Date, Modality…

다음으로 Pixel Data를 해석하는데 필요한 Rows, Columns, Bit관련 Tag들이 오겠네요.

일반적으로 내시경영상은 24bit BITMAP형식으로 저장하여 Pixel Data에 넣게 됩니다.

그렇기에 Photometric Interpretation(0028,0004)는 RGB가 오고, Bit Stored(0028,0101)는 R,G,B가 8bit씩 저장되기에

8을 High Bit(0028,0102)는 7을 가지게 됩니다.

참고로 위의 내시경영상에서 보이듯 실제 의미 있는 영상은 전체 영상에서 약 60%만 의미 있으며 나머지 검은색 부분은

실질적으로 불필요한 부분입니다. 그래서 Gateway에서 영상 획득시 원하는 부분만 Crop하여 저장하기도 합니다.

워낙 기존에 설명드렸던 DICOM과 별반 다른 것이 없기에 설명이 너무 짧긴 한데요.

정말 별다른게 없기에 마땅히 더 설명드릴게 없네요;;

굳이 기존 설명중에 말씀안드리것중에 Manufacture(0008,0070)에 Gateway를 제작한 회사이름이 보통 들어가게 되고,

Institution Name(0008,0080)에는 병원이름이 들어값니다.

Operator Name(0008,1070)에 처방내린의사분들이 실제 검사도 같이 진행 하기에 보통 담당 의사명을 집어넣게 되죠.

08. Multiframe DICOM

7월 13, 2016 DICOM No comments

DICOM파일에는 일반적으로 한장의 Image가 포함되지만 2장이상의 이미지도 포함 할 수 있습니다.

하나의 DICOM파일에 여러장의 이미지가 저장되게 되며 보통 이런 영상을 한장씩 한장씩 보여주면서

마치 동영상과 같은 역활을 하기도 합니다.

이때 하나의 영상을 Frame이라고 부르며, 이런 Frame들이 모여 Multiframe DICOM영상을 구성합니다.

아래 그림과 같이 기존 DICOM하고 크게 다른것이 없으며 단지 Pixel Format(7FE0,0010) Tag에 여러장의 Frame이 순서대로

저장되어 있는 구조 입니다.

multiframeDICOM

Multiframe DICOM영상은 특히 US에서 Doppler영상이나, 뇌혈관 조영술에서 Xray영상, 기타 CT,MR영상등 요즘 들어 활용빈도가

높아지고 있습니다. 그런데 Multiframe DICOM영상이라는게 결국 각각의 영상 한장, 한장을 따로 저장하고 있기에 동영상과 비교해

보면 용량의 크기가 너무 커지는 단점이 있습니다. 그래서 기존 Pixel Format(7FE0,0010) Tag에 Image대신 MPEG2 와 같은 동영상

데이터를 저장하기도 합니다.

DICOM Standard Part.6 Data Dictionary에서 Transfer Syntax에 MPEG2 압축 관련이 존재하는것을 확인 할 수 있습니다.

(또한, DICOM Standard Part.5 Data Structures and Encoding에 각 MPEG 압축관련 자세한 설명이 나와 있습니다.)

transfer_syntax_mpeg

Multiframe DICOM영상은 마치 동영상 처럼 Play하면서 보기 때문에 cine영상이라고 부르기도 합니다.

Multiframe관련 Tag로는 주로 아래 Tag가 필요합니다.

multiframe_module

나머지 Tag는 그닥 중요한게 없으며 기존 1장으로 구성된 DICOM 영상을 읽는 방식과 동일하게 Pixel Format에 저장된 데이터를

읽어 들이면 되고, 단지 Number of Frames(0028,0008) 만큼 영상을 불러오기만 하면 됩니다.

Frame Increment Pointer(0028,0009)에 명시적으로 각 Frame의 Offset위치를 저장하기도 하지만 거의 저장되어 있지 않기에

그냥 1장의 영상을 계산후 그 크기만큼 이동후 다음영상을 읽는 방식을 취하는게 가장 안전성이 좋습니다.

07. Study & Series & Image

7월 13, 2016 DICOM No comments

DICOM을 다루다보면 Patient, Study, Series, Image라는 말을 많이 보게 됩니다.

아무래도 의료IT쪽에 익숙치 않다 보면 생소할 수도 있는 말인데요.

간단하게나마 위 용어들을 정리 해보려고 합니다.

Patient는 말그대로 환자를 나타내고요, Patient와 관련된 정보로는 Patient Name(0010,0010), Patient Sex(0010,0040), Age, …등과

같이 다양한 정보가 있습니다. Patient Sex(0010,0040)는 보통 사람일경우 Male, Female, Other 이렇게 구분을 많이 하고요, 실제 Tag에

Male, Female 이렇게 저장하는 경우도 있지만 보통은 M, F, O 이렇게 한글자만 저장합니다.

Patient를 구분하는 고유 번호는 Patient ID(0010,0020)이며 병원내부에서 사용하는 환자번호를 사용합니다.

Patient Name(0010,0010) Tag를 살펴보시면 VR이 PN으로 Person Name을 의미합니다. PN에 대한 자세한 설명은

DICOM Standard Part.5:Data Structure and Encoding을 한번 읽어보시기 바랍니다.

전에 언급했던 Patient First, Middle, Last Name의 구분자 code(‘^’)라던가 한글이름, 영어이름 혼합 사용법 등이 명시되어 있습니다.

한가지 Tip은 Konica CR초기 버전에서 DICOM Worklist시 영어이름은 보이지만 한글 이름으로만 보이지 않는경우

“English Name=한글이름” 형식으로 저장하시면 됩니다.혹 “=한글이름”이렇게만 입력하셔도 됩니다.

그리고 Patient Age는 Tag가 포함되지 않는 경우가 많으며, 대신 Patient BirthDate(0010,0030)를 삽입합니다. 환자의 나이는 BirthDate

만으로도 촬영시 나이, 현재 나이 등을 쉽게 계산해 낼수 있기 때문이죠.

이런 Patient에는 1개 혹은 그 이상의 Study를 가지게 됩니다. 그리고 하나의 Study는 한개 혹은 그이상의 Seires를 가지게 되고요.

Series도 1개 혹은 그 이상의 Image를 가지게 됩니다. 여기서 Image를 간혹 Instance라는 용어를 사용하기도 합니다.

아래 그림을 참고하시면 이해하는데 도움이 될 듯 합니다.

patient_study_series_image

여기서 Series의 개념이 조금 이해하기 어려울 수 있습니다.

보통적으로 CT촬영을 한다고 했을때 조영제를 투약후 촬영하는 경우가 있습니다. 이때 조영제를 투약전에 한번 검사를 수행하고,

다시 조영제를 투약후 다시 재검사를 수행하게되면, CT촬영이라는 검사 자체가 1개의 Study가 되고, 조영제 투약전 CT촬영, 조영제

투약후 CT촬영 이렇게 2개의 Series가 생성되게 됩니다.

그렇다고 반드시 Series의 촬영장비(Modality)가 동일한 것은 아닙니다. 간혹 PET-CT촬영을 하는경우 한 환자에게 한번의 검사를 수행시

한번은 PET을 촬영하여 Series No.1로 저장하고 CT를 촬영하여 Series No.2로 저장하게 됩니다. 이렇게 되면 Seires No.1의 Modality는

PET이며, Sereis No.2의 Modality는 CT가 되게 됩니다. 하지만 Study의 Modalty는 PET-CT가 되겠네요.

이런식으로 개념적으로 Patient, Study, Series, Image를 구분하게 됩니다.

06. SOP Class UID

7월 13, 2016 DICOM No comments

이번에 말씀드릴 내용은 SOP Class UID입니다.

하나의 DICOM파일이 있는경우 각각의 파일이 초음파 영상을 담고있는 DICOM인지, 내시경영상용 DICOM인지,

MR,CT용 인지 등등 각각의 DICOM이 담고있는 데이터의 종류(Class)를 나타내는 값이 있습니다.

그런 값을 UID형태로 저장되어 있는 Tag가 SOP Class UID(0008,1150) 입니다.

보통 아래와 같은 값을 가집니다.

sop_class_uid

(전체 목록은 DICOM Standard Part4.Service Class Specifications 를 참조)

즉 SOP Class UID(0008,1150) Tag의 값이 1.2.840.10008.5.1.4.1.1.1 이라는 값을 가진다면 이 DICOM 파일은 CR영상을

담고있다라고 인식하게 됩니다.

그럼 각 CR영상에서 필요한 정보를 해당 DICOM File에서 찾아 사용자에게 추가적인 정보를 얻을 수 있는겁니다.

DICOM에서는 SOP Class UID(0008,1150)과 같이 UID라는 값을 많이 사용하게 됩니다.

이기회에 하나씩 설명 드리죠.

SOP Instance UID(0008,0018)
DICOM 영상에서 가장 많이 보기도 하고 가장 중요한 Tag이기도 합니다. 즉 DICOM영상을 고유하게 해주는 식별 번호입니다.

해당 번호는 전세계 모든 영상과 구분되는 고유번호로 할당 되어야 합니다.

이 UID는 전세계 모든 영상과 구분되는 고유번호로 할당 되어야 합니다. 즉 DICOM을 만드는 입장 예를들어 의료영상 장비라던가

Gateway라 던가 새로운 DICOM 파일을 생성하는 소프트웨어에서 고유하게 이번호를 할당하여 제작하게 됩니다.

그렇다고 자기 하고싶은데로 막 만들지는 않고 나름 규칙이 있습니다.

보통 형태는 1.2.410.301000.1.2.101.2010101112.123.1212 이런 형태를 취합니다.

앞에 1.2 는 ISO 표준이라는 의미이며, 410은 ISO 표준 국가 코드 입니다. 미국은 840 입니다. 그래서 대부분의 Class UID, Transfer

Syntax 의 UID에 1.2.840 으로 시작하는 이유가 미국에서 제정된 UID값이기에 그런겁니다.

다음은 각 국가에서 DICOM UID 관련 인증 발급 기관에서 발급해 주는 번호 입니다. 저희는 과천에 기술 표준원인가??

오래되서 가물가물 하네요. 암튼 과천 정부 한 부서에서 발급해 줍니다. 수수료는 없구요.

즉 1.2.410.301000 까지는 거의 나름대로 규칙을 지켜주게 되구요. 그 이후 나머지는 각 회사에서 알아서 고유하게 UID를 생성하면

됩니다.

보통 제품의종류, 버전, 내부 개발구분코드와 같이 추후 유지보수가 용이하도록 나름 의미를 부여하게 됩니다.

여기에 SOP Instance UID(0008,0018) 는 전세계 고유한 번호로 생성되어야 하기에 Study Date와 Study Time을 포함하여

생성하는 경우가 많이 있습니다.

Study Instance UID(0020,000D) , Series Instance UID(0020,000E)
Study Instance UID(0020,000D)는 Study를 구분해주는 UID이며 Series Instance UID(0020,000E)는 Series를 구분해주는 UID입니다.

Series라는게 특정 Study에 종속되어 있다 보니 Series Instance UID(0020,000E) 생성시 보통 (Study Instance UID(0020,000D) +

Series Number 형식을 많이 사용합니다.

   Tip) 각 UID 생성시에 구분자 "." 뒤에 반드시 1~9 사이의 값이와야 합니다. 즉 0 이 오면 안됩니다.
   예를들어 Study Time을 UID에 포함시켜 오전 9시 10분 12초를 포함하여 만드는경우 
   1.2.410.301000.1.2.101.091012.1 와 같은형태로 만들면 안됩니다. 대신 0을 뺀 1.2.410.301000.1.2.101.91012.1 과
   같은 형태로 만들어야 합니다. 왜 그럴까요? 0을 붙여서 만들어도 다른 PACS나 대부분의 장비에서 인식하는데 별
   문제 없습니다. 대신 Global 업체의 PACS나 장비에서 오류가 발생됩니다. 
   애초에 넣지 말고 생성하세요. 그래야 정신 건강에 좋습니다. 

05. Pixel Data

7월 13, 2016 DICOM No comments

지금까지 DICOM File을 구성하는 Element에 대해 설명 했습니다.

그럼 실제 초음파 or 내시경 DICOM과 같이 이미지가 포함된 파일은 어떻게 저장될까요?

즉, 이미지 파일은 어디 저장 될까요?

DICOM파일은 이미지 자체도 Element로 저장됩니다. 바로 Pixel Data(7FE0,0010) Tag에 저장됩니다.

여기에 저장되는 이미지의 형태는 다른 Tag를 통해 달라지게 됩니다.

여기서 부터 많이 복잡합니다. ㅡㅡ; 하나씩 보죠.

가장 먼저 압축된 영상과 압축되지 않은 영상으로 구분됩니다.

압축된 영상은 DICOM에서 지원하는 압축 알고리즘이 존재하며 그 종류는 다음과 같습니다.

Transfer_syntax_compression

실제로는 이거보다 더 많은 종류가 있지만 여기에는 몇개만 올려 놓았습니다. 전체는 DICOM Standard Part6.에서 확인하세요.

즉, 해당 DICOM영상의 압축 종류는 Transfer Syntax(0020,0010) Tag의 UID값으로 판단하게 됩니다.

만약 Transfer Syntax값이 “1.2.840.10008.1.2.4.50”인경우 해당 DICOM 영상은 Jpeg으로 압축되어 있다는 의미 입니다.

즉 Pixel Data(7FE0,0010) Tag에는 Jpeg으로 압축된 데이터가 저장되어 있습니다.

Bitmap형식으로 저장된것과 다르게 Pixel Data가 압축된 경우에는 해당 Header까지 같이 저장되어 있기에

Pixel Data만을 jpeg 파일로 저장 후에 이미지 뷰어를 통해 보게되면 실제 이미지를 볼수 있습니다.

한가지 Tip 입니다.^^

하지만 “1.2.840.10008.1.2.1” or “1.2.840.10008.1.2”와 같이 Raw Bitmap 형태로 저장되는 경우에는 Pixel Data(7FE0,0010)에

Header가 포함되어 있지 않아 다른 Element의 Tag를 이용하여 Image화 시킬 수 있습니다.

우선 Raw Bitmap 형태의 Data인 경우 Photometric Interpretation(0028,0004) Tag를 보시면,

MONOCHROM1, MONOCHROM2인경우는 Gray scale 이미지를 뜻합니다. 즉 흑백 영상이죠.

PALETTE_COLOR인경우 Palette를 가지는 Bitmap을 뜻하죠. 그럼 보통 Palette의 크기는 256개로 1byte크기이기에

8bit Raw bitmap 데이터가 저장되어 있습니다.

한가지 Tip은 보통 PALETTE_COLOR로 설정되어 있더라도 Red Palette Color Lookup Table Data(0028,1201)과 같은

Tag가 없는경우가 많습니다. 이런경우는 기본값 즉 Gray scale형태로 표현하면 됩니다.

만약 Red Palette Color Lookup Table Data(0028,1201)에 Data가 존재하는 경우는 Red Palette Color Lookup Table

Descriptor(0028,1101)을 참조하여 Palette를 해석하면 됩니다.

RGB인경우는 r,g,b 1byte씩 총 24bit Color Bitmap이 저장되어 있습니다.

기타 추가적인 Photometric은 DICOM Standard Part3. C.7.6.3.1.2 Photometric Interpretation에서 확인하세요.

영상이 MONOCHROM1, MONOCHROM2인 경우 Bits Stored(0028,0101) Tag가 보통 8, 12, 16 값을 가지게 됩니다.

즉 흑백영상의 bit 수를 의미하죠. 8bit grayscale은 일반적으로 알고있는 흑백 bitmap이미지이고요, 12bit grayscale

영상은 주로 CT영상에서 사용하는 의료에서 많이쓰는 Bitmap형식 입니다. Pixel 크기가 12bit 이기에 8bit는 어둡고

밝은 정도가 256단계 이지만 12bit는 4096 단계로 더 해상도가 높게 저장을 하지요. 하지만 추후 CT는 Pixel에 밝기라는

값의 형태라기보다는 HU(Hounsfiled Uniit)이라는 형태로 저장하기에 조금 다르긴 합니다.

16bit는 주로 MR혹은 Nuclear Imaging, 즉 핵의학 영상에서 주로 사용 됩니다.

여기서 MONOCHROM1, MONOCHROM2차이는 단지 Pixel값이 0인경우 흰색이냐 검정색이냐 차이만 다른겁니다.

간혹 영상을 Display했는데 반전된 영상이 나왔다면 MONOCHROM해석이 잘못된것일 확률이 높습니다.