pt格式就是pytorch支持的一种格式,在网络的输出时,可以把非图像文件(不是模型)保存为pt格式 ,再讲信息读成numpy格式,再将某一切片或某一通道转化成图像。
比如说三通道的空间位移场,可视化:
'''
plt.show()旋转2D图像,必须在后面加下面的
矢状面 [::-1, ::-1]
横断面 .transpose((1, 0))
冠状面 .transpose((1, 0))[::-1, ::]
.transpose((1, 0))主对角线翻转(左上——右下为主对角线)
[::, ::]不变
[::-1, ::]上下翻转
[::, ::-1]左右翻转
[::-1, ::-1]左右再上下翻转
'''
import SimpleITK as sitk
import cv2
import os
import torch
import numpy as np
def pt2jpg(save_dir, mhaPath, wc=40, ws=300):
# 使用SimpleITK读取数据,并使用GetArrayFromImage()函数获得图像信息
img_data = torch.load(mhaPath)
img_data = img_data[0]
print(img_data.shape, type(img_data))
channel = img_data.shape[1]#0是冠状面,1是横断面,2是矢状面
low = wc - ws / 2
high = wc + ws / 2
all_img = []
# 将医疗图像中的取值范围设置在(wc - ws / 2, wc + ws / 2)之间
# 然后归一化0-255之间并保存
for s in range(channel):
slicer = img_data[:, s, :]#1是横断面
slicer = np.transpose(slicer, [1, 0, 2])
slicer = slicer[::-1, ::]
#slicer[slicer < low] = low
#slicer[slicer > high] = high
img = cv2.normalize(slicer, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
cv2.imwrite(os.path.join(save_dir, str(s) + '.png'), img)
return all_img
suanfa = 'TM_OLEB_DE_NJ_e-9'
gz_path = 'D:/project/Results/brain/' + suanfa + '/3flow.pt'#原始nii.gz文件
save_dir = 'D:/project/Results/png/' + suanfa + '_flow/'#保存图片序列路径
if not os.path.exists(save_dir):
os.makedirs(save_dir)
new_img_nc = pt2jpg(save_dir, gz_path)