在找医学图像去噪数据集的时候,发现2016 0mayo clinic 的数据格式是.IMA,我现在像把这些.IMA格式的数据都转成为常见的.png格式或者.jpg格式的图。方法如下:
因为这些数据都是以病例形式存在的,如下图,L067、L096...、L506代表10个病例,每个病例里有若干.IMA文件。
![](https://img-blog.csdnimg.cn/img_convert/1df414388f49734e7cb0916472afdeb5.png)
![](https://img-blog.csdnimg.cn/img_convert/43236883cb49c3feec5352b70224dd32.png)
现在我要把每个文件夹里的.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] = 0
Hu = np.array(img).astype('float64')
RescaleIntercept = dicm.RescaleIntercept
RescaleSlope = dicm.RescaleSlope
if RescaleSlope != 1:
Hu = Hu * RescaleSlope
Hu += RescaleIntercept
return Hu
#下面的windowsLevelTransform()是将上面的HU转为numpy形式
def windowsLevelTransform(Hu, window, level):
img = Hu
min = level - float(window) * 0.5;
max = level + float(window) * 0.5;#这个是CT窗口设置,相关问题百度或评论。下面调用这个函数时候,我拟定拟定窗口[-160,240]
img[img < min] = min
img[img > max] = max
norm_ = (img - min) / window
norm_.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病例为例,转换前后结果如下:
![](https://img-blog.csdnimg.cn/img_convert/525abe5a63a7e87ca9c4a661a5a3c891.png)
转换前
![](https://img-blog.csdnimg.cn/img_convert/87898cc78cc401de4accd5bd045a66a4.png)
转换后
就这样,手动更改代码中的病例名称,挨个转变每个病例
![](https://img-blog.csdnimg.cn/img_convert/1c22fe0ae266329319c668a735d99c63.png)