我有一个扩展名为.nii的文件。我不知道如何将.nii文件转换为2D格式。我的问题是将.nii文件转换为2D时,我丢失了一些关于该文件的信息。哪种格式好? dicom或png或bmp。
nii = load_nii('im.nii');
size(nii.img);
返回
ans =
39 305 305
它是uint8格式
我可以使用挤压或调整大小吗?如何对此图像应用调整大小;是否丢失信息?
答案 0 :(得分:4)
是的,您可以像处理任何数组一样操纵图像/序列。
以下是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图像,深度/切片数为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图像,你需要在3D数组中选择一个切片。
例如,第一个切片的访问方式如下:
A(:,:,1)
等等。
要将图像另存为png,请使用imwrite。
希望有所帮助!