我试图通过matlab实现视觉里程计算法。根据http://en.wikipedia.org/wiki/Visual_odometry中的步骤2。我需要在特征检测,匹配和运动估计之前做图像校正。我认为我需要像matlab中的函数(这里)那样消除图像的扭曲。匹配特征后,是否可以使用原有的内在参数和外在参数进行运动估计?我认为固有参数是针对扭曲图像的。
我很困惑,在Matlab的相机校准工具箱中。固有矩阵只能使像素变回扭曲平面。如果我按照wiki的步骤2,在特征检测之前先做图像校正。我认为原始的固有矩阵会产生一些误差。
您需要执行以下步骤:
- 使用校准估计相机的固有参数目标。可以用Matlab标定摄像机工具箱,或者http://www.vision.caltech.edu/bouguetj/calib_doc/
- 花时间执行此步骤,并确保校准是正确的。校准工具箱将为您提供有关其好坏的统计数据校准是。确保重投影误差(和标准)偏差)很小。还要确保收集校准目标的图像,以各种姿势覆盖相机的视场
-
你得到的校准包括的3x3本征矩阵(K)未失真的图像,以及矢量的失真系数。
使用K和失真系数来"消除"图像。
- 不扭曲所有的图像并将它们保存到磁盘。
- 从这一点开始,使用未存储的图像(与矩阵)K)执行VO或其他任务。
免责声明。您可以在不扭曲图像的情况下进行VO,但是根据使用原始图像的图像扭曲程度可能会影响特征/描述符检测器。在扭曲的和未扭曲的
之间进行映射,每个迭代也需要更多的工作。好运首先,有几个可视化里程计库已经存在于matlab中。其中之一是http://www.cvlibs.net/software/libviso/
但是,如果您计划自己实现它并正在寻找一种方法来纠正您的图像,您可以使用相机校准matlab工具箱获得内在/外在相机参数:http://www.vision.caltech.edu/bouguetj/calib_doc/
要使用undistortImage
功能,您需要使用相机校准应用程序或计算机视觉系统工具箱中的estimateCameraParameters
功能校准相机。