abox.tools

語言: 繁體中文

怎麼開啟一個 DICOM 檔案,以及裡面有什麼

醫院給的光碟是一個裝著沒有字尾的檔案的資料夾,外加一個給 Windows XP 寫的閱片器。那些檔案是 DICOM,而它們一點也不神秘。一份影像就是一個裝滿欄位的頭資訊,加上一堆畫素。下面說怎麼看它,那些操作是什麼意思,以及這個檔案除了影像之外還帶著什麼。

開啟DICOM 閱片器 CT、MR、X 光和超音波,連窗寬窗位、頭資訊和測量一起。

以 Markdown 檢視

先說結論

開啟 DICOM 閱片器,把整個裝著檔案的資料夾拖進去。它們會在你自己的機器上讀出來,各自歸回原來的序列,並按裝置拍攝的順序疊好。什麼都不會上傳,也不會往你的檔案裡寫回任何東西。

要是你拿到一張光碟,正猶豫該開哪個檔案:全部,一次性。一次 CT 或者 MR 不是一個檔案,是一層一個檔案,一次胸部檢查就是三百來個。

醫院給的光碟裡都有什麼

通常是四樣,而只有一樣要緊。

影像並不需要那個閱片器。這個格式是公開的標準,檔案自己就讀得了;光碟上那個可執行檔案只是能讀它們的一個程式,不是唯一的一個。

檔案為什麼沒有字尾

因為 DICOM 不需要。每個檔案都內建標記:128 個位元組的空白,然後是 DICM 這四個字母,再然後是一小塊欄位,說明這個檔案其餘部分是怎麼寫的。讀的一方查的是那四個字母,不是以 .dcm 結尾的名字。

這也是為什麼把檔名改成 .dcm 什麼也改變不了,以及為什麼一個非要字尾的閱片器是在沒必要地較勁。直接從醫院網路裡寫出來的檔案,連那 128 個位元組和那個標記都沒有,就是前面什麼都不加的裸資料,讀的一方得從它的第一個元素推斷出編碼方式。那是正常檔案,不是壞檔案。

窗寬窗位,這才是要緊的那個操作

這是讓一張醫學影像不同於一張照片的唯一一件事,也是影像編輯軟體不適合看它的原因。

一層 CT 裡大約有四千個不同的數值,你的螢幕只能顯示兩百五十六級灰。總得有什麼來決定這四千裡哪一些落到那兩百五十六裡,這個決定就是窗。比它低的全黑,比它高的全白,中間那一段鋪滿灰階。

挪一下窗,同一個檔案看著就像另一次檢查。這不是渲染出了毛病,這正是關鍵。肺和骨都在同一層裡,卻沒法同時看清:一個能看出充氣肺紋理的窗,會把所有骨頭變成純白;一個能看清肋骨骨小梁的窗,會把整個肺變成純黑。

CT 上的數值是亨氏單位,是絕對定義的,不是每臺機器各算各的:水是 0,空氣是 −1000,全世界每一臺 CT 都如此。所以閱片器才能給出帶名字的窗,肺窗、骨窗、腦窗、軟組織窗,而且它們在你的檔案上跟在那臺出報告的工作站上是同一個意思。常用的幾個是:

MR 上沒有這樣的標度。數值取決於序列、線圈和機器,所以沒有什麼可以拿來給預設起名字,一開始用的窗就是檔案自己要求的那個。每一份影像都帶著一個建議。

檢視器:一張灰階斷層圖,旁邊是窗寬窗位控制元件、常見組織範圍的預設,四角還有檢查資訊。
真正起作用的兩個控制元件是窗寬和窗位。一次掃描攜帶的層次比螢幕能顯示的多,你看的是其中哪一段,由它們決定。

為什麼有時候翻層的方向是反的

閱片器得決定把這些檔案按什麼順序排,而檔案裡有兩樣東西可以用。

Instance Number 是一個計數。這是最順手的選擇,可它是由寫這些檔案的東西分配的,沒有理由按病人躺著的方向去編號。一次從腳往上重建、卻從頭往下編號的檢查,翻起來就是倒的;而由兩次重建拼起來的一套序列,編號甚至可能直接重複。

Image Position (Patient) 說的是這一層實際在什麼位置,單位是毫米,而且用的座標系是釘在病人身上的,不是釘在機器上的。不管編號做了什麼,按它排都是對的,而且還有個有用的副產品:一旦層按物理位置排好了,層與層之間的距離就量得出來,於是閱片器可以告訴你層間距是 5 mm,也能發現少了一層,而這件事檔案本身從來不說。

量點什麼

影像是量出來的資料,所以在它上面量出的長度是真實長度,前提是檔案寫了畫素之間隔多遠。寫這個的只有一個欄位,Pixel Spacing,單位毫米,幾乎每一次 CT 和 MR 都有。

超音波影像、掃描檔,還有存成 DICOM 的螢幕截圖,常常沒有這一項。沒有的時候,毫米這個答案就不存在誠實的版本,而一個照樣給出毫米的閱片器是自己編了一個比例。畫素數是對一個檔案回答不了的問題給出的正確答案。

也要留意不是正方形的畫素,這在 CT 之外很常見。按畫素量再乘一個間距,只有在兩個方向相等時才對,每個方向都得用自己的那個數。

一份影像除了影像還帶著什麼

這是人們弄錯的地方,也是對這類檔案要小心的理由。

DICOM 檔案不是加了後設資料的圖片,是裝著圖片的病歷。頭資訊是一串欄位,在一次尋常的臨床影像上,裡面裝著:

你拿到的任何一個檔案都帶著這全部,而且檔案走到哪裡它們就跟到哪裡。刪掉姓名是不夠的:一個出生日期、一個郵編大小範圍內的機構,加上一個檢查時間,認出一個人的本事跟姓名差不多;而檢查的 UID,對任何能進那個檔案庫的人來說,指認得分毫不差。

有些裝置還會把病人姓名的第二份副本放進一個私有欄位。那種欄位的含義沒有在任何地方公開過,而多數匿名化工具根本不動它,因為它們無從知道裡面裝著什麼。

一張卡片,列出檔案裡能指認患者的東西:姓名、編號、出生日期和檢查描述。
除了那張圖,掃描還隨身帶著這些。為什麼不該把它用郵件發出去,正是這張卡片在說明。

別為了看一眼就把影像傳上去

這件事通常是這麼解決的:搜一下「dicom viewer online」,然後找到一個上傳框。而那一刻剛剛發生的事情是,一個陌生人手裡有了一份病歷的副本:畫素、姓名、出生日期、住院號,以及回到檔案庫的那把鑰匙。

根本沒有這個必要。讀一個 DICOM 檔案就是解析一段頭資訊、再把一些整數拆出來,瀏覽器做這個乾得很好。所以這裡的閱片器壓根沒有聯網功能:沒有 fetch,沒有 XMLHttpRequest,就算有什麼想送,也沒有東西送得出去。把頁面載入一次,斷網,它照樣開啟影像。

把檔案傳到線上轉換網站安全嗎?講了怎麼在本站或者任何別的站上核實這個說法。而這一類檔案,正是最值得核實的那一類。

瀏覽器做不到什麼

兩件事,而且兩件都值得說明白。

它不是診斷用的閱片器。你的螢幕沒有校準,瀏覽器不是經過驗證的渲染鏈路,也沒有哪個網頁透過過監管評估。為了做臨床判斷去讀一份影像,那是它出報告的那臺工作站的工作。看看光碟裡有什麼、取一層放進課件或者論文、讀頭資訊、弄清另一個程式為什麼拒收這個檔案,這些都是在瀏覽器裡開啟它的好理由。

有些壓縮過的影像解不開。DICOM 允許好幾種壓縮方案,瀏覽器實現了其中一種。未壓縮的檔案、run-length 編碼的檔案、baseline JPEG,還有醫院匯出時大多用的 JPEG Lossless,都打得開。JPEG 2000、JPEG-LS 和影片用的那幾種格式,需要好幾 MB 的編譯庫。影像解不開的時候,頭資訊照樣完整可讀,而那通常本來就是你要來看的那一半。