(二)标定结果应用——测照片上任一二维点的三维坐标

在上一篇中,我们已经得到双目相机的标定结果:内参数矩阵、旋转矩阵、平移矩阵和畸变参数,本文将着重讲解标定结果的应用
**

一 、测点过程

**
笔者的科研工作中,需要测得空间点的三维坐标。所以,基于双目相机的标定结果和相关的标定原理,笔者用c++语言编写了一段测空间点三维坐标的程序
在使用matlab标定工具箱标定时,需要依次导入左、右相机照片。先左后右和先右后左得到的标定结果是有所差异的。(这种差异对测量精度是有影响的,后文会提到)
(二)标定结果应用——测照片上任一二维点的三维坐标
上图是笔者标定结果的总结,我们可以看到,左右相机内参是相同的,但平移矩阵和旋转矩阵是不同的。平移矩阵和旋转矩阵表征的是相机坐标系和世界坐标系的位置关系。导入图像的先后顺序涉及到以哪个相机的坐标系为世界坐标系的问题,所以两次标定结果的平移矩阵和旋转矩阵会有差别。
在程序中将相关参数根据标定结果改掉之后,即可使用。
(二)标定结果应用——测照片上任一二维点的三维坐标
该程序需要输入想要测的点在左右相片中的像素坐标,所以笔者提供一个matlab程序,可以测得二维图片上任一点的坐标值。

a=imshow(‘01_1.png’) //分别导入左右相片
[x1,y1]=getpts //测点坐标
b=imshow(‘01_1.png’)
[x2,y2]=getpts
运行vs程序,输入相应的坐标值,即可得到相应点的三维坐标。
(二)标定结果应用——测照片上任一二维点的三维坐标

二 、验证

验证思路:在标定板上任意找多个点,测得它们的三维坐标,计算空间距离,与真实距离进行比较,计算误差。
(二)标定结果应用——测照片上任一二维点的三维坐标
如上图所示,选取棋盘上的四个角点,用第一节中的matlab程序测得它们在照片中的像素坐标。在利用vs程序(使用的是先右后左的标定结果)求得其三维坐标值。结果如下:
(二)标定结果应用——测照片上任一二维点的三维坐标
任意两点之间的距离,并求取误差。
(二)标定结果应用——测照片上任一二维点的三维坐标
我们发现,误差变化很大,最大误差达-2.37%,不符合我们的要求。
为此,我们做了多组试验,结果发现:**内参数矩阵和旋转矩阵使用先右后左的标定结果,平移矩阵使用先左后右的标定结果,效果非常好。**其误差计算结果如下:
(二)标定结果应用——测照片上任一二维点的三维坐标
可以看到,最大误差降低近一半,完美符合我们的要求。
具体原因是可能是因为matlab默认使用的坐标系不是常用的右手坐标系,具体原因笔者会在后续更新。