OpenCV 摄像头校正

转载自:

http://blog.njuaplusplus.com/camera-calibration/

官方教程地址:

http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

利用OpenCV校正摄像机

摄像机流行了很久了。随着20世纪末的便宜的针孔摄像机的引入,摄像机融入到了人们日常生活中。不幸的是,这种便宜是需要代价的:显著的畸变。幸运的是,这些变形都是常数,可以利用校正和重映射来修正畸变。甚至我们可以确定摄像机的自然单元(像素)和真实世界单元(例如毫米)之间的关系。

 观点

对于畸变,OpenCV考虑的径向和切向因素。对于径向因素,我们使用如下公式:

对于一个输入图像中位于的原像素点,他在正确的输出图像中应位于。径向变形主要表现为桶形和鱼眼效果。

切向畸变由于摄像镜头不是和图像平面完全平行导致的。修正这个畸变是通过如下公式:

因此我们有5个畸变参数。OpenCV将它们组织成5列1行的行矩阵:

对于单位换算,我们使用如下公式:

这里有w是因为我们使用的单应性坐标系统(homography coordinate system 且w=Z)。位置的参数是f_xf_y(摄像头焦距)以及(c_x, c_y)表示像素坐标中的光学中心。如果对于两个轴,有基于纵横比a的通用的焦距,那么有f_y=f_x*a,并且在上述公式中,我们将仅有一个焦距f。包含上述四个参数的矩阵被称为,摄像机矩阵(camera matrix)。由于畸变系数和摄像头分辨率无关,所以可以根据校正分辨率和当前分辨率进行缩放。

确定上述两个方程的过程就是校正。计算这些参数是通过一些基本的几何等式完成的。等式和所用校正物体相关。当前OpenCV支持三种校正物体:

  1. 经典的黑白棋盘格
  2. 对称圆形图案
  3. 不对称圆形图案

你需要用摄像机拍去好友这些图案的照片,让OpenCV找到它们。每个找到的图案与新等式相同。纬二路解决等式,你至少需要一个预先确定的图案照片数目来组成一个适定的的等式系统。通常棋盘格的数量较少。

目标

该示例将:

  1. 确定畸变矩阵
  2. 确定摄像机矩阵
  3. 允许从摄像机,录像和图片文件列表
  4. 从XML/YAML中配置
  5. 保存结果到XML/YAML文件
  6. 计算重投射误差

源代码

http://docs.opencv.org/_downloads/camera_calibration.cpp
http://docs.opencv.org/_downloads/in_VID5.xml
http://docs.opencv.org/_downloads/VID5.xml

说明

读入设置:

自定义了Settings类

不懂:cornerSubPix中的winSize什么意思。。

http://docs.opencv.org/trunk/modules/imgproc/doc/feature_detection.html#void cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria)

校正和保存

每个摄像机只需校正一次,所以我们可以将参数保存下来,便于以后使用。

转载自:

http://blog.njuaplusplus.com/camera-calibration/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值