Matlab 如何将nii格式文件转换为二维图像

Matlab 如何将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的文件。我不知道如何将.nii文件转换为2D格式。我的问题是,在将.nii文件转换为2D格式时,是否丢失了有关该文件的一些信息。哪种格式好?dicom或png或bmp

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)