MATLAB:下标赋值维度不匹配:y(:,:,j,i) = x;

MATLAB: Subscripted assignment dimension mismatch: y(:,:,j,i) = x;

我正在尝试从 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;

下标赋值维度不匹配

知道为什么吗?

根据您评论中的附加内容,我会这样解决:

%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)

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