Python的DICOM 影像正負片讀取兩種方式

Chin-Yi Ji
Dec 12, 2020

--

因為工作關係需要接觸醫療影像,我們能拿到的最原始的影像資料就是DICOM格式的影像檔,D ICOM影像檔是醫療影像常用的格式,他的優勢是能在影像中就存很多個tags(像是PatientID, Age, Sex and so on…)也可以儲存自訂的tags。

詳細的DICOM影像處理可以參閱以下的文章:

上面有滿詳細的介紹。

這篇文章的主題是正負片,是在CT 或 X-ray影像會出現的議題,為什麼影像要拍正片和負片呢? 主要是因為醫師或放射師在造影的時候想看的東西不一樣。

正片和負片的tag是在dicom annotation中的 [0x00280004],裡面若是MONOCHROME1為負片影像,MONOCHROME2則為正片影像,兩者的影像對比是完全相反的

正片和負片的tag是在dicom annotation中的 [0x00280004],裡面若是MONOCHROME1為負片影像,MONOCHROME2則為正片影像,兩者的影像對比是完全相反的

在讀取影像檔的的時候,就我目前知道的有兩種方法:

一個是tensorflow裡的tfio.image.decode_dicom_image

另一個則是python package : pydicom

1. tfio.image.decode_dicom_image

要搭配tf.io.read_file(檔名),其中:

on_error: skip:有錯就跳過,lossy:有錯給scale轉

scale: 預設為 preserve:保存原本的數值 auto: rescale 原本的數值 成 使用的dtype。

ex: 原本是 uint8的話數值會是在0–255之間,若dtype 為uint16會線性轉換成0–65535之間

dtype: 想要的數值資料型態

以一張負片影像為例子:

這邊特別需要注意的是:

讀出來的影像似乎會自動轉成正片

2. pydicom

要載 pylibjpeg

讀取 dicom 路徑:

IMAGE = pydicom.dcmread(path)

影像由 .pixel_array讀取

IMA = IMAGE.pixel_array

以一張負片影像為例子:

這邊就和原本的dicom tag 一樣

讀出來的是原contrast沒有轉正片

這邊我個人認為除非是要放在tensorflow裡面加速,不然用pydicom來讀影像會顯示原本的raw scale,處理起來比較直觀。

以上是我工作的小小心得和處理方式,我是一個初入AI領域的菜雞,歡迎憶起研究討論和指教我,謝謝。

--

--

Chin-Yi Ji
Chin-Yi Ji

Written by Chin-Yi Ji

New to AI field, climbing filed and alcohol field. A totally foodie, tea and nature lover

No responses yet