이 페이지의 코드가 시작되지 않았습니다.

index.html을 폴더에서 바로 열면 브라우저가 JavaScript 모듈을 막습니다. 그래서 영상 하나를 골라도 아무 일도 일어나지 않아요. 폴더를 http로 띄워서 여세요:

powershell -ExecutionPolicy Bypass -File serve.ps1

그런 다음 http://localhost:8080/을 여세요.

DICOM 뷰어 — .dcm 영상을 브라우저에서 열기

CT, MRI, 엑스레이, 초음파를 창과 헤더와 계측까지.

언어: 한국어
소스 보기
영상은 절대 업로드되지 않습니다. 서버가 아예 없으니까요.

영상을 열고 디코딩하는 일은 모두 이 브라우저가 합니다. 헤더도, 픽셀도, 창도, 계측도 그렇습니다. 이 페이지 건너편에는 진료 정보를 보낼 서버가 아예 없어서, 여기 있는 무언가가 보내고 싶어도 보낼 곳이 없습니다. 그리고 이 파일에 대한 어떤 것도 — 환자 이름도, 검사도, 파일 이름도 — 누구에게도 전해지지 않습니다.

실시간 확인: 확인 중…

오프라인: 확인 중…

말만 믿지 마십시오. 개발자 도구를 열고 네트워크 탭을 보면서 영상을 열어 보십시오. 이미지도, 태그도, 파일 이름도 실어 나르는 요청은 하나도 없습니다. 아니면 인터넷을 끊고 그냥 열어 보십시오.

영상 고르기

폴더 전체를 한꺼번에 끌어다 놓으면 파일이 각자의 시리즈로 다시 묶이고 순서도 맞춰집니다. 아무것도 업로드되지 않고, 파일에 다시 쓰이는 것도 없습니다.

Markdown으로 보기

DICOM 파일 여는 법

  1. 파일을 고르십시오. .dcm 파일 하나, 아니면 디스크의 폴더 전체입니다. CT나 MRI는 한 장에 파일 하나라서, 전부 한꺼번에 끌어다 놓는 것이 시리즈를 다시 맞추는 방법입니다. 파일은 브라우저가 디스크에서 바로 읽고, 그러는 동안 어디로도 아무것도 보내지 않습니다.
  2. 시리즈를 고르십시오. 한 검사에는 보통 여러 개가 들어 있습니다. 스카우트 영상이 있고, 그다음에 촬영마다 하나씩입니다. 각 시리즈는 장비가 찍은 순서대로 쌓이는데, 그 순서는 번호가 아니라 각 장이 몸의 어디에 있는지에서 나옵니다. 번호는 늘 같은 방향으로 매겨지지 않습니다.
  3. 창을 맞추십시오. 영상을 읽을 수 있게 만드는 조작이고, 이미지 편집기에는 없는 것입니다. 영상 위를 가로로 끌면 창이 넓어지고 위아래로 끌면 중심이 움직입니다. CT라면 이름이 붙은 창 — 폐, 뼈, 뇌, 연부조직 — 을 골라도 됩니다. CT의 단위는 세상 어느 장비에서나 같습니다.
  4. 쌓인 장을 넘기십시오. 영상 아래의 슬라이더가 장을 넘기고, 영상을 한 번 클릭한 뒤에는 화살표 키도 같은 일을 합니다. 여러 프레임이 든 파일 — 초음파 루프나 혈관조영 — 은 옆의 버튼으로 재생됩니다.
  5. 무언가를 재 보십시오. 계측으로 바꾸고 선을 그으십시오. 파일이 픽셀 간격을 밝혀 두었다면 답은 밀리미터로 나오고, 정사각형이 아닌 픽셀도 감안합니다. 밝혀 두지 않았다면 답은 픽셀로 나오고 그렇다고 말합니다. 없는 배율을 지어내지 않습니다.
  6. 헤더를 읽으십시오. 파일의 모든 요소를 번호와 표준이 부르는 이름과 담긴 값까지, 검색할 수 있게 보여 줍니다. 그 위에는 바로 이 파일에서 무엇이 환자를 가리키는지가 나열됩니다. 이름보다 훨씬 많습니다.
  7. 필요한 것을 가져가십시오. 화면에 보이는 영상을 PNG로, 맞춘 창 그대로, 아무것도 태워 넣지 않고 가져가거나, 헤더 전체를 일반 텍스트로 가져갑니다. 둘 다 이미 페이지에 있는 것으로 이 안에서 만듭니다.

자세한 설명

DICOM 파일 여는 법, 그리고 그 안에 무엇이 있는지 병원 CD에 무엇이 들어 있는지, 파일에 왜 확장자가 없는지, .dcm 영상을 브라우저에서 어떻게 여는지, 창과 레벨이 실제로 무슨 일을 하는지, 그리고 영상이 그림 말고 환자에 대해 무엇을 지니고 있는지.

자주 묻는 질문

제 영상이 어딘가로 업로드되나요?

아닙니다. 파일을 읽고 디코딩하고 그리는 일은 모두 이 브라우저가 이 기기의 하드웨어에서 합니다. 이 도구에는 서버 쪽이 없고, 페이지의 Content-Security-Policy에는 접속할 수 있는 주소가 모두 적혀 있는데 그중 이 사이트의 것은 하나도 없습니다. 네트워크 선을 뽑아도 영상은 계속 열립니다.

이 사이트의 다른 어떤 페이지보다 여기서 그 사실이 중요합니다. DICOM 파일은 헤더에 환자 이름과 생년월일과 등록번호를 담고 있어서, 그것을 뷰어에 올린다는 것은 낯선 사람에게 그림이 아니라 진료 기록을 건넨다는 뜻입니다.

어떤 DICOM 파일을 열 수 있나요?

기본 transfer syntax 세 가지 — implicit과 explicit little endian, 그리고 폐기된 big endian — 의 비압축 파일에, deflated, RLE Lossless, baseline JPEG, JPEG Lossless까지 열립니다. 마지막 것이 병원 디스크에 담긴 CT와 MRI 검사 대부분이 압축된 방식입니다.

JPEG 2000, JPEG-LS, 그리고 동영상에 쓰이는 MPEG과 HEVC 계열은 디코딩하지 못합니다. 그것들은 컴파일된 라이브러리 수 메가바이트가 필요한 코덱이고, 필요할 때 그것을 받아 오는 페이지는 오프라인에서 동작하는 페이지가 아닐 것입니다. 그런 형식의 파일도 열리기는 합니다. 헤더 전체를 읽어서 보여 주고, 그림 자리에는 코덱 이름을 밝힌 한 줄이 들어갑니다. 아무 말도 해 주지 않는 깨진 이미지 아이콘 대신입니다.

‘창과 레벨’이 무엇이고 왜 필요한가요?

CT 한 장에는 서로 다른 값이 사천 개쯤 들어 있고 화면은 회색 이백쉰여섯 단계를 보여 줍니다. 그 사천 개 중 어느 구간이 그 이백쉰여섯을 모두 차지할 것인가를 고르는 것이 창입니다. 그 아래는 전부 검정, 위는 전부 흰색, 사이에 있는 것이 회색들에 펼쳐집니다.

같은 파일이 설정 두 가지에서 다른 영상처럼 보이는 이유가 그것이고, 폐와 뼈를 동시에 볼 수 없는 이유도 그것입니다. CT의 숫자는 하운스필드 단위이고 절대적으로 정의되어 있습니다. 물이 0이고 공기가 −1000입니다. 그래서 이 페이지의 이름 붙은 창들은 영상의학과 의사가 판독 장비에서 쓰는 것과 같은 숫자입니다. MRI나 초음파에는 그런 척도가 없고, 열릴 때의 창은 파일 자신이 요청하는 창입니다.

제 계측이 왜 픽셀로 나오나요?

그 파일이 픽셀 하나의 크기를 밝히지 않아서입니다. 그것을 담는 필드가 Pixel Spacing (0028,0030)이고 단위는 밀리미터인데, 아주 많은 초음파 영상과 스캔한 문서와 secondary capture에는 그 필드가 그냥 없습니다.

있는 경우에는 계측이 밀리미터로 나오고 축마다 자기 간격으로 재는데, 픽셀이 정사각형이 아닌 영상에서는 그것이 중요합니다. 없는 경우에 정직한 답은 픽셀 수이고, 배율을 골라서 결과를 길이인 양 내놓는 대신 그렇다고 말합니다.

폴더를 열었더니 여러 시리즈로 나뉘었습니다. 왜죠?

안에 들어 있는 것이 그러해서입니다. 한 검사는 시리즈로 이루어집니다. 스카우트 영상, 그다음에 촬영이나 재구성마다 하나씩입니다. 그리고 모든 파일은 자기가 어느 시리즈에 속하는지를 Series Instance UID (0020,000E)에 적어 둡니다. 목록은 폴더가 아니라 그것으로 만들어집니다. 폴더는 보통 전부 뒤섞인 이름 목록이니까요.

시리즈 안에서 장의 순서는 각 장이 몸의 어디에 있는지로 정해지고, 그것은 Image Position과 Image Orientation에서 나옵니다. Instance Number가 뻔한 기준이지만 첫 번째가 아니라 대비책입니다. 그 번호는 파일을 쓴 무언가가 매기는 것이고, 환자가 누운 방향과 같은 방향으로 갈 이유가 없습니다.

‘무엇이 환자를 가리키는가’ 목록은 무슨 뜻인가요?

영상 속 사람의 이름을 적었거나 그 사람이 누구인지 좁히는 필드를, 이 기기 위의 이 파일에서 읽어 모두 적은 것입니다. 목록의 근거는 DICOM 표준의 PS3.15입니다. 어떤 데이터셋을 비식별화되었다고 부르려면 무엇이 빠져야 하는지를 정한 부분입니다.

이것이 있는 이유는, 사람들이 틀리는 지점이 영상에 이름이 들어 있다는 사실이 아니기 때문입니다. 그 밖에 얼마나 더 들어 있느냐가 문제입니다. 생년월일, 접수번호, 의뢰 의사, 기관, 장비 일련번호, 그리고 검사 UID들이 있는데, 그 UID는 파일을 만든 아카이브로 정확히 되돌아가는 열쇠입니다. 이름만 지운 영상은 익명이 아닙니다.

이 도구는 보여 줄 뿐입니다. 아무것도 쓰지 않고 아무것도 바꾸지 않으므로, 그중 어느 것도 빼 줄 수 없습니다.

영상을 익명화할 수 있나요?

못 하고, 할 수 있는 척도 일부러 하지 않습니다. 이 페이지는 읽습니다. DICOM 파일을 쓰는 코드가 없습니다. 이 페이지가 하는 일은 당신의 파일에 정확히 무엇이 들어 있는지 알려 주는 것이고, 그것이 알아내기 어려운 부분이자 사람들이 틀리는 부분입니다.

식별 정보를 빼내는 도구는 기준이 훨씬 높은 별개의 작업입니다. 픽셀은 건드리지 않으면서 파일을 다시 쓰고, 검사 전체에 걸쳐 UID를 일관되게 바꾸고, 일부 장비가 이름의 두 번째 사본을 숨겨 두는 비공개 요소까지 맞혀야 합니다. 그것은 뷰어에 덧붙일 일이 아니라 이 사이트의 로드맵에 올라 있는 일입니다.

.dcm 확장자가 없는 파일이나 깨진 파일도 열리나요?

둘 다 열립니다. 확장자는 보지 않습니다. 확인하는 것은 파일 자체입니다. 흔히 붙는 128바이트 서문 없이 쓰인 데이터셋 — 네트워크에서 바로 받아 온 영상이 그렇게 생겼습니다 — 은 첫 번째 요소에서 인코딩을 알아내어 읽고, 페이지는 그렇게 했다고 말합니다.

중간에서 끊긴 파일은 끊긴 데까지 읽습니다. 손상 이전의 모든 것을 보여 주고, 몇 번째 바이트에서 멈췄는지 적어 둡니다. 뷰어가 가장 아쉬운 경우가 바로 그런 파일이라, 마지막 열두 바이트 때문에 파일 전체를 버리는 것은 잘못된 동작일 것입니다.

이것이 판독용 뷰어인가요?

아닙니다. 의료기기가 아니고, 어떤 규제 평가도 거치지 않았으며, 여기 있는 어떤 것도 임상적 판단에 쓰여서는 안 됩니다. 화면은 보정되어 있지 않고, 브라우저는 검증된 렌더링 경로가 아니며, 그 둘 다 웹 페이지 안에서 고칠 수 있는 것이 아닙니다.

대신 사람들이 영상을 여는 다른 모든 이유에는 잘 맞습니다. 디스크에 무엇이 들어 있는지 확인하기, 강의 자료나 논문에 쓸 한 장 꺼내기, 헤더 읽기, 다른 프로그램이 왜 이 파일을 거부하는지 알아보기, 그리고 영상이 그 사람에 대해 무엇을 지니고 있는지 보기입니다.

제 파일을 바꾸나요?

아닙니다. 이 도구는 읽기만 합니다. 결과 파일도, 재인코딩도 없고, DICOM을 쓰는 버튼도 여기에는 없습니다. 내려받을 수 있는 것은 화면에 보이는 영상의 PNG와 헤더의 일반 텍스트 사본입니다. 원본은 디스크에 그대로 있습니다.

무료인가요? 계정이 필요한가요?

무료이고, 계정도 로그인도 체험판도 없습니다. 파일 크기에도, 여는 파일 개수에도 제한이 없습니다. 이 기기의 메모리 말고는요. 이 사이트는 광고로 운영되고, 광고 쪽에는 파일에 대한 것이 전해지지 않습니다.

오프라인에서 작동하나요?

예. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 것을 보이는 가장 간단한 방법이기도 합니다. 영상을 어딘가로 보내 그려 오는 도구였다면 선을 뽑는 순간 멈췄을 테니까요.