2013-05-12 282 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