의료 플랫폼(WEB PACS) 개발 도전기(1단계)
안녕하세요. 개인 프로젝트로 의료 플랫폼(WEB PACS) 개발에 도전하고 있는 웹개발자(프론트엔드) 이연수입니다. 개발 도전에 대한 로그를 남기고 싶어 이렇게 글을 쓰게 되었습니다.
[목표] 의료(다산업군) AI 연구 지원을 위한 WEB PACS(Workspace, Viewer, AI 연동)
[단계] 1단계
[상태] 의료 영상데이터(파일) - DICOM(.dcm) : CT, MRI, PET 등 binary 분석 및 출력
[언어] TypeScript(Node), React(라이브러리), Next.js(프레임워크)
우선 다소 생소하실 수 있는 의료 영상데이터 DICOM(.dcm) 파일을 설명 드리고자 합니다. 다양한 의료 영상촬영 장치(CT, MRI, PET 등)에서 장치로부터 파일(데이터) 표준 프로토콜이 적용된 의료 영상데이터(파일)이 DICOM(.dcm)으로 생성됩니다. 프로토콜은 디지털 영상전송 표준 의원회에서 DICOM 데이터(파일) 표준을 정하여 관리되고 있습니다.
우선, 저는 해당 파일을 오픈소스를 사용하지 않고, 직접 오픈소스와 표준 내용을 참고하여 개발하는 것을 목표로 하고 있습니다. 그렇다 보니 파일의 binary 코드를 확보하여 분석하는 것을 시작하였습니다.
파일을 열어보면, 1byte(8bit)로 파일 바이트 저장 순서(Byte Order)에 맞춰 리틀 에디안(Little-endian)과 빅 에디안(Big-endian)으로 저장됩니다. 순서에 따라 바이트를 읽는 방식이 달라지기 때문에 해당 부분도 유의 깊게 살펴보았습니다.
바이트를 ASCII로 변형된 부분을 확인하였을 때, DICOM 파일은 메타정보에 File Preamble(더미 바이트) - 128Byte, DICOM prefix("DICM") - 4Byte, File Meta Elements(파일 메타 요소) - NByte로 구성되어 있었습니다.
위 정보를 확보 후 웹에서 로컬 DICOM 파일을 로드 할 수 있도록 인터페이스를 다음과 같이 구현하였습니다.
이 후 파일을 ArrayBuffer로 읽어 Uint8Array로 형변환을 하여, BufferStream을 구성하였습니다. 위에서 분석한 파일 binary 길이에 맞춰 데이터 offset(여백)과 length(길이)를 계산하고, DICOM 표준에서 제공하는 File Meta Elements(파일 메타 요소)의 메타 요소 태그(Tag)정보, 요소 유형(VR)정보, 데이터 길이 등을 추출하여, 메타데이터를 확보하였습니다. 태그 정보는 DICOM 표준에서 정의되어 있는데 약 3,400개 정도로 해당 정보의 이름(설명)을 위해 dictionary(사전)을 .json 파일로 만들어 맵핑하는 작업을 수행하였습니다.
해당 정보를 파일 데이터와 맵핑하여 요소 이름을 표현하고, File Meta Elements(파일 메타 요소)에서 추출한 데이터 여백과 길이(offset, length)를 ByteStream에 적용하여, Character(String), Uint16, Uint32, Float, Double 등 요소 유형(VR)정보에 맞춰 데이터 값을 아래와 같이 확보하였습니다.
DICOM 파일의 경우 이미지 영상 데이터를 2D, 3D 표현(추출)하기 위해 포함된 의료정보(환자정보 포함) 및 이미지 Pixel Data에 대한 다양한 정보를 메타정보에 포함하고 있습니다. 따라서 모든 메타정보에 대한 이해와, 그래픽 표현을 위한 색(광학), 압축(이미지), 사이즈, 방향(유클리드 공간) 등 수학적 계산이 필요한 것 같습니다.
지금까지 다소 마이너하지만, 개인적으로 기술을 정리하기 위해 진행하고 있는 의료 플랫폼(WEB PACS) 개발 도전기(1단계)를 로그글로 간략하게 남겼네요.
긴 글 읽어 주셔서 감사합니다. : )
다양한 분야의 AI Vision 영상(이미지) 처리를 연구하며, 개인 프로젝트(기술 정리)를 수행할 것 같아요~ 관련 부분에 관심 있으시면 편하게 커피챗 요청주세요~
댓글
로그인 후 댓글을 남길 수 있습니다.
로그 자세히 설명해주셔서 정말 재미있게 읽었어요. 진행하시는 프로젝트 매우 기대합니다!