2

我在 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 循环来完成,但这效率不高。

4

1 回答 1

5

第一个问题:标准化

这可以通过以下方式轻松完成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{:});

因此代码与图像数量无关。

于 2015-08-06T11:09:54.503 回答