如何创建具有自定义起点和步长值的矩形网格

2024-04-29 16:52:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我需要校准摄像机。正如您所知,需要在三维世界中定义平面栅格点,并在图像平面上查找它们的对应关系。因此,第一个摄影机具有以下3D_网格点:

mport cv2 as cv 
import numpy as np

WPoints_cam1 = np.zeros((9*3,3), np.float64)
WPoints_cam1[:,:2] = np.mgrid[0:9,0:3].T.reshape(-1,2)*0.4
print(WPoints_cam1)

[[0.  0.  0. ]# world coordinate center
[0.4 0.  0. ]
[0.8 0.  0. ]
[1.2 0.  0. ]
[1.6 0.  0. ]
[2.  0.  0. ]
[2.4 0.  0. ]
[2.8 0.  0. ]
[3.2 0.  0. ]
[0.  0.4 0. ]
[0.4 0.4 0. ]
[0.8 0.4 0. ]
[1.2 0.4 0. ]
[1.6 0.4 0. ]
[2.  0.4 0. ]
[2.4 0.4 0. ]
[2.8 0.4 0. ]
[3.2 0.4 0. ]
[0.  0.8 0. ]
[0.4 0.8 0. ]
[0.8 0.8 0. ]
[1.2 0.8 0. ]
[1.6 0.8 0. ]
[2.  0.8 0. ]
[2.4 0.8 0. ]
[2.8 0.8 0. ]
[3.2 0.8 0. ]]

Grid 如上图所示,第一个网格(对于第一个摄影机)从定义的参考3D_点(0,0,0)开始,并以点(3.2,0.8 0)结束,该点的恒定偏移为0.4,尺寸为9x3

注意,所有Z坐标均设置为Z=0(Zhengyou Zhang校准)

现在我的问题是,因为我需要定义第二个网格(对于第二个摄影机),它也引用定义的3D_坐标中心(0,0,0),我需要定义一个网格,从(3.6,0,0)开始,以(6.8,0.8,0)结束,偏移量为0.4,尺寸为9x3

我相信这很容易做到。然而,由于我的初级经验,我无法跳出框框进行思考

如果您能提供帮助并提前表示感谢,我们将不胜感激


Tags: 项目图像网格定义尺寸asnp世界
1条回答
网友
1楼 · 发布于 2024-04-29 16:52:30

可以按如下方式缩放每个列:

np.mgrid[0:8, 0:3].T.reshape(-1,2) * np.array([(7.8 - 3.6) / 7, 0.4]) + np.array([3.6, 0])

或者像这样将其组合成缩放矩阵(然后添加一个向量进行平移)

np.mgrid[0:8, 0:3].T.reshape(-1,2) @ np.array([[(7.8 - 3.6) / 7, 0], [0, 0.4]]).T + np.array([3.6, 0])

关于(7.8 - 3.6) / 7来自哪里,分子应该是不言而喻的。分母相同,但适用于原始尺寸。使用0:8时,最大值为7,最小值为0,因此分母变为7 - 0

相关问题 更多 >