批量处理需要用到 for 循环,那就有个基本的要求:文件名起码得统一。
首先我有 19 个 .nii
文件,需要转成 .mat
文件进行输出查看。
基本思路是使用 for 循环处理,将每个 .nii
文件保存为 .mat
文件然后绘制在画布上,最终的效果是输出 19 张图像。
MATLAB 代码:
clc;
clear all;
% 读取所有.nii文件
file = dir('*.nii');
% 获取文件个数
len = length(file);
for i = 1:len
% 获取nii文件名
nii_file = file(i).name;
% 加载nii文件
nii = load_nii(nii_file);
% 存储img部分
img = nii.img;
% 定义mat文件名
mat_name = strcat('img_', int2str(i), '.mat');
% 存储mat文件
save(mat_name);
% 加载mat文件
load(mat_name);
figure(1)
subplot(4,5,i), imshow(img(:,:,1),[]), title(i)
end
load_nii()
函数可以加载.nii
文件,将其保存在变量nii
中- 用
img
存储nii
文件的 image 部分 save()
和load()
函数分别是保存为.mat
文件和读取.mat
文件subplot(4,5,i)
在一张画布上绘制子图,表示 4 行 5 列,i 是子图序号,从左到右、从上到下依次递增,这个可以自己实验看看imshow()
显示图像img(:,:,1)
是因为我的数据结构是 160*120*1 的,第三维是图像切片,前两维是图像的宽高,所以输出时前两维都需要输出,第三维选择一个图像切片进行输出,所以这个参数需要根据自己数据结构的实际情况进行修改title()
设置每个子图的标题
运行一下就 OK 啦~
这里就是读取 .mat 文件输出的 19 个图像,如果需要对图像进行其他处理就另外再讲。
2020/3/9 更新:
.nii
文件读取后如果有多个变量,若直接 save
为 .mat
格式,则会把变量区的所有变量都保存在 mat 文件。如果只需要保存 nii 文件中的 img
变量,只需要在 save 时指定一下:
% 加载nii文件
nii = load_nii(file);
% 存储img部分
img = nii.img;
% 定义mat文件名
mat_name = strcat('img_', int2str(i), '.mat');
% 存储mat文件
save(mat_name, 'img');
需要特别注意的是,save 函数是根据字符串查找变量的,所以 save 第二个输入参数必须是 'img'
而非 img
。如果使用 save(mat_name, img)
就会出现如下错误:
错误使用 save
必须为字符串标量或字符向量。