是的,你可以像操作任何数组一样操纵图像/序列。
下面是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
因此该数据集包括与21片的深度/数字和数量的180
帧此时64×64的图像我们可以操纵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。
希望有帮助!