opencv学习笔记(2)

双目摄像头标定

刚看了一点learning opencv的立体标定,现将大致标定过程书写如下,具体算法还有待继续学习,以滚顾自己已掌握的东西,有幸解你之惑,自然更好。
     标定过程一般有寻找角点、计算内外参数、计算基础矩阵、矫正、匹配等步骤。
     寻找角点主要的作用是为计算之后的各种参数矩阵提供依据,采集一个棋盘格在不同位置的图像,opencv的库函数会根据这些图像的角点建立足够多的方程组可以解除内参数、外参数和畸变参数,参数矫正的图片越多矫正的结果越是精确。opencv中寻找角点的函数是cvFindChessboardCorners,当图像中所有的角点都被找到后,此函数会返回非零值,否则返回零值,也会以参数的形式带回找到的角点数目,以此函数找到的角点并不是非常精确,还要用cvFindCornerSubPix来进一步精确到亚像素级别。
     有了角点之后可以进行各种参数的计算,利用cvSteroCalibrate函数来计算,此函数输入找到的角点矩阵和与之对应的角点的世界坐标,如上文所说,opencv会根据投影模型建立方程组,解出参数。
     如果利用标定立体矫正函数cvStereRectify,则直接输入上面计算出来的两个相机的内外参数旋转矩阵等,由此函数可以获得相机间行对准的旋转矩阵(不同于上面提到的旋转矩阵,上面的旋转矩阵是将世界坐标系和相机坐标系重合的矩阵),还可以得到投影方程的矩阵(这两个矩阵应该是将世界坐标的三维点变化成相机图像二维坐标的矩阵)。最后利用cvInitUndistortRectifyMap函数,输入上述函数计算出来的旋转矩阵、畸变矩阵、相机参数矩阵和投影方程就可以得到x,y轴完全的映射关系,也是矩阵的形式。
     如果利用非标定立体矫正(hartley方法),则不需要利用函数cvStereoCalibrate计算各种参数,但需要利用cvFindFundamentalMat来计算基础矩阵F,根据learning opencv的介绍,F矩阵应该包含了两台相机物理位置关系和像素坐标关系,之后利用函数cvStereoRectifyUncalibrated输入基础矩阵F和两个相机的图片(即先前计算的角点),输出两个相机单应矩阵H,然后用R=M'HM(R为矫正矩阵,M为相机内参数矩阵,M'为转置,H为单应性矩阵)。最后cvInitUndistortRectifyMap输入畸变矩阵、相机参数矩阵,R矩阵,此处没有输入上一种方法中的投影方程矩阵,而是用相机参数矩阵代替,此函数也会得到x,y轴的映射关系。
     最终用cvRemap将要矫正的图像用上面计算出来的映射关系进行矫正,全部工作完成!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值