如何读取并对nii三维数据进行切片处理、转换格式保存

1.首先,我们从https://ww2.mathworks.cn/matlabcentral/fileexchange/8797-tools-for-nifti-and-analyze-image?s_tid=mwa_osa_a 下载Tools for NIfTI and ANALYZE image,并放到toolbox路径中;

2.添加导入路径:addpath('/MATLAB/R2013a/toolbox/NIfTI_20140122');

3. 导入图像:

close all;

clear all;

clc;

nii = load_nii( 'CT_wl_0.nii' );  % 装载.nii数据

img = nii.img;  % 因为这个文件有img和head二个部分,其中img部分是图像数据

4:切片分层显示图像:

[n1,n2,n3] = size(img); %读取文件的各个维度大小

imshow(img(:,:,10),[]); %预览第10个维度的图片

for i = 1:n3

figure(i) %建立一个图形窗口,如果没有这一句则所有切片只会依次显示于一个窗口

ti = imshow(img(:,:,i),[]);

end

5:保存图像为tif格式或其它格式:

imwrite(img(:,:,1),'result.tif');

>> imwrite(img(:,:,2),'result02.tif');

>> imwrite(img(:,:,3),'result03.tif');

>> imwrite(img(:,:,4),'result04.tif');

>> imwrite(img(:,:,5),'result05.tif');

>> imwrite(img(:,:,6),'result06.tif');

>> imwrite(img(:,:,7),'result07.tif');

>> imwrite(img(:,:,8),'result08.tif');

>> imwrite(img(:,:,9),'result09.tif');

>> imwrite(img(:,:,10),'result10.tif');

>> imwrite(img(:,:,11),'result11.tif');

>> imwrite(img(:,:,12),'result12.tif');

>> imwrite(img(:,:,13),'result13.tif');

>> imwrite(img(:,:,14),'result14.tif');

>> imwrite(img(:,:,15),'result15.tif');

>> imwrite(img(:,:,16),'result16.tif');

>> imwrite(img(:,:,17),'result17.tif');

>> imwrite(img(:,:,18),'result18.tif');

 

注:1.只有imwrite途经保存的图像没有白边

    2.保存到当前文件夹下:imwrite(I,'stripes2.png');

保存到当前文件夹下的一个子文件result下:imwrite(I,'./result/stripes2.png');

保存到当前文件夹上一层的一个文件夹result下:imwrite(I,'../result/stripes2.png');

其中I为要保存图像,stripes2.png为文件名,保存为png格式,要提前建立一个文件夹result才可以。

3.保存多个图像时,顺序命名图像文件名称需用到 num2str 或 sprintf命令。

 

 

针对第三点进行补充,可以自动命名并保存所有切片的程序如下:

nii = load_nii( 'MR_std.nii' );  % 装载.nii数据

img = nii.img;  % 因为这个文件有img和head二个部分,其中img部分是图像数据

save image.mat img  % 将数据变成mat格式

load 'image.mat'  % 加载数据

[n1, n2, n3] = size(img);   % 获取.nii文件的三个维度,一般1、2维是图像维度,第三维是切片

for i = 1:n3   % 开始切片数据轮寻

figure(i)   % 开始显示图片

ti = imshow(img(:,:,i),[]);  % 显示每一张切片图像

title(['result',num2str(i)])

     set(gcf,'color',[1 1 1])

     F(i)=getframe(gcf);

     imwrite(F(i).cdata,['result',num2str(i),'.tif'])   

end

你可能感兴趣的:(如何读取并对nii三维数据进行切片处理、转换格式保存)