Matlab 如何将nii格式文件转换为二维图像
我有一个扩展名为.nii的文件。我不知道如何将.nii文件转换为2D格式。我的问题是,在将.nii文件转换为2D格式时,是否丢失了有关该文件的一些信息。哪种格式好?dicom或png或bmpMatlab 如何将nii格式文件转换为二维图像,matlab,image-processing,Matlab,Image Processing,我有一个扩展名为.nii的文件。我不知道如何将.nii文件转换为2D格式。我的问题是,在将.nii文件转换为2D格式时,是否丢失了有关该文件的一些信息。哪种格式好?dicom或png或bmp nii = load_nii('im.nii'); size(nii.img); 返回 ans = 39 305 305 它是uint8格式的 我可以使用挤压还是调整大小?如何将调整大小应用于此图像;是否丢失信息?是的,您可以像处理任何数组一样处理图像/序列 下面是一个简单的例子,
nii = load_nii('im.nii');
size(nii.img);
返回
ans =
39 305 305
它是uint8格式的
我可以使用挤压还是调整大小?如何将调整大小应用于此图像;是否丢失信息?是的,您可以像处理任何数组一样处理图像/序列 下面是一个简单的例子,数据来自NIH 数据集为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
字段访问图像数据(您已经知道了):
如果我们检查尺寸,我们得到:
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]
,您可以应用与我在处理数据集时所做的相同的操作,该数据集是三维的
编辑
与您的数据相同:
S = load_nii('Subject01.nii');
A = S.img;
NumSlices = size(A,3);
然后,如果想要二维图像,需要在三维阵列中选择一个切片
例如,第一个切片的访问方式如下:
A(:,:,1)
其余的就这样
要将图像另存为png,请使用
希望有帮助 是的,看起来像。虽然看起来305x305更有意义,但您可以尝试排列数据集并显示它以确保。切片的数量是第三维的,因此在本例中,它看起来像它的305。这看起来很奇怪,但如果图像是305x305,有39个切片,它会更有意义。你可以把它放在一个托管网站上,如果你想的话我会看看。嗯,我可能会想到Dropbox或Google Drive?好吧,我试过你的数据,效果很好。我将编辑我的答案。我想将此图像转换为二维
A(:,:,1)