将多个png或者jpg图片转为dicom或者nii格式
原创
©著作权归作者所有:来自51CTO博客作者mb62d4cb3345700的原创作品,请联系作者获取转载授权,否则将追究法律责任
dicom和nii很复杂。
在网上找了好几个小时,很少有自己能够解释清楚的。
单个图片转dcm
推荐下载这个软件:
dicom-converter官网
缺点:只能把一张图片转化为nii格式
python代码转:
主要之前使用matlab 对numpy数组存放方式不是很了解.应该是[z,x,y]这样在itksnamp上看就对了
import SimpleITK as sitk
import glob
import numpy as np
from PIL import Image
import cv2
import matplotlib.pyplot as plt # plt 用于显示图片
def save_array_as_nii_volume(data, filename, reference_name = None):
"""
save a numpy array as nifty image
inputs:
data: a numpy array with shape [Depth, Height, Width]
filename: the ouput file name
reference_name: file name of the reference image of which affine and header are used
outputs: None
"""
img = sitk.GetImageFromArray(data)
if(reference_name is not None):
img_ref = sitk.ReadImage(reference_name)
img.CopyInformation(img_ref)
sitk.WriteImage(img, filename)
image_path = './oriCvLab/testCvlab/img/'
image_arr = glob.glob(str(image_path) + str("/*"))
image_arr.sort()
print(image_arr, len(image_arr))
allImg = []
allImg = np.zeros([165, 768,1024], dtype='uint8')
for i in range(len(image_arr)):
single_image_name = image_arr[i]
img_as_img = Image.open(single_image_name)
# img_as_img.show()
img_as_np = np.asarray(img_as_img)
allImg[i, :, :] = img_as_np
# np.transpose(allImg,[2,0,1])
save_array_as_nii_volume(allImg, './testImg.nii.gz')
print(np.shape(allImg))
img = allImg[:, :, 55]
# plt.imshow(img, cmap='gray')
# plt.show()
多个图片转dcm
这里需要使用python或者dcmtk库,进行更深入细节的编程,但是需要对这两种格式本身有比较深入的了解。