簡體   English   中英

Matlab中的4D矩陣運算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM