我有大约200个3D点,我需要将它们乘以一个相当复杂的2D投影矩阵。我目前正在使用numpy和for循环,基本上迭代3D点云,应用矩阵变换并获取我的数据。
这似乎很慢。有什么办法可以对它进行矢量化,或使用某种加速技术(地图,游泳池等)。
F = matrix([
[735.4809, 0., 388.9476, 0.],
[0., 733.6047, 292.0895, 0.],
[0., 0., 1.0000, 0.]
])
VehicleRPY = self.GetRT(Roll=Roll, Pitch=Pitch, Yaw=0., X=IMUX, Y=IMUY, Z=IMUZ);
SonarToCamera = self.GetRT(Roll=RTRoll, Pitch=RTPitch, Yaw=RTYaw, X=RTX, Y=RTY, Z=RTZ);
SpaceMatrix = matrix([
[(sqrt(R**2 - (Y/(cosd(Roll)*cosd(Pitch)))**2)*sind(Theta))],
[(Y/(cosd(Roll)*cosd(Pitch)))],
[(sqrt(R**2 - (Y/(cosd(Roll)*cosd(Pitch)))**2)*cosd(Theta))],
[1]
])
FinalMatrix = F*VehicleRPY*SonarToCamera*SpaceMatrix;
UVMatrix = matrix([
[FinalMatrix.item(0)/FinalMatrix.item(2)],
[FinalMatrix.item(1)/FinalMatrix.item(2)],
])
像上面这样的东西。我需要在每帧200个点重复这个3 * 3/4 * 4乘法