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

use*_*234 5 matlab image-processing

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

nii = load_nii('im.nii');
size(nii.img);
Run Code Online (Sandbox Code Playgroud)

返回

ans =

    39   305   305  
Run Code Online (Sandbox Code Playgroud)

它是 uint8 格式

我可以使用squeeze 或resize 吗?如何对这个图像应用resize;它是否会丢失信息?

Ben*_*_11 7

是的,您可以像处理任何数组一样操作图像/序列。

下面是一个简单的例子,这里有 NIH 提供的数据。

数据集为 4D,名为“filtered_func_data.nii”。

让我们加载数据集并访问img结果结构的字段:

S = load_nii('filtered_func_data.nii')
Run Code Online (Sandbox Code Playgroud)

这里,S 是一个具有以下字段的结构体:

S = 

           hdr: [1x1 struct]
      filetype: 2
    fileprefix: 'filtered_func_data'
       machine: 'ieee-be'
           img: [4-D int16]
      original: [1x1 struct]
Run Code Online (Sandbox Code Playgroud)

我们可以通过字段访问图像数据img(你已经知道了):

A = S.img
Run Code Online (Sandbox Code Playgroud)

如果我们检查大小,我们会得到:

size(A)

ans =

    64    64    21   180
Run Code Online (Sandbox Code Playgroud)

因此,数据集包含 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
Run Code Online (Sandbox Code Playgroud)

输出:

这对我来说看起来很不错。

因此,在您的情况下,您会得到一个大小,[39 305 305]并且您可以应用我对 3D 数据集所做的相同操作。

编辑 你的数据是一样的:

S = load_nii('Subject01.nii');

A = S.img;

NumSlices = size(A,3);
Run Code Online (Sandbox Code Playgroud)

然后,如果你想要一个 2D 图像,你需要在 3D 数组中选择一个切片。

例如,第一个切片的访问方式如下:

A(:,:,1)
Run Code Online (Sandbox Code Playgroud)

依此类推。

要将图像保存为 png,请使用imwrite

希望有帮助!