【问题标题】:Matlab 3D matrix transform 3rd dimension by 2D matrix vectorizationMatlab 3D 矩阵通过 2D 矩阵向量化变换第 3 维
【发布时间】:2016-08-08 00:32:42
【问题描述】:

我有大小为N, M, 3 的3D 矩阵A 和大小为3, 3 的2D 变换3, 3,我将它们应用于矩阵A 的第三维。如果相关,这个 3D 矩阵是 RGB 图像。

我目前的解决方案是这样的:

for i = 1:N
    for j = 1:M
        A(i, j, :) = T * [A(i, j, r); A(i, j, g); A(i, j, b)];
    end
end

但我很好奇是否有办法对其进行矢量化?

【问题讨论】:

    标签: image matlab matrix multidimensional-array vectorization


    【解决方案1】:

    你可以试试这个。 首先切换尺寸,使通道成为第一个:

    B = permute(A,[3,1,2])
    

    然后将 B 重塑为大小为 3xN*M 的矩阵:

    C = reshape(B,3,[])
    

    现在计算一个矩阵乘法:

    D = T*C;
    

    然后你需要重塑并重新排列:

    E = permute(reshape(D,3,M,N),[2,3,1])
    

    我没有对其进行测试,因此可能缺少某些内容,但通常这应该可以工作(而且速度很快!)

    【讨论】:

    • 非常好!我认为您需要转置C。这是我的方法:reshape((T*reshape(permute(A, [3 1 2]), 3, [])).', size(A))
    • @LuisMendo 成功了,谢谢。我得到了 100 倍的加速!
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多