【医学图像预处理】

1 dicm数据变为jpeg或者ndarray

这里使用的是pydicom函数库,但是也可以考虑使用simpleitk

    im = pydicom.dcmread(Database +'/'+name)
    im = im.pixel_array.astype(float)
    
    rescaled_image = (np.maximum(im,0)/im.max())*255 # float pixels
    
    final_image = np.uint8(rescaled_image) # integers pixels
    final_image = Image.fromarray(final_image)

2 对文件夹的自动索引

os.walk可以循环调用,直至读到文件
os.listdir只读到下一级文件夹,不会越级
os.path.join()可以进行路径合成,但是一般的加操作好像也是可以的
glob.glob可以使用正则表达式匹配
关于文件名的排序,可以使用sort:
f get_sort_key(string):
return int(re.search(r’\d+', string).group(0))
sorted_list = sorted(original_list, key=get_sort_key)

同时,实现对特定命名规则的文件间读取可以使用正则表达式:

#获取当前目录下的所有文件和文件夹的名称
dirs = os.listdir()

#使用正则表达式筛选出符合命名规则的文件夹
pattern = re.compile(r’^\d’)
selected_dirs = [d for d in dirs if pattern.match(d)]

#打印出结果
print(selected_dirs)

以下是通用的

def get_names_of_imgs_inside_folder(directory):
    names = []
    #basepth=os.listdir(directory)
    for root, dirnames, filenames in os.walk(directory):
        for filename in filenames:
            _, ext = os.path.splitext(filename) #分离扩展名  
            if ext in [".dcm"]:
                
                names.append(filename)
           
Database=r'/mnt/sda/data/FudanCancer/MRI'
# basepth=os.listdir(r'/mnt/sda/data/FudanCancer')
# for pth in basepth:
#Database=glob.glob('\\mnt\\sda\\data\\FudanCancer'+'\\'+pth+'\\'+'*-***-CT')
names = get_names_of_imgs_inside_folder(Database)

for name in names:
    image = convert(Database,name)
    rename=name.replace('.dcm','')
    image.save(rename+'.jpg')

3 关于pydicom的使用

可以进行三维展示,也可以进行重采样,但是我觉得没有simpleitk方便,读取和一般的操作可以用用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值