单应性矩阵求解函数findHomography()
OPENCV官方地址: 上面这个地址是OPENCV标定和三维重建集合的函数说明,包括标定原理,过程和工具的使用,想要使用OPENCV实现各种标定的话可以参考
下面是函数声明:
findHomography() Mat cv::findHomography ( InputArray srcPoints,//输入源平面的坐标矩阵,我这里就是像素坐标 InputArray dstPoints,//输入目标平面的坐标矩阵,我输入世界坐标 int method = 0,//计算单应性矩阵的方法,具体见下面 double ransacReprojThreshold = 3,//具体解释见下面 OutputArray mask = noArray(),//见下面 const int maxIters = 2000,//RANSAC算法的最大迭代次数,默认值为2000。 const double confidence = 0.995 //可信度值,取值范围为0到1. ) Python: retval, mask = cv.findHomography( srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask[, maxIters[, confidence]]]]] )
method参数对应方法:
- 0 - 利用所有点的常规方法
- RANSAC - RANSAC-基于RANSAC的鲁棒算法
- LMEDS - 最小中值鲁棒算法
- RHO - PROSAC-基于PROSAC的鲁棒算法
ransacReprojThreshold参数 将点对视为内点的最大允许重投影错误阈值(仅用于RANSAC和RHO方法)。如果 则点被认为是个外点(即错误匹配点对)。若srcPoints和dstPoints是以像素为单位的,则该参数通常设置在1到10的范围内。
mask参数 可选输出掩码矩阵,通常由鲁棒算法(RANSAC或LMEDS)设置。 请注意,输入掩码矩阵是不需要设置的。
作用:
该函数能够找到并返回源平面和目标平面之间的转换矩阵H,以便于反向投影错误率达到最小。 反向投影错误率计算方式如下:
下面是这个函数的一个重载,只是参数少一些:
Mat cv::findHomography ( InputArray srcPoints, InputArray dstPoints, OutputArray mask, int method = 0, double ransacReprojThreshold = 3 )