[英]4D matrix operations in Matlab
我在Matlab中有一組4D矩陣。 前三個維度是空間維度,最后一個是時間維度。 這意味着每個體素都是一個時間序列。 如果Img是4D圖像,則Img(x,y,z,:)是具有坐標(x,y,z)的體素的時間序列。
現在,我想對圖像的每個時間序列進行歸一化(均值和單位方差為零)。 我怎樣才能做到這一點? 也許用zscore(Img,[],4)
?
其次,我想連接所有圖像的時間序列。 假設Img1,Img2,Img3 .... Imgn是4D圖像。 對於每個體素,我想將所有圖像的時間序列連接起來,以便最終獲得一張具有相同空間但擴展了時間維度的4D圖像。 因此,假設體素具有坐標(x,y,z),那么串聯的時間序列將為[squeeze(Img1(x,y,z,:)); squeeze(Img2(x,y,z,:));....;squeeze(Imgn(x,y,z,:))]
[squeeze(Img1(x,y,z,:)); squeeze(Img2(x,y,z,:));....;squeeze(Imgn(x,y,z,:))]
。 應該對所有體素都執行此操作。
我怎樣才能做到這一點? 可以使用for循環來完成,但這效率不高。
這可以通過bsxfun
輕松完成:
Img = bsxfun(@rdivide, Img, std(Img,0,4)); %// unit variance. Or change 0 to 1; see std
Img = bsxfun(@minus, Img, mean(Img,4)); %// zero mean
只需沿第四維使用cat
:
result = cat(4, Img1, Img2, Img3);
如果將所有圖像都放在一個單元格數組中會更容易:
cellImgs = {Img1, Img2, Img3};
因為這樣您就可以使用逗號分隔的列表
result = cat(4, cellImgs{:});
因此代碼與圖像數量無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.