Matlab中的4D矩阵运算

时间:2015-08-06 10:58:02

标签: arrays matlab multidimensional-array 4d

我在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,:))]。这应该针对所有体素进行。

我该怎么做?它可以用for循环来完成,但效率不高。

1 个答案:

答案 0 :(得分:4)

第一个问题:规范化

使用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};

因为那样你可以使用comma-separated list

result = cat(4, cellImgs{:});

所以代码与图像数量无关。