00 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)

Post date: 2012/4/10 上午 08:28:36

piao » 2008-11-18 18:41

看到论坛里有不少人在用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) 被下载 16570 次

程序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.rar

plane_calibration_opencv

(23.06 KiB) 被下载 4366 次

最后由 piao 编辑于 2009-03-01 23:48,总共编辑了 2 次

piao

OpenCV高中生

帖子: 62

注册: 2007-01-30 20:57

zhangshaobing517 » 2008-11-18 19:28

太感谢了!问题一下子清晰很多!也感谢那个默默无名大侠把opencv标定不错的帖子放出来!

zhangshaobing517

OpenCV本科生

帖子: 113

注册: 2008-10-29 22:08

ollydbg23 » 2008-11-19 9:29

楼主的这个篇文章写的很不错,我建议你可以在本论坛的wiki里面写成一个单独的文章,用来永久保存,如果是论坛里面的帖子的话,有可能被论坛的水文给冲掉,呵呵。

本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!

提问的智慧 OpenCV论坛中文搜索 论坛精华区

ollydbg23

OpenCV教授

帖子: 3111

注册: 2008-04-13 9:16

tanxainglin » 2008-11-19 19:40

支持经典 感谢奉献者

tanxainglin

OpenCV高中生

帖子: 52

注册: 2008-06-30 16:01

feixiaolin » 2008-11-19 20:15

建议置顶。

学习OpenCV的三种境界:

(1)乘客级。不会造飞机,会坐飞机也行。将刘、于书中的代码跑一遍;

(2)厨师级。吃自助餐。把OpenCV当成菜或佐料,自己烹调;

(3)天师级。做张天师,这时OpenCV不过是一个披着画皮的女鬼。

feixiaolin

OpenCV教授

帖子: 1138

注册: 2008-07-13 15:26

wangfeng86

OpenCV初中生

帖子: 30

注册: 2008-03-18 0:22

kevinzhang109

OpenCV小学生

帖子: 7

注册: 2008-11-14 23:40

xiaoc10 » 2008-11-30 11:12

好文啊!收藏之。。

xiaoc10

OpenCV初中生

帖子: 35

注册: 2007-09-27 14:03

zcp3311 » 2008-12-05 16:35

谢谢老大。许多天一直困惑于图像校正问题,论坛里对这个问题讨论的少,有价值的更少。你的无私让人敬佩。

zcp3311

OpenCV高中生

帖子: 51

注册: 2006-10-30 11:09

arschof » 2008-12-06 1:02

大家对GML C++ Camera Calibration Toolbox 0.4这个calibration software是什么看法?

arschof

OpenCV幼儿园宝宝

帖子: 2

注册: 2008-12-06 0:53

ollydbg23 » 2009-01-18 10:14

@piao 我已经把链接加入到wiki里面了,欢迎你继续完善,你的程序1和程序2,怎么是一模一样的?

本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!

提问的智慧 OpenCV论坛中文搜索 论坛精华区

ollydbg23

OpenCV教授

帖子: 3111

注册: 2008-04-13 9:16

ollydbg23 » 2009-01-18 10:28

arschof 写道:

大家对GML C++ Camera Calibration Toolbox 0.4这个calibration software是什么看法?

看了一下,这个是个好东西,值得学习!

http://research.graphicon.ru/calibratio ... box-5.html

另外,我打算把此贴置顶了,不错!。。。。。。似乎没有权限或找不到按钮,晕。

本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!

提问的智慧 OpenCV论坛中文搜索 论坛精华区

ollydbg23

OpenCV教授

帖子: 3111

注册: 2008-04-13 9:16

zhuhaibi » 2009-01-19 2:19

楼主发的《基于OpenCV的计算机视觉技术实现 》有问题,不知能否查看一下,我一运行就会出现

.jpg (19.63 KiB) 被浏览 20674 次

不知道什么原因,可否解释一下

zhuhaibi

OpenCV幼儿园宝宝

帖子: 4

注册: 2009-01-19 0:41

ollydbg23 » 2009-01-19 9:04

zhuhaibi 写道:

楼主发的《基于OpenCV的计算机视觉技术实现 》有问题,不知能否查看一下,我一运行就会出现

.jpg

不知道什么原因,可否解释一下

我昨天在VC6,opencv1.0下面运行正常。

本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!

提问的智慧 OpenCV论坛中文搜索 论坛精华区

ollydbg23

OpenCV教授

帖子: 3111

注册: 2008-04-13 9:16

zhuhaibi » 2009-01-19 18:54

ollydbg23 写道:

zhuhaibi 写道:

楼主发的《基于OpenCV的计算机视觉技术实现 》有问题,不知能否查看一下,我一运行就会出现

.jpg

不知道什么原因,可否解释一下

我昨天在VC6,opencv1.0下面运行正常。

真是抱歉,哈哈,第一次发贴不知道要加标签,多谢了,我是在1.1的环境下不能运行,现在在1.0下可以了,多谢了

zhuhaibi

OpenCV幼儿园宝宝

帖子: 4

注册: 2009-01-19 0:41

zhuhaibi » 2009-01-20 1:19

1.请问一下,我打开工程,编译通过,然后我直接ctrl+F5 就可以执行了,但是,当我直接运行DEBUG文件夹中的cvut_test时却出现

.jpg (35.07 KiB) 被浏览 20667 次

请问是问什么啊?怎么解决那

2.我首先用11副图片得到内参,然后我对这个程序进行改造,把测量内外参的函数换成只测量外参的函数FindExtrinsicCameraParams2(内参已经作为已知量了),然后得出的结果却与之前用11副图测得的差距太大,我应该以那一个为准那?

zhuhaibi

OpenCV幼儿园宝宝

帖子: 4

注册: 2009-01-19 0:41

lvnnfever » 2009-02-13 9:56

这好文章必须顶,谢谢楼主的总结,期待还有更多~~

lvnnfever

OpenCV小学生

帖子: 13

注册: 2008-08-22 14:12

piao » 2009-03-01 23:48

ollydbg23 写道:

@piao 我已经把链接加入到wiki里面了,欢迎你继续完善,你的程序1和程序2,怎么是一模一样的?

不好意思 可能之前发帖的时候搞晕掉了,程序2应该是这个 download/file.php?id=284

谢谢所有支持和鼓励的朋友嘛

piao

OpenCV高中生

帖子: 62

注册: 2007-01-30 20:57

huwei99168 » 2009-03-19 21:34

《基于OpenCV的计算机视觉技术实现 》这本书上的相机标定程序中

CvSize square_size = cvSize(10,10)

里的(10,10)是以什么为单位的呢?

像素还是mm? cm?

mm或是cm 感觉都不合适啊?棋盘格子怎么也是3cm左右的?

这个参数的输入一直搞不懂,做过这个试验的朋友能给个提示吗?

非常感激。。。

huwei99168

OpenCV小学生

帖子: 7

注册: 2009-03-16 15:58

zhangshaobing517 » 2009-03-20 20:33

你那篇关于OPENCV的摄像 机标定的帖子几次,每次大家问这个问题,管理员就把你的帖子顶出来了,但是我还是想问,我在做的时候,对一种模板,每次得到的结果都大致相同,但是换了模板以后,就是另外的结果,不知道你有没有遇到这种问题,我在论坛里面喊过,没人应,呵呵呵

zhangshaobing517

OpenCV本科生

帖子: 113

注册: 2008-10-29 22:08

dulangnwpu

OpenCV高中生

帖子: 57

注册: 2008-10-15 9:02

tuxinyun » 2009-05-08 15:10

你好!我用楼主发的《基于OpenCV的计算机视觉技术实现 》中的程序,运行就出现这样的错误,“d:\backup\我的文档\毕业设计材料\标定\复件 from《基于opencv的计算机视觉技术实现 》\摄像机定标\cvut_test\calibration.cpp(1) : fatal error C1083: Cannot open include file: 'cvut.h': No such file or directory

执行 cl.exe 时出错.”为什么会这样?请帮忙解释一下。谢谢!

tuxinyun

OpenCV幼儿园宝宝

帖子: 1

注册: 2009-05-08 15:03

ollydbg23 » 2009-08-06 1:19

@楼上各位。

大家有没有考虑过,如果只拍摄”一张标定靶标的图片”,是否还可以使用此算法和函数?。。。。。。(似乎周围有人这么在用。)

本人不接受站内私人短信讨论技术问题,有问题请发贴讨论!!!

提问的智慧 OpenCV论坛中文搜索 论坛精华区

ollydbg23

OpenCV教授

帖子: 3111

注册: 2008-04-13 9:16

tigerliu

OpenCV幼儿园宝宝

帖子: 4

注册: 2009-07-27 15:06

Utopia » 2009-09-06 23:48

tuxinyun 写道:

你好!我用楼主发的《基于OpenCV的计算机视觉技术实现 》中的程序,运行就出现这样的错误,“d:\backup\我的文档\毕业设计材料\标定\复件 from《基于opencv的计算机视觉技术实现 》\摄像机定标\cvut_test\calibration.cpp(1) : fatal error C1083: Cannot open include file: 'cvut.h': No such file or directory

执行 cl.exe 时出错.”为什么会这样?请帮忙解释一下。谢谢!

目录设置不对嘛..