ITK 实现多张图像转成单个nii.gz或mha文件案例
主要实现的部分是利用NameGeneratorType读入系列图像,见头文件#include"itkNumericSeriesFileNames.h"。
需要包含的头文件有:
#include"itkImage.h"
#include"itkImageSeriesReader.h"
#include"itkImageFileWriter.h"
#include"itkNumericSeriesFileNames.h"
#include"itkPNGImageIO.h"//转成JPG格式,将PNG替换成JPEG就可以。
intmain(intargc,char**argv)
{
//需要四个参数,分别是程序起点,第一张图像的编号和最后一张图像的变化,输出文件的名称(包含路径)
if(argc<4)
{
std::cerr<<"Usage:"<ImageType;
typedefitk::ImageSeriesReaderReaderType;
typedefitk::ImageFileWriterWriterType;
ReaderType::Pointerreader=ReaderType::New();
WriterType::Pointerwriter=WriterType::New();
//输入参数定义
constunsignedintfirst=atoi(argv[1]);
constunsignedintlast=atoi(argv[2]);
constchar*outputFilename=argv[3];//输出的文件名加上对应格式的后缀即可,如mha或nii.gz
//系列图像读入
typedefitk::NumericSeriesFileNamesNameGeneratorType;
NameGeneratorType::PointernameGenerator=NameGeneratorType::New();
nameGenerator->SetSeriesFormat("vwe%03d.png");
nameGenerator->SetStartIndex(first);
nameGenerator->SetEndIndex(last);
nameGenerator->SetIncrementIndex(1);//张数的增长间距
//读入图像,写出图像,进行Update
reader->SetImageIO(itk::PNGImageIO::New());
reader->SetFileNames(nameGenerator->GetFileNames());
writer->SetFileName(outputFilename);
writer->SetInput(reader->GetOutput());
try
{
writer->Update();
}
catch(itk::ExceptionObject&err)
{
std::cerr<<"ExceptionObjectcaught!"<
补充知识:将一组png图片转为nii.gz
主要之前使用matlab对numpy数组存放方式不是很了解.应该是[z,x,y]这样在itksnamp上看就对了
importSimpleITKassitk
importglob
importnumpyasnp
fromPILimportImage
importcv2
importmatplotlib.pyplotasplt#plt用于显示图片
defsave_array_as_nii_volume(data,filename,reference_name=None):
"""
saveanumpyarrayasniftyimage
inputs:
data:anumpyarraywithshape[Depth,Height,Width]
filename:theouputfilename
reference_name:filenameofthereferenceimageofwhichaffineandheaderareused
outputs:None
"""
img=sitk.GetImageFromArray(data)
if(reference_nameisnotNone):
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')
foriinrange(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()
以上这篇ITK实现多张图像转成单个nii.gz或mha文件案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。