【1】参考文献
SimpleITK、pydicom的安装使用——踏上python生物医学图像处理的初学之路
【2】代码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : test10.py
@Time : 2021/04/30 17:56:59
@Author : Jian Song
@Contact : 1248975661@qq.com
@Desc : None
'''
# here put the import lib
import SimpleITK as itk
from matplotlib import pyplot as plt
import cv2
import os
'''
[1]SimpleIKT 读取数据
需要注意,SimpleIKT读取出来的图片的维度顺序与NiBabel 不同
https://blog.youkuaiyun.com/Emily_Buffy/article/details/104879558?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
[2]批量nii文件转换为png图像
https://blog.youkuaiyun.com/weixin_43330946/article/details/89576759
Question1:如果不保存图片,怎么将nii文件的图像信息转换为普通的图像像素信息,
设计到图像的方向、圆点、缩放尺寸的变化。
'''
#创建一个不存在的文件夹
def makefilepath(folder_path):
if not os.path.exists(folder_path): #判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(folder_path)
#显示.nii文件
def show_nii(img):
num=1
for i in range(0,img.shape[0],10):
plt.imshow(img[i,:,:],cmap='gray')
plt.subplot(4,6,num)
num+=1
#print("Translate success!The total are %s"%num)
#将.nii文件转换为png图片并存放在文件夹中
def niitopng(img):
num=1
for i in range(0,img.shape[0],1):
makefilepath("./spliteimg/")
str1="spliteimg/"+str(i)+".png"
cv2.imwrite(str1,img[i,:,:])
num+=1
#该函数原本是想将nii文件的图像转换为普通图像后压入到列表中
#问题1:nii文件的像素值范围不在0-255,远大于或者小于该区间,如何调整?? 暂未解决
#将.nii文件转换为单张图像压入到列表中,
def niiintolist(img):
imglist=[]
for i in range(0,img.shape[0],1):
image_one=img[i,:,:]
cv2.imshow("test image",image_one)
if i==1:
print(image_one.shape)
cv2.waitKey(100)
imglist.append(image_one)
#将单张图像的像素数据写入到文件中
def savevalue(image):
with open("result.txt","a") as f:
for i in range(image.shape[0]):
for j in range(image.shape[1]):
f.write(str(image[i][j]))
f.write(' ')
f.write('\n')
print("打印了第%s行"%j)
print("save succesful!")
if __name__=="__main__":
itk_img=itk.ReadImage('F:\\mediacldata\\Pancreasimages\\Pancreas-CT\\data\\PANCREAS_0001.nii.gz')
img=itk.GetArrayFromImage(itk_img)
print(img.shape) #(144, 192, 160)
show_nii(img)
# niitopng(img)
plt.show()
# niiintolist(img)
【3】结果展示