如何根据相机校准数据绘制相机和图像位置?
我有相机的内在和外在参数。 外部是一个具有旋转和平移的 4 x 4 矩阵。
我有如下示例数据,每张相机拍摄的图像都有一个。
2.11e-001 -3.06e-001 -9.28e-001 7.89e-001
6.62e-001 7.42e-001 -9.47e-002 1.47e-001
7.18e-001 -5.95e-001 3.60e-001 3.26e+000
0.00e+000 0.00e+000 0.00e+000 1.00e+000
我想绘制 Matlab 校准工具包页面上给出的图像< /a> 或 然而,我无法计算出如何绘制这两张图像的数学原理。
我唯一的线索来自此页面http://en.wikipedia.org/wiki/Camera_resectioning。这告诉我相机位置可以通过 C = − R` 找到。知道
如何完成这项任务吗?
I have the intrisic and extrinsic parameters of the camera.
The extrinsic is a 4 x 4 matrix with rotation and translation.
I have sample data as under, I have this one per camera image taken.
2.11e-001 -3.06e-001 -9.28e-001 7.89e-001
6.62e-001 7.42e-001 -9.47e-002 1.47e-001
7.18e-001 -5.95e-001 3.60e-001 3.26e+000
0.00e+000 0.00e+000 0.00e+000 1.00e+000
I would like to plot the image as given on the Matlab calibration toolkit page or
However I'm unable to figure out the Math of how to plot these 2 images.
The only lead I have is from this page http://en.wikipedia.org/wiki/Camera_resectioning. Which tells me that the camera position can be found by C = − R` . T
Any idea how to achieve this task?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
假设要绘制的平面的角点是 3x1 列向量,a = [0 0 0]'、b = [w 0 0]'、c = [wh 0]' 和 d = [0 h 0]' 。
假设您提供的校准矩阵为 A,并由旋转矩阵 R = A(1:3, 1:3) 和平移矩阵 T = A(1:3, 4) 组成。
绘制第一个视图
将平面的每个角 x_w(即 a、b、c 或 d)变换到相机中的坐标 x_c
对于具有旋转 R_i 和平移 T_i 的每个姿势 A_i,通过x_c = R_i*x_w + T_i
然后用变换后的平面绘制平面角落。
绘制相机时,其在相机坐标中的投影中心为[0 0 0]',相机x轴为[1 0 0]',y轴为[0 1 0]',z轴为[0 0 1] '。
请注意,在图中,相机 y 轴朝下,因此您可能需要通过乘以 B = [1 0 0; 对所有计算出的坐标应用额外的旋转。 0 0 1; 0 -1 0]。
绘制第二个视图
绘制平面很简单,因为我们处于世界坐标中。只需使用 a、b、c 和 d 绘制平面即可。
为了绘制摄像机,每个摄像机中心为 c = -R'*T。相机轴是旋转矩阵 R 的行,因此例如,在您提供的矩阵中,x 轴是
[2.11e-001 -3.06e-001 -9.28e-001]'。您还可以通过将相机坐标中给出的每个点 x_c 通过 x_w = R'*(x_c - T) 转换为世界坐标 x_w 并绘制它来绘制相机。
Assume the corners of the plane that you want to draw are 3x1 column vectors, a = [0 0 0]', b = [w 0 0]', c = [w h 0]' and d = [0 h 0]'.
Assume that the calibration matrix that you provide is A and consists of a rotation matrix R = A(1:3, 1:3) and a translation T = A(1:3, 4).
To draw the first view
For every pose A_i with rotation R_i and translation T_i, transform each corner x_w (that is a, b, c or d) of the plane to its coordinates x_c in the camera by
x_c = R_i*x_w + T_i
Then draw the plane with transformed corners.
To draw the camera, its centre of projection in camera coordinates is [0 0 0]' and the camera x axis is [1 0 0]', y axis is [0 1 0]' and z axis is [0 0 1]'.
Note that in the drawing, the camera y-axis is pointing down, so you might want to apply an additional rotation on all the computed coordinates by multiplication with B = [1 0 0; 0 0 1; 0 -1 0].
Draw the second view
Drawing the plane is trivial since we are in world coordinates. Just draw the plane using a, b, c and d.
To draw the cameras, each camera centre is c = -R'*T. The camera axes are the rows of the rotation matrix R, so for instance, in the matrix you provided, the x-axis is
[2.11e-001 -3.06e-001 -9.28e-001]'. You can also draw a camera by transforming each point x_c given in camera coordinates to world coordinates x_w by x_w = R'*(x_c - T) and draw it.
opencv 现在有一个示例,用于可视化外部从他们的 相机校准生成example
它输出类似于原始问题的内容:
There is now an example in opencv for visualizing the extrinsics generated from their camera calibration example
It outputs something similar to the original questions ask:
这就是绘制摄像机的方法。
红色箭头是相机方向(-z 或 z),蓝色箭头是相机方向。所有示例摄像机都指向 [0,0,0]。
代码:
解释为什么 Z 是相机指向的位置。
This is how you can plot the cameras.
Red arrows are camera directions (-z or z), blue arrows are cameras orientations. All of example cameras point at [0,0,0].
Code:
Explanation why Z is where camera is pointing.