OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 98688|回复: 88

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

[复制链接]
发表于 2008-11-18 18:41:49 | 显示全部楼层 |阅读模式
看到论坛里有不少人在用OpenCV中的标定函数cvCalibrateCamera2 进行相机标定时遇到不少问题,说一些自己的看法。


1)因为cvCalibrateCamera2 函数主要是用张正友的平面标定方法的,所以首先我建议大家看一下张正友的那篇经典的论文
完整版 22页 里面分析的非常详细《A Flexible New Technique for Camera Calibration.rar》(<!-- m --><a class="postlink" href="http://research.microsoft.com/~zhang/Papers/TR98-71.pdf">http://research.microsoft.com/~zhang/Papers/TR98-71.pdf</a><!-- m -->)
精简版 8页《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
(<!-- m --><a class="postlink" href="http://www.vision.caltech.edu/bouguetj/calib_doc/papers/zhan99.pdf">http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf</a><!-- m -->)

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幅来标定(<!-- m --><a class="postlink" href="http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html">http://www.vision.caltech.edu/bouguetj/ ... ample.html</a><!-- m -->)

  原因之三)图像上角点提取的不准确,我认为用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的计算机视觉技术实现》(<!-- m --><a class="postlink" href="http://www.sciencep.com/s_single.php?id=14881">http://www.sciencep.com/s_single.php?id=14881</a><!-- m -->)这本书上的相机标定程序 (有标定图片 改下参数 可以直接运行)
  
程序2) 自己写的一个简单的标定程序:plane_calibration_opencv(要先准备好 角点的图像坐标和对应的世界坐标 )
<!-- l --><a class="postlink-local" href="http://www.opencv.org.cn/forum/download/file.php?id=284">download/file.php?id=284</a><!-- l -->
程序3)http://www.opencv.org.cn主页上的例子
  <!-- m --><a class="postlink" href="http://www.opencv.org.cn/index.php?title=%E6%91%84%E5%83%8F%E5%A4%B4%E6%A0%87%E5%AE%9A&variant=zh-tw">http://www.opencv.org.cn/index.php?titl ... iant=zh-tw</a><!-- m -->
回复

使用道具 举报

发表于 2008-11-18 18:41:49 | 显示全部楼层

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

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

使用道具 举报

发表于 2008-11-19 09:29:19 | 显示全部楼层

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

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

使用道具 举报

发表于 2008-11-19 19:40:54 | 显示全部楼层

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

支持经典 感谢奉献者
回复 支持 反对

使用道具 举报

发表于 2008-11-19 20:15:14 | 显示全部楼层

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

建议置顶。
回复 支持 反对

使用道具 举报

发表于 2008-11-19 22:32:14 | 显示全部楼层

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

很有用,谢谢!
回复 支持 反对

使用道具 举报

发表于 2008-11-28 21:34:29 | 显示全部楼层

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

好文章
回复 支持 反对

使用道具 举报

发表于 2008-11-30 11:12:24 | 显示全部楼层

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

好文啊!收藏之。。
回复 支持 反对

使用道具 举报

发表于 2008-12-5 16:35:20 | 显示全部楼层

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

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

使用道具 举报

发表于 2008-12-6 01:02:58 | 显示全部楼层

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-7 11:47 , Processed in 0.009646 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表