Matlab三维矩阵通过二维矩阵矢量化变换第三维

时间:2016-04-15 21:38:28

标签: image matlab matrix multidimensional-array vectorization

我有尺寸A的3D矩阵N, M, 3和尺寸T的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

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

1 个答案:

答案 0 :(得分:2)

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

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])

我没有对它进行测试,因此可能会遗漏一些东西,但通常情况下这应该有效(并且速度快!)