【问题标题】:MATLAB: Subscripted assignment dimension mismatch: y(:,:,j,i) = x;MATLAB:下标赋值维度不匹配:y(:,:,j,i) = x;
【发布时间】:2015-04-11 16:33:51
【问题描述】:

我正在尝试从 3D 图像堆栈中的 2D 图像中删除空白 (=0) 列和行,然后生成一个新的 3D 堆栈:

for i=1:numVols;

     for j=1:numFrames; % Crop black boundaries
        tempvol = VolStack(:,:,j,i);
        tempvol(:,all(tempvol==0,1))=[];
        tempvol(all(tempvol==0,2),:)=[];
                VolStackTemp(:,:,j,i) = tempvol;
     end

end

奇怪的是它有时会起作用,但大多数时候我会因为这条线而出错:

VolStackTemp(:,:,j,i) = tempvol;

下标分配维度不匹配

有什么想法吗?

【问题讨论】:

  • 这是不可能的,因为tepvol 在每次迭代中都有不同的大小。矩阵在每个切片中的大小始终相同。
  • 您必须将VolStackTemp 设为单元矩阵
  • 谢谢..应该已经意识到了!有时对于我的数据 tempvol 与 3D 堆栈中的所有 2D 图像的大小相同,但有时它会像您提到的那样变化(例如,对于 j = 1 到 130,size(tempvol) = 487 391,但对于 j = 131,大小(温度)= 486 391)。我认为,作为一种解决方法,对于堆栈的第一个 2D 图像,我将按上述方式进行裁剪,但随后对所有后续 2D 图像使用相同的 2D 尺寸(第一个 2D 图像)。

标签: matlab matrix dimensions mismatch


【解决方案1】:

使用您评论中的其他内容,我会这样解决:

%get all cols which are zero in all slices
h=all(all(VolStack==0,1),2)
cidx=all(h,3)
%same for rows
ridx=all(h,4)
%delete zero only rows and cols:
VolStack=VolStack(:,:,~ridx,~cidx)

这样您的代码将运行得更快,并且不会删除任何非零数据。

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多