在找医学图像去噪数据集的时候,发现2016 0mayo clinic 的数据格式是.IMA,我现在像把这些.IMA格式的数据都转成为常见的.png格式或者.jpg格式的图。方法如下:
因为这些数据都是以病例形式存在的,如下图,L067、L096...、L506代表10个病例,每个病例里有若干.IMA文件。
现在我要把每个文件夹里的.IMA转成png形式的图片,同时将原来的.IMA文件简单命名为0.png、1.png.....
代码如下:
import pydicom
import numpy as np
import os
import cv2#下面getCtHU()是将.IMA文件转成HU形式
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#下面的windowsLevelTransform()是将上面的HU转为numpy形式
def windowsLevelTransform(Hu, window, level):img = Humin = level - float(window) * 0.5;max = level + float(window) * 0.5;#这个是CT窗口设置,相关问题百度或评论。下面调用这个函数时候,我拟定拟定窗口[-160,240]img[img < min] = minimg[img > max] = maxnorm_ = (img - min) / windownorm_.astype('float32')return norm_root = r'C:\Users\Gecaicheng\Desktop\去噪模型代码\full_3mm_sharp\L506\full_3mm_sharp' #这是每个病例的路径
savepath = r'C:\Users\Gecaicheng\Desktop\new CT\L506' #之后保存图片的路径#下面遍历每个切片
i=0
for filename in os.listdir(root):img = pydicom.read_file(os.path.join (root,filename)) #.IMA文件img_hu = getCtHU(img) #由.IMA文件转换成HU形式的img_np = windowsLevelTransform(Hu=img_hu, window=400, level=40) #再由HU形式的转成.numpy形式的cv2.imwrite(savepath+'\%d.png'%i, img_np*255) #注意这里img_np要乘上255即img_np*255,不然保存起来的图片看起来不爽,一片黑
上述代码是以L506病例为例,转换前后结果如下:
就这样,手动更改代码中的病例名称,挨个转变每个病例