如何将nii格式文件转换为2D图像

时间:2015-04-15 02:34:45

标签: matlab image-processing

我有一个扩展名为.nii的文件。我不知道如何将.nii文件转换为2D格式。我的问题是将.nii文件转换为2D时,我丢失了一些关于该文件的信息。哪种格式好? dicom或png或bmp。

nii = load_nii('im.nii');
size(nii.img);

返回

ans =

    39   305   305  

它是uint8格式

我可以使用挤压或调整大小吗?如何对此图像应用调整大小;是否丢失信息?

1 个答案:

答案 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

希望有所帮助!