如何正确将RGB图像转换为可被ITK-SNAP正常识别的NIfTI格式
问题原因
你之前的代码没有为NIfTI头设置RGB专用标识,NIfTI格式默认将数组最后一维识别为空间维度,因此ITK-SNAP会把形状为(128, 128, 3)的数组当作包含3个切片的3D灰度体数据处理,而非2D RGB图像。
解决代码
直接调整保存时的头信息配置即可,示例如下:
import nibabel as nib import numpy as np from nibabel import nifti1 # 你的原始RGB图像读取逻辑,输出为shape (H, W, 3)的numpy数组 x = load_jpg_image(filename='input.jpg') # 强制转换为uint8类型,ITK-SNAP 3.6.0仅支持8位RGB格式的NIfTI if x.dtype != np.uint8: x = x.astype(np.uint8) # 仿射矩阵可根据你的实际空间坐标替换,无特殊需求用单位矩阵即可 affine = np.eye(4) # 创建图像对象并配置头信息 img = nifti1.Nifti1Image(x, affine) # 标识数据为RGB向量格式 img.header.set_intent('RGB') img.header.set_data_dtype(np.uint8) img.header['datatype'] = nifti1.NIFTI_TYPE_RGB24 # 保存结果 nib.save(img, 'output.nii')
补充说明
- 如果需要将多张2D RGB图像拼接为3D RGB序列,将数组调整为
(高度, 宽度, 切片数, 3)的形状后,仍可复用上述头信息配置逻辑 - 打开ITK-SNAP加载文件时,若弹出加载配置弹窗,确认数据类型识别为RGB即可正常显示
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

