如何将nii格式文件转换成二维图像
How to convert nii format file into 2D image
我有一个扩展名为 .nii 的文件。我不知道如何将 .nii 文件转换为 2D format.My 问题是在将 .nii 文件转换为 2D 时,我会丢失一些关于 file.Which 格式的信息吗? dicom 或 png 或 bmp。
nii = load_nii('im.nii');
size(nii.img);
returns
ans =
39 305 305
并且是 uint8 格式
我可以使用挤压或调整大小吗?如何将调整大小应用于此图像;它是否会丢失信息?
是的,您可以像处理任何数组一样操作 image/sequence。
这是一个简单的示例,其中包含来自 NIH here 的数据。
数据集为4D,命名为"filtered_func_data.nii".
让我们加载数据集并访问结果结构的 img
字段:
S = load_nii('filtered_func_data.nii')
这里,S 是一个结构体,包含以下字段:
S =
hdr: [1x1 struct]
filetype: 2
fileprefix: 'filtered_func_data'
machine: 'ieee-be'
img: [4-D int16]
original: [1x1 struct]
我们可以使用字段 img
访问图像数据(您已经知道了):
A = S.img
如果我们检查大小,我们得到:
size(A)
ans =
64 64 21 180
所以数据集由 64x64 图像组成,depth/number 切片为 21,帧数为 180。
此时我们可以操纵 A
,因为我们喜欢重塑形状、调整大小或任何东西。
这是一个简单的代码(gif 动画),用于遍历 4D 数组中第一个时间点的每个切片:
NumSlices = size(A,3)
figure(1)
filename = 'MRI_GIF.gif';
for k = 1:NumSlices
imshow(A(:,:,k,1),[])
drawnow
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if k == 1;
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
pause(.1)
end
输出:
我觉得很不错。
所以在你的例子中,你得到了 [39 305 305]
的大小,你可以应用我对你的数据集所做的相同操作,它是 3D 的。
编辑
你的数据是一样的:
S = load_nii('Subject01.nii');
A = S.img;
NumSlices = size(A,3);
然后,如果您想要 2D 图像,则需要 select 3D 数组中的一个切片。
比如第一个切片是这样访问的:
A(:,:,1)
以此类推。
要将图像保存为 png,请使用 imwrite。
希望对您有所帮助!
我有一个扩展名为 .nii 的文件。我不知道如何将 .nii 文件转换为 2D format.My 问题是在将 .nii 文件转换为 2D 时,我会丢失一些关于 file.Which 格式的信息吗? dicom 或 png 或 bmp。
nii = load_nii('im.nii');
size(nii.img);
returns
ans =
39 305 305
并且是 uint8 格式
我可以使用挤压或调整大小吗?如何将调整大小应用于此图像;它是否会丢失信息?
是的,您可以像处理任何数组一样操作 image/sequence。
这是一个简单的示例,其中包含来自 NIH here 的数据。
数据集为4D,命名为"filtered_func_data.nii".
让我们加载数据集并访问结果结构的 img
字段:
S = load_nii('filtered_func_data.nii')
这里,S 是一个结构体,包含以下字段:
S =
hdr: [1x1 struct]
filetype: 2
fileprefix: 'filtered_func_data'
machine: 'ieee-be'
img: [4-D int16]
original: [1x1 struct]
我们可以使用字段 img
访问图像数据(您已经知道了):
A = S.img
如果我们检查大小,我们得到:
size(A)
ans =
64 64 21 180
所以数据集由 64x64 图像组成,depth/number 切片为 21,帧数为 180。
此时我们可以操纵 A
,因为我们喜欢重塑形状、调整大小或任何东西。
这是一个简单的代码(gif 动画),用于遍历 4D 数组中第一个时间点的每个切片:
NumSlices = size(A,3)
figure(1)
filename = 'MRI_GIF.gif';
for k = 1:NumSlices
imshow(A(:,:,k,1),[])
drawnow
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if k == 1;
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
pause(.1)
end
输出:
我觉得很不错。
所以在你的例子中,你得到了 [39 305 305]
的大小,你可以应用我对你的数据集所做的相同操作,它是 3D 的。
编辑 你的数据是一样的:
S = load_nii('Subject01.nii');
A = S.img;
NumSlices = size(A,3);
然后,如果您想要 2D 图像,则需要 select 3D 数组中的一个切片。
比如第一个切片是这样访问的:
A(:,:,1)
以此类推。
要将图像保存为 png,请使用 imwrite。
希望对您有所帮助!