如何将多个.nii文件合并为单个.nii.gz文件(Matlab环境)
将多个.nii文件合并为单个.nii.gz文件的Matlab实现
gzip('*.nii')仅对单个NIfTI文件做压缩,无法合并文件内容。要实现合并后压缩,需先合并多个.nii文件的图像数据,再生成单个压缩文件,具体步骤如下:
1. 获取目标.nii文件列表
先获取当前目录下所有待合并的.nii文件:
niiFiles = dir('*.nii'); % 文件在其他目录时,需指定完整路径
2. 读取并合并图像数据
假设所有待合并的.nii文件空间尺寸(x/y/z轴)一致,这里以按第四维(如时间序列、多模态通道)合并为例,若需按其他维度(如z轴切片)合并,调整cat的维度参数即可:
% 初始化合并数据变量 mergedData = []; % 读取第一个文件的头信息作为基准(确保空间信息统一) refHeader = niftiinfo(niiFiles(1).name); for idx = 1:length(niiFiles) % 读取当前文件的图像数据 currData = niftiread(niiFiles(idx).name); % 合并数据 if isempty(mergedData) mergedData = currData; else mergedData = cat(4, mergedData, currData); % 4代表第四维,可按需改为3(z轴)等 end end % 更新头信息的图像尺寸,匹配合并后的数据 refHeader.ImageSize = [refHeader.ImageSize(1:3) size(mergedData, 4)];
3. 保存并压缩为单个.nii.gz文件
提供两种实现方式:
方法1:先保存未压缩文件再压缩
% 保存合并后的未压缩.nii文件 niftiwrite(mergedData, 'merged_result.nii', refHeader); % 压缩为.nii.gz gzip('merged_result.nii'); % 可选:删除临时未压缩文件 delete('merged_result.nii');
方法2:直接保存为压缩格式(Matlab R2020b及以上版本支持)
niftiwrite(mergedData, 'merged_result.nii.gz', refHeader);
注意事项
- 所有待合并的.nii文件必须具有相同的空间分辨率、x/y/z轴尺寸,否则合并会失败。若尺寸不一致,需先做图像配准或重采样处理。
- 合并维度需根据实际数据类型选择:合并连续切片选第三维(
cat(3,...)),合并时间序列选第四维(cat(4,...))。 - 若文件头信息存在差异(如像素间距、坐标系),需统一头信息后再合并,避免最终文件读取异常。
内容的提问来源于stack exchange,提问作者Ed K
相关产品推荐
相关产品推荐

