2016-02-13 89 views
2

这是我在Matlab代码:我怎么能得到所有5张图片的所有值保存?此代码仅返回最后一张图片!我尝试使用IM(L),但它给我一个错误:In an assignment A(I) = B, the number of elements in B and I must be the same.在分配A(I)= B,B中元素的个数,我必须相同

Amount_measurements = 5; 

IM=zeros(2097152,1); 
l=1; 
for l=(1:Amount_measurements) 
    if l < 9 
     %index = double(0)+double(0)+double(l+1); 
     index = strcat(num2str(double(0)),num2str(double(0)),num2str(double(l+1))); 
    elseif l < 99 
     index = double(0)+double(l+1); 
    else 
     index = double(l+1); 
    end 

    file_name1='trial.nii.gz'; 
    %disp(file_name1); 
    jesu=load_nii(file_name1); 

    [x,y,z] = meshgrid(1:256,1:256,1:256); 
    [lx,ly,lz] = meshgrid(1:2:256,1:2:256,1:2:256); 
    newImage = interp3(x,y,z,jesu.img,lx,ly,lz); 
    IM= newImage(:); 
end 

我想要的值newImage(:)存储为IM1=newImage(:) IM2=newImage(:) IM3=newImage(:) IM4=newImage(:)等等......我怎么能去了解呢?

回答

2

既然你提到希望的IM1=newImage(:) IM2=newImage(:) IM3=newImage(:) IM4=newImage(:)一个可变长度的版本,你正在寻找一个单元阵列。尝试

IM{l} = newImage; 

,而不是

IM(l) = newImage(:); 

最重要的区别是使用大括号,而不是括号。如果要将其重新整形为矢量,请使用newImage(:)的右侧,如果要将其保存为矩阵,请使用newImage

+0

这里真的很天真的问题。像你一样使用大括号,Matlab会自动创建IM1,IM2等?它如何知道你想要4个数组?我猜测右边必须有4列..这是有道理的,我们有3D插值..我回答我自己的问题,我想大声笑。这很酷。 – MathBio

+0

@MathBio:单元格阵列仍然是矩阵(就像所有的Matlab矩阵一样,它们的长度可以通过写入操作而增加到任意大小 - 如果通过循环的最后一次迭代确实是'IM {4} =',那么您的尺寸为4 )。不同之处在于,在一个单元格数组中,您可以存储任何Matlab对象,包括一个完整的'nother矩阵,而且事情不必是方形的 - 单元格数组可以愉快地保存1x1标量,2×2矩阵, '10x10'矩阵和'125480x1'矢量彼此相邻。 –

+0

感谢您的信息!我只是觉得它看起来没有任何回路,但是有4个阵列正在创建。从未遇到过细胞阵列,它们看起来像是一个非常有用的构造。 – MathBio

-1

使用IM(l)你想在阵列IM中添加整个列向量(newImage(:))到一个单一的元素(第l个元素),这就是为什么Matlab的引发错误。
你应该考虑串联:因为newImage(:)是列向量,更换

IM= newImage(:); 

IM=[IM newImage(:)]; 

但在脚本的顶部,你也应该初始化IM作为

IM=[]; 

在循环结束时,生成的IM将具有Amount_measurements c其中1列= 1 newImage(:)的列。

注意#1:这只会在newImage(:)总是具有相同的长度时才起作用。
注2:如果你知道一个先验的矢量newImage(:)有多长,并再次通过假设它的长度不会改变,你应该考虑用IM=zeros(X,Amount_measurements);其中X更换IM=[];预先分配IM矩阵元素的数量在newImage(:)。最后,关于级联阶段,您应该用IM(:,l)=newImage(:)代替IM=[IM newImage(:)];
注3:作为代替,如果newImage(:)大小可以改变你不能依靠预分配和矩阵,但必须使用电池阵列:在循环的最后一条指令应该是IM{l}=newImage(:);

相关问题