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方便,读取和一般的操作可以用用