2015-02-11 76 views
0

我想刪除空白(= 0)的cols並在圖像的3D堆棧2D圖像行,然後生成一個新的3D堆棧:MATLAB:下標分配維度不匹配:y(:,:,j,i)= x;

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; 

下標賦值尺寸不符

任何想法,爲什麼?

+2

這是不可能的,因爲'tepvol'在每次迭代中都有不同的大小。矩陣在每個切片中始終具有相同的大小。 – Daniel 2015-02-11 10:40:27

+0

你將不得不使'VolStackTemp'成爲一個單元矩陣 – Dan 2015-02-11 10:43:52

+0

謝謝..應該已經意識到了!有時對於我的數據,tempvol與3D堆棧中所有2D圖像的大小相同,但其他時間會隨着您的提及而變化(例如,對於j = 1到130,大小(tempvol)= 487 391,但對於j = 131,大小(tempvol)= 486 391)。作爲解決方案,我認爲,對於堆疊的第一個2D圖像,我將按照上述方式進行裁剪,但對於所有後續的2D圖像使用相同的(第一個2D圖像的)二維尺寸。 – 2one 2015-02-11 10:48:05

回答

2

與您的評論的額外內容,我會解決這個問題是這樣的:

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

這樣,你的代碼運行速度更快,沒有非零數據被刪除。