DICM(DICOM), IMA 医学图像 预处理 调窗(window-leveling)
dcm|dicm是醫學圖像常見格式(IMA可看作dicm同類型的格式[1]),是直接能從機器上獲得的圖像格式,但是如果使用深度神經網絡進行處理和其他操作需要對原始的圖像格式進行處理才能夠使用。
首先對于CT圖像需要明確的是我們從機器上獲得的是X ray穿過物體后投影在探測器上,探測器接收的數據是投影的數值(projection data-->sinogram(projection image) 這個過程也要進行數值轉換,如取對數等操作).
dicm應該是對投影后數據前處理完畢進行重建后的圖像,但是圖像的像素值并不一定以Hu為單位(應該跟廠家有關,比如IMA是西門子CT設備產生的圖像,不是HU單位),因此要查看dicm文件的文件頭信息確認像素值的單位,如果不是HU需要處理[2]。
對于IMA文件第一步轉換為HU格式,第二步進行調窗,第三步可根據情況縮放范圍自行選擇處理或者不處理送給神經網絡或者其他操作。
(1)轉換為HU格式:[3,4]中大致講清楚了轉換的方法,但是實現對于我想使用單張圖像轉換不太好用,因此參考代碼有如下改動。
def getCtHU(dicm):'''直接傳入dicm文件/IMA文件'''img=np.array(dicm.pixel_array).astype('int32')img[img == -2000.0] = 0Hu = np.array(img).astype('float64')RescaleIntercept = dicm.RescaleInterceptRescaleSlope = dicm.RescaleSlopeif RescaleSlope != 1:Hu = Hu * RescaleSlopeHu += RescaleInterceptreturn Hu(2)獲得HU為單位的圖像的矩陣后,需要針對HU圖像進行調窗,以適應于我們對不同部位的圖像進行分析(醫學圖像中不同部位的適用的HU范圍不同,這個范圍叫做窗口),在imageJ中窗口的大小叫做window,窗口的中心叫做level,在這幾個參考的帖子中有不同的叫法,在此按照ImageJ 的名稱[5,6]。
def windowsLevelTransform(Hu, window, level):img = Humin = level - float(window) * 0.5;max = level + float(window) * 0.5;img[img < min] = minimg[img > max] = maxnorm_ = (img - min) / windownorm_.astype('float32')return norm_調窗后的數據就是想要查看的數據范圍了,在這里對不同部位調窗的數據值設定也不相同[7].
調窗前 調窗后
?
?reference
(21條消息) python如何打開.ima文件格式的醫學影像(已爬坑,.IMA為西門子CT設備的另一種醫學影像文件格式)_巨魔戰將-CSDN博客_ima文件
總結
以上是生活随笔為你收集整理的DICM(DICOM), IMA 医学图像 预处理 调窗(window-leveling)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于matlab的简易诊断系统,基于ma
- 下一篇: Matlab电气课程设计,电气工程课程设