在OpenCV中用cvCalibrateCamera2进行相机标定
2017-04-11 13:35
267 查看
看到论坛里有不少人在用OpenCV中的标定函数cvCalibrateCamera2 进行相机标定时遇到不少问题,说一些自己的看法。
1)因为cvCalibrateCamera2 函数主要是用张正友的平面标定方法的,所以首先我建议大家看一下张正友的那篇经典的论文
完整版 22页 里面分析的非常详细《A Flexible New Technique for Camera Calibration.rar》(http://research.microsoft.com/~zhang/Papers/TR98-71.pdf)
精简版 8页《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
(http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf)
2)至于不少人说OpenCV中用cvCalibrateCamera2 进行相机标定的精度差,标定结果不稳定,我想可能的原因有:
原因之一)可能是在标定的时候标定板所在平面与成像平面(image plane)之间的夹角太小,张正友论文里的仿真数据(有噪声的数据)说明当两者夹角太小误差
会很大, 从张正友的论文里给出的5幅图中(http://research.microsoft.com/~zhang/Calib/)其中标定平面与成像平面的夹角分别为:
8.8947 11.2325 24.4875 10.8535 9.5829(单位:度)。
而且张正友的论文中也提到两幅标定板之间的位置平行放置的话,相关相当于一幅 因此在实际标定中平行放置的情况最好避免,可能有时你无形之中就犯了这
个错误。
原因之二)标定时拍摄的图片太少,虽然张正友的论文里只用了5幅图片,但是我建议搞个10来幅左右还是必要的,因为我们实际中可能标定板用A4的纸打印出
来贴在一块板上的,标定板上的世界坐标精度就不是特别高,多拍摄几幅图像能减少这方面带来的误差,而且多个角度拍摄也可能解决了问题一:标定板和成像
平面夹角小的问题。这个家伙用20幅来标定(http://www.vision.caltech.edu/bouguetj/ ... ample.html)
原因之三)图像上角点提取的不准确,我认为用cvFindChessboardCorners函数找角点不是很好,假如拍到的图像不是完整的棋盘格的时候肯定会有问题的,而
且也不少人反应用这个函数提取不出角点,建议可以用其他工具 比如:
OpenCV and MatLab Camera Calibration Toolboxes Enhancement(http://graphics.cs.msu.ru/en/research/calibration/)
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html)★★★★★强烈推荐
当然还有可能其他人为的什么原因。
3)建议用其他方法比如Tsai的标定方法或其他的标定工具进行标定
★★★★★强烈推荐 用这个matlab标定工具箱来进行标定,可以和OpenCV做个对比嘛 ,它也是基于张正友的平面标定方法的,做得非常人性化,呵呵,
有误差分析、标定结果三维重建、重投影计算角点等功能 。
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/)
4)三个OpenCV下的标定程序
程序1)《基于OpenCV的计算机视觉技术实现》(http://www.sciencep.com/s_single.php?id=14881)这本书上的相机标定程序 (有标定图片 改下参数 可以直接运行)
from《基于OpenCV的计算机视觉技术实现
》.rar摄像机定标from《基于OpenCV的计算机视觉技术实现 》.rar(525.67 KiB) 被下载 13856 次
程序2) 自己写的一个简单的标定程序:plane_calibration_opencv(要先准备好 角点的图像坐标和对应的世界坐标 )
download/file.php?id=284
程序3)http://www.opencv.org.cn主页上的例子
http://www.opencv.org.cn/index.php?titl ... iant=zh-tw
附件
plane_calibration_opencv.rarplane_calibration_opencv(23.06 KiB) 被下载 3416 次
1)因为cvCalibrateCamera2 函数主要是用张正友的平面标定方法的,所以首先我建议大家看一下张正友的那篇经典的论文
完整版 22页 里面分析的非常详细《A Flexible New Technique for Camera Calibration.rar》(http://research.microsoft.com/~zhang/Papers/TR98-71.pdf)
精简版 8页《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
(http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf)
2)至于不少人说OpenCV中用cvCalibrateCamera2 进行相机标定的精度差,标定结果不稳定,我想可能的原因有:
原因之一)可能是在标定的时候标定板所在平面与成像平面(image plane)之间的夹角太小,张正友论文里的仿真数据(有噪声的数据)说明当两者夹角太小误差
会很大, 从张正友的论文里给出的5幅图中(http://research.microsoft.com/~zhang/Calib/)其中标定平面与成像平面的夹角分别为:
8.8947 11.2325 24.4875 10.8535 9.5829(单位:度)。
而且张正友的论文中也提到两幅标定板之间的位置平行放置的话,相关相当于一幅 因此在实际标定中平行放置的情况最好避免,可能有时你无形之中就犯了这
个错误。
原因之二)标定时拍摄的图片太少,虽然张正友的论文里只用了5幅图片,但是我建议搞个10来幅左右还是必要的,因为我们实际中可能标定板用A4的纸打印出
来贴在一块板上的,标定板上的世界坐标精度就不是特别高,多拍摄几幅图像能减少这方面带来的误差,而且多个角度拍摄也可能解决了问题一:标定板和成像
平面夹角小的问题。这个家伙用20幅来标定(http://www.vision.caltech.edu/bouguetj/ ... ample.html)
原因之三)图像上角点提取的不准确,我认为用cvFindChessboardCorners函数找角点不是很好,假如拍到的图像不是完整的棋盘格的时候肯定会有问题的,而
且也不少人反应用这个函数提取不出角点,建议可以用其他工具 比如:
OpenCV and MatLab Camera Calibration Toolboxes Enhancement(http://graphics.cs.msu.ru/en/research/calibration/)
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html)★★★★★强烈推荐
当然还有可能其他人为的什么原因。
3)建议用其他方法比如Tsai的标定方法或其他的标定工具进行标定
★★★★★强烈推荐 用这个matlab标定工具箱来进行标定,可以和OpenCV做个对比嘛 ,它也是基于张正友的平面标定方法的,做得非常人性化,呵呵,
有误差分析、标定结果三维重建、重投影计算角点等功能 。
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/)
4)三个OpenCV下的标定程序
程序1)《基于OpenCV的计算机视觉技术实现》(http://www.sciencep.com/s_single.php?id=14881)这本书上的相机标定程序 (有标定图片 改下参数 可以直接运行)
from《基于OpenCV的计算机视觉技术实现
》.rar摄像机定标from《基于OpenCV的计算机视觉技术实现 》.rar(525.67 KiB) 被下载 13856 次
程序2) 自己写的一个简单的标定程序:plane_calibration_opencv(要先准备好 角点的图像坐标和对应的世界坐标 )
download/file.php?id=284
程序3)http://www.opencv.org.cn主页上的例子
http://www.opencv.org.cn/index.php?titl ... iant=zh-tw
附件
plane_calibration_opencv.rarplane_calibration_opencv(23.06 KiB) 被下载 3416 次
相关文章推荐
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- opencv中3D点根据相机参数投影成2D点+solvePnP函数计算相机姿态+2D坐标到3D+相机参数calibration(标定与配准,求得深度彩色相机的内参与外参,再进行配准)
- 在OpenCV中用cvCalibrateCamera2进行相机标定
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 转 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 在OpenCV中用cvCalibrateCamera2进行相机标定
- 基于OpenCV进行相机标定
- 利用OpenCV进行相机标定的源代码
- 利用opencv进行相机标定程序
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 使用OpenCV进行相机标定(基于OpenCV2.4.3)
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
- 相机模型与标定(四)--opencv单目标定例子使用说明
- 使用OpenCV进行摄像机标定
- 使用OpenCV进行标定(Python)
- Opencv 张正友相机标定傻瓜教程
- 用VISP+Opencv做相机到机械臂的标定
- Camera Calibration 相机标定:Opencv应用方法
- Opencv 张正友相机标定傻瓜教程