【问题标题】:4D matrix operations in MatlabMatlab中的4D矩阵运算
【发布时间】:2015-10-29 11:54:30
【问题描述】:

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

【问题讨论】:

    标签: arrays matlab multidimensional-array 4d


    【解决方案1】:

    第一个问题:规范化

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

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

    【讨论】:

    • 感谢您的回答。事实上,我所有的图像都在一个单元格数组中。
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多