2013-05-12 333 views
1

我有一个尺寸的法线贴图,尺寸为m x n x 3,其中每个像素都有一个法线向量{Nx,Ny,Nz}。 我想旋转每个法向量独立的旋转矩阵。令R为尺寸为m x n x 3 x 3的旋转矩阵,其中每个像素具有尺寸为3 x 3的旋转矩阵。matlab中的3维矩阵乘法

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

请帮忙!!

回答

1

我想尝试

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

随着map一个m -by- n -by- 3法线矢量,并且每R矢量的m -by- n -by- 3 -by- 3旋转。

来到想想,你可能需要使用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 
+0

喜晒, 感谢回答!我所说的旋转是矩阵乘法,所以对于每个像素,我想找到Rij * Nij,其中Rij是像素(i,j)的3x3旋转矩阵,Nij是像素(i,i)的3x1法线向量,j),结果将是3x1旋转法向量。 您的解决方案是否也一样?如果是,那么请解释它是如何完成的。 Regards, – 2013-05-12 09:44:46

+0

@HarshitAgrawal你熟悉'bsxfun'吗? – Shai 2013-05-12 09:45:32

+0

是的,它应用元素明智的二元运算符。 – 2013-05-12 09:46:39