DICOM 파일의 진짜 핵심은 결국 “영상”이다.
이 영상은 DICOM 구조상에서 Pixel Data 태그(7FE0,0010)에 저장된다.
하지만 단순한 이미지 파일과 달리, DICOM에서는 픽셀 데이터의 구조, 압축 방식, 색상 표현 방식 등이 전송 문법(Transfer Syntax)에 따라 달라지며,
그 결과 동일한 영상이라도 압축 방식에 따라 파일 크기, 뷰어 호환성, AI 파싱 성공 여부가 달라진다.
이번 글에서는 Pixel Data가 실제로 어떻게 구성되는지, DICOM에서 사용되는 주요 압축 방식과 그 특징, 그리고 실무에서 주의할 점들을 예제와 함께 설명한다.
1. Pixel Data 태그 구조
Pixel Data는 DICOM 파일의 끝부분에 위치하며, 태그 번호는 다음과 같다:
- (7FE0,0010) → Pixel Data
- VR: OB (Other Byte), OW (Other Word)
- Value: 실제 이미지 바이너리 (압축 또는 비압축)
Pixel Data는 기본적으로 다음 구조를 따른다:
[Tag: 7FE0,0010] [VR] [Length] [Value]
예를 들어, 압축되지 않은 512×512 CT 이미지의 픽셀 값이 그대로 들어갈 수도 있고,
JPEG 또는 JPEG2000으로 압축된 바이너리 데이터가 들어갈 수도 있다.
2. 전송 문법(Transfer Syntax)과 압축 방식
Pixel Data의 해석 방식은 **Transfer Syntax UID (0002,0010)**에 의해 결정된다.
이 UID 값에 따라 압축 방식 및 바이트 순서 등이 달라진다.
주요 Transfer Syntax 예시
UID | 이름 | 압축 여부 |
1.2.840.10008.1.2 | Implicit VR Little Endian | 비압축 |
1.2.840.10008.1.2.1 | Explicit VR Little Endian | 비압축 |
1.2.840.10008.1.2.4.50 | JPEG Baseline (Lossy) | 압축 |
1.2.840.10008.1.2.4.70 | JPEG Lossless | 압축 |
1.2.840.10008.1.2.4.90 | JPEG2000 Lossless | 압축 |
1.2.840.10008.1.2.5 | RLE Lossless | 압축 |
3. 압축 방식별 특징
DICOM 송수신 시에는 장비/시스템 간 다양한 압축 방식을 사용할 수 있다. 주요 방식 몇 가지를 정리하면 다음과 같다.
압축 형식 | 특징 | 실무 사용 예시 |
Uncompressed | 픽셀값 그대로 저장, 해석 쉬움 | PACS, AI 학습, 연구 데이터 |
JPEG Baseline | 손실 압축, 파일 용량 작음 | 저장 공간이 중요한 장비 |
JPEG Lossless | 원본 손실 없음, 빠른 디코딩 | 영상 보존 필요성 높을 때 |
JPEG2000 | 고효율 압축, 느린 디코딩 | 최신 PACS 시스템 |
RLE | 비트맵 유사 압축, 호환성 낮음 | 특정 장비에서만 사용 |
4. 실무에서 흔한 문제 상황
1) AI 모델이 압축된 DICOM을 읽지 못함
Python pydicom은 JPEG 압축을 기본적으로 해석하지 못함
➤ 추가 라이브러리(gdcm, pylibjpeg) 설치 필요
# 압축된 DICOM에서 픽셀 데이터를 불러오려면
import pydicom
from pydicom.pixel_data_handlers.util import apply_voi_lut
ds = pydicom.dcmread("compressed.dcm", force=True)
if 'PixelData' in ds:
arr = ds.pixel_array
2) PACS 업로드 오류
장비가 JPEG 압축을 지원하지 않거나
UID가 잘못 지정되어 있음 → 전송 실패
🔧 해결법: 압축 해제 후 다시 저장
도구 예시:
gdcmconv --raw compressed.dcm uncompressed.dcm
3) 이미지가 비정상적으로 보임
- JPEG 압축인데 뷰어가 압축 해제 기능을 지원하지 않음
- Transfer Syntax UID와 실제 압축 방식이 일치하지 않음
→ 이 경우 Pixel Data가 깨져 보이거나 영상이 로딩되지 않음
5. 비압축 vs 압축 비교 예시
항목 | 비압축 | JPEG 압축 |
파일 크기 | 500 KB ~ 1 MB | 100 KB 내외 |
디코딩 속도 | 빠름 | 느림 |
AI 파싱 | 안정적 | 추가 설정 필요 |
이미지 품질 | 원본 그대로 | 손실 가능성 있음 |
6. 실무에서의 권장 방침
목적 | 권장 압축 방식 |
PACS 저장 | JPEG Lossless 또는 Uncompressed |
AI 학습 | Uncompressed |
외부 전송 | JPEG2000 (압축률 + 보존성) |
연구 데이터셋 공개 | JPEG Lossless 또는 RLE 변환 필요 |
📌 특히 AI 데이터셋을 구축할 경우에는 비압축 또는 JPEG Lossless 형식으로 변환하는 것을 권장한다.
결론
DICOM 파일의 Pixel Data는 단순한 이미지가 아니라 전송 문법(Transfer Syntax)에 따라 압축 방식과 해석 방식이 달라진다.
압축 여부는 AI 학습, PACS 호환성, 뷰어 안정성 등과 직결되며, 파일 내부의 Transfer Syntax UID를 통해 정확히 파악하고 관리해야 한다.
실무에서는 압축된 파일을 해석할 수 있는지 여부를 사전에 확인하고, 필요 시 압축 해제 후 재저장을 통해 문제를 해결할 수 있다.
다음 글에서는 실제로 사용되는 DICOM 뷰어 및 도구 소개로 이어질 예정이다.
'개발 > DICOM 이야기' 카테고리의 다른 글
15. DCMTK 사용법 – 명령어 기반 DICOM 도구 활용하기 (1) | 2025.07.29 |
---|---|
14. DICOM 뷰어 추천 및 비교 – RadiAnt, Weasis, MicroDicom 등 (1) | 2025.07.29 |
12. DICOM에서의 날짜, 시간, 성별, 환자 ID 처리 방식 (2) | 2025.07.29 |
11. 환자 정보, 검사 정보, 이미지 정보의 구조 이해 (1) | 2025.07.29 |
10. DICOM 파일 내부 구조 분석 예제 (2) | 2025.07.29 |