arrays - Matlab 中的 4D 矩阵运算

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

最佳答案

第一个问题:标准化

这可以通过 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{:});

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

关于arrays - Matlab 中的 4D 矩阵运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853973/

相关文章:

matlab - 将列矩阵转换为逻辑数组

python - 我如何设计一个 Python 函数来打印仅将前向对角线元素设置为 True 的矩阵?

c - 函数返回从 main() 调用两次的指针

java - 数组方法和命令

matlab - 查找矩阵中所有零元素的邻居

javascript - 在嵌套的 for 循环中垂直打印数组。 JavaScript

matlab - 在 Matlab 中,为什么 cellfun(@size, x) 不需要非标量值的 UniformOutput False?

c++ - 如何从 const boost::multi_array 获取特定元素

c# - 我们如何定义字符串常量而不是数组

javascript - angular.foreach 函数抛出语法错误