iT邦幫忙

0

大量將DICOM(.dcm)圖檔轉換成PNG或JPG的方法

  • 分享至 

  • xImage

我嘗試將DICOM(.dcm)圖檔轉換為PNG或JPG檔,但是轉換出來的檔案顏色不正常!
想詢問前輩們,是否知道哪一個環節出了問題~
兩種方式批量轉換的結果顏色都是錯誤的...
感謝前輩們不吝指點!

#補充說明:顏色錯誤是指原本應該白底黑字或彩色,但是成果顏色過紅...

import dicom2jpg

dicom_dir = "/Users/USER/Desktop/Database"
export_location = "/Users/USER/Desktop/Database2"

# convert all DICOM files in dicom_dir folder to jpg format
dicom2jpg.dicom2jpg(dicom_dir, export_location)

# convert all DICOM files in dicom_dir folder to png format
dicom2jpg.dicom2png(dicom_dir, export_location) 
import pydicom
import os
import imageio
path = '/Users/USER/Desktop/Database/'
images = os.listdir(path)

#print(images)
for i in images:
    #print(i)
    in_ = path + i
    out = 'jpg_path' + os.path.splitext(i)[0] + '.jpg'
    ds = pydicom.read_file(in_)
    img = ds.pixel_array
    print(img.shape)

    imageio.imwrite(out,img)
froce iT邦大師 1 級 ‧ 2023-03-17 09:37:21 檢舉
https://medium.com/analytics-vidhya/how-to-convert-grayscale-dicom-file-to-rgb-dicom-file-with-python-df86ac055bd

根據這篇,DICOM要看你的格式,一般來說是1通道的uint16表示一個像素點,所以要先把他轉成0到255的一般灰階圖片格式,再利用影像庫的轉換,轉換成RGB三通道才會有彩色。
您好,我使用的與您的範例不同~我使用的是報告格式的DICOM,非一般影像(比如腦或肝圖)
froce iT邦大師 1 級 ‧ 2023-03-17 09:57:07 檢舉
你要自己看你的格式自己轉啊,範例是給你看的不是給你直接拿來用的,我只是告訴你處理的思路。
而且我又沒你的圖片,我哪知道你用啥格式啊...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
hokou
iT邦好手 1 級 ‧ 2023-03-17 10:11:47
最佳解答

其實 froce 上面的那篇文章已經有提到
How to convert grayscale DICOM file to RGB DICOM file with Python

醫學影像的數值範圍不一樣,所以你要去取得 DICOM 內的相關參數值或是一般的數值(e.g., width: 400, level: 50 for abdominal CT),再做一次轉換

def apply_ct_window(img, window):
    # window = (window width, window level)
    R = (img-window[1]+0.5*window[0])/window[0]
    R[R<0] = 0
    R[R>1] = 1
    return R
display_img = apply_ct_window(img, [400,50])

中文的類似這種
HU值和像素值的转化,以dicom数据为例
亨氏單位

HU值的计算公式:
HU = pixel_val * slope + intercept

補充:看了一下套件,應該會幫你做處理,可以再確認看看
https://pypi.org/project/dicom2jpg/
https://github.com/ykuo2/dicom2jpg

看更多先前的回應...收起先前的回應...

您好,上面的範例都做過測試...原始為黑白的圖片、轉換後都會變成偏紅色的圖片,因此才上來提問~謝謝您

hokou iT邦好手 1 級 ‧ 2023-03-17 11:03:57 檢舉

簡單說,影像本身的 width 和 level 可能跟你透過軟體看到的數值不一樣,所以你要調整
例如上面的 abdominal CT 是調整成 width: 400, level: 50

hokou iT邦好手 1 級 ‧ 2023-03-17 12:07:09 檢舉

另一個黑白跟紅色也許可以確認一下通道
是不是存成 RGB 然後只讀到 R 的部份

目前測試如您所提到,看起來是這樣沒錯!
直接將RGB改為Gary可以解決單張讀取的問題

我要發表回答

立即登入回答