单目测距广泛运用于车辆道路障碍物识别、机器人导航等领域,是计算机视觉中的重要技术之一。
众所周知的是,图像中的像素坐标只提供了二维信息,而空间坐标是三维信息,因此只能让空间坐标中的一维为0或固定值,才可以测得平面距离信息,因此单目测距主要是针对空间中的平面坐标。
摄像机模型如图1所示:
图1 摄像机模型
由摄像机模型,可知
令Zw=0, 则摄像机和世界坐标系的位姿关系如下:
由式(1)、式(2)可得:
Zc可看为缩放因子, 因此式子可转为
因此只要知道单应性矩阵H,就可知道图像点和空间平面之间的关系,而这个求解过程,OpenCV已经给出了相应的求解函数cvGetPerspectiveTransform,同时也给出了转换函数cvWarpPerspective。
标定实验:
由于资金紧缺,没有车和机器人,而幸好的是这些只是应用平台,算法独立于平台,因此实际标定只需要一个摄像机即可。
标定图像中的正方形为5cm X 5cm, 如图2所示:
图2 标定图像
正方形的底部中心与地板砖的线对齐重合,将其对应到图像底部中心,将它设为原点,用50像素对应5cm的边,即10:1 ,透视变换效果如图3所示:
图3透视变换效果图
测距试验:
求地板砖线到本子的距离,测试图如图4所示:
图4 测试图
透视效果图, 如图5所示:
图5 透视效果图
测得透视效果图线到本子的距离为210像素,即21cm, 与测试图中的尺子所测距离 一致。
由此完成OpenCV单目平面测距的功能,此功能可应用于各种平面测距的应用。
对于OpenCV求解单应性矩阵,请看下一章OpenCV透视变换源码解析。