Python的DICOM 影像正負片讀取兩種方式
因為工作關係需要接觸醫療影像,我們能拿到的最原始的影像資料就是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領域的菜雞,歡迎憶起研究討論和指教我,謝謝。