是的,您可以像操作任何阵列一样操纵图像/序列.
这是一个简单的例子,可以从NIH 070??00获得数据.
数据集是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
因此,数据集包含64×64图像,深度/切片数为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.
希望有所帮助!