Image Matlab二维矩阵矢量化三维矩阵变换

Image Matlab二维矩阵矢量化三维矩阵变换,image,matlab,matrix,multidimensional-array,vectorization,Image,Matlab,Matrix,Multidimensional Array,Vectorization,我有大小为N,M,3的3D矩阵A和大小为3,3的2D变换T,我应用于矩阵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 但我很好奇是否有一种方法可以将其矢量化?你可以试试这个。 首先切换尺寸,使通道成为第一个: B = permute(A,[3,1,2]) 然后将

我有大小为
N,M,3
的3D矩阵
A
和大小为
3,3
的2D变换
T
,我应用于矩阵
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
但我很好奇是否有一种方法可以将其矢量化?

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

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
。这就是我的方法:
reforme((T*reforme(permute(A,[3 1 2]),3,[]),size(A))
@LuisMendo它成功了,谢谢。我得到了100倍的加速!