【问题标题】:3 dimensional matrix multiplication in matlabmatlab中的3维矩阵乘法
【发布时间】:2013-05-06 12:35:02
【问题描述】:

我有一个大小为 mxnx3 的法线贴图,其中每个像素都有一个法线向量 {Nx, Ny, Nz}。 我想通过旋转矩阵独立地旋转每个法线向量。设R 为大小为mxnx3x3 的旋转矩阵,其中每个像素都有一个大小为3x3 的旋转矩阵。

我想将每个像素的旋转矩阵乘以法线向量来得到旋转的 法线向量。我正在寻找一种优化的方式来完成这项任务,因为循环遍历每个像素可能不是最好的方式。

请帮忙!!

【问题讨论】:

    标签: matlab matrix-multiplication normals


    【解决方案1】:

    我会试试的

    res = sum( bsxfun(@times, map, R), 4 );
    

    使用mapm-by-n-by-3 法线向量和Rm-by-n-by-3-by-@ 987654331@每个向量的旋转。

    仔细想想,你可能需要使用permute

    res = sum( bsxfun(@times, map, permute(R, [1 2 4 3]) ), 4 ); % transposing the vectors
    

    或者,正如Harshit 所说:

    res = sum( permute( bsxfun(@times, map, R ), [1 2 4 3]), 4 ); % transposing the vectors
    

    【讨论】:

    • 您好,谢谢您的回复!我说的旋转是矩阵乘法,所以对于每个像素,我想找到 Rij * Nij,其中 Rij 是像素 (i,j) 的 3x3 旋转矩阵,Nij 是像素的 3x1 法线向量 (i ,j),结果将是 3x1 旋转的法线向量。您的解决方案是否也在做同样的事情?如果是,那么请解释它是如何完成的。问候,
    • @HarshitAgrawal 那么您可以将矩阵向量乘法A*x 视为sum( bsxfun( @times, A, x' ), 2 )
    • 感谢您的解决方案。有一个小的编辑。我们应该在应用 bsxfun 之后对其进行置换。请查看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多