(单目)相机标定算法:张正友的算法

paper:http://research.microsoft.com/~zhang/Papers/TR98-71.pdf

主页:http://research.microsoft.com/en-us/um/people/zhang/Calib/

一些帖子对摄像头畸变原理的总结:

http://blog.sina.com.cn/s/blog_5e3213f30101g2t5.html

http://www.baidu.com/link?url=Y-D_PIABMU-1VZsusDcBCMoFz-br4wg69tYUbnDIFMlfRlRBL7hnal_4r47cnDxSsm1eHYEDJJ43qslLTN-p4D4qz7WSsKCRX-u0yWiuWda&wd=&eqid=e1e90abc00064dc400000006567b5327

《学习OpenCV》一书中对摄像头标定有详尽说明:第11章——“摄像机标定”一节  P422

VC下实现相机标定,主要分两步:matlab中计算标定参数、利用opencv的接口对输入图像进行标定

matlab工具箱:Camera Calibration Toolbox for Matlab,主页:http://www.vision.caltech.edu/bouguetj/calib_doc/index.html#examples

主要看以下内容:

1、工具箱的详细使用方法:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html

2、标定参数说明:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html

这一步关键是采集一系列不同角度拍摄的棋盘格图像。实践发现,棋盘格的制作是有讲究的,格子尽量面积小,保证有足够多的正方形,也就有足够多的角点,让整个视野区域都布满角点,计算校正矩阵的时候,从中心到远离中心的每个位置都能够考虑进去。如果格子太大,校正的精度就会下降,会使校正结果出现误差。这是因为,每个角点之间的距离越大,这段距离之间的可能发生畸变的点越多,但却没有体现在棋盘格中(作为角点标出),因此标定算法计算校正矩阵时就会漏掉越多畸变位置,其校正精确度将越差。

opencv的标定相关函数如下:(基于opencv 3.0)

void initUndistortRectifyMap(InputArray cameraMatrix, InputArray distCoeffs, InputArray R, InputArray newCameraMatrix, Size size, int m1type, OutputArray map1, OutputArray map2)

用于获得标定时的变换矩阵,参数说明:

cameraMatrix,内参数矩阵,A = [ fx, 0, cx ; 0, fy, cy; 0, 0, 1],大小3*3,其中与matlab工具箱计算结果的对应关系为:fx、fy对应fc的两项,cx、cy对应cc的两项

distCoeffs,外参数(失真参数)矩阵, distortion coefficients,包含4, 5, or 8 元素的一维矩阵,对应matlab计算结果的kc

R,矫正矩阵,用于双目摄像头,这里设为空矩阵即可

newCameraMatrix,同样是双目时用到,这里输入cameraMatrix即可

size,输入图像尺寸

m1type,map1的类型,设为CV_32F

map1、map2,X、Y方向的变换矩阵

void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

按两个变换矩阵对输入图像进行变换

interpolation为插值算法,设为cv::INTER_NEAREST即可

void undistort(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray() )

一个整合版函数,包括以上两个函数

效果:

原始

校正后

注意:如果相机的畸变比较严重时,校正后的图像中,目标物可能会超出图像区域,此时如果想让校正图像包含目标物整体,则需要在校正之前扩充图像的大小

相机标定入门教程【 OpenCV + Matlab】相关推荐

  1. matlab相机标定教学视频,相机标定入门教程【 OpenCV + Matlab】

    (单目)相机标定算法:张正友的算法 一些帖子对摄像头畸变原理的总结: http://www.baidu.com/link?url=Y-D_PIABMU-1VZsusDcBCMoFz-br4wg69tY ...

  2. 利用Matlab进行相机标定并使用openCV进行简单三维重建

    注:本文主要针对Matlab和OpenCV跨平台进行相机标定.单相机三维重建工作的实现,因为我发现网上竟然没有一篇博客径直指出这两者在进行图像处理时的巨大差异(坐标系完全不同),不然我也不会走了很多弯 ...

  3. 单目相机标定(使用OpenCV)

    关于相机标定的理论知识和使用Matlab软件进行相机标定请看这篇博文:单目相机标定(使用Matlab) 这次因为项目原因需要给海康工业相机进行标定了,下载Matlab软件有些麻烦(主要是我电脑内存小. ...

  4. 相机标定原理和opencv代码解析

    1.单目标定 单应矩阵 设三维空间点的齐次坐标,对应的图像坐标为 他们满足一下关系: s为尺度因子,K为内参矩阵 R和T旋转平移矩阵统称为外参 假设我们提供K个棋盘图像,每个棋盘有N个角点,于是我们拥 ...

  5. python绘制黑白棋盘_生成黑白棋盘标定图和单目相机标定(python+opencv实现)

    学习记录. 事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下. 相机成像 相机的成像原理--小孔成像 然而,在实际由于设计工艺问题.相机安装环 ...

  6. python opencv 相机标定_使用OpenCV校准鱼眼镜头的方法

    01.简介 当我们使用的鱼眼镜头视角大于160°时,OpenCV中用于校准镜头"经典"方法的效果可能就不是和理想了.即使我们仔细遵循OpenCV文档中的步骤,也可能会得到下面这个奇 ...

  7. 相机标定的理解及采用opencv和matlab工具箱的标定方法

    一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标系和像平面 ...

  8. matlab相机标定工具箱进行相机标定,相机标定的理解及采用opencv和matlab工具箱的标定方法...

    一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标系和像平面 ...

  9. 使用OpenCV进行相机标定

    1. 使用OpenCV进行标定 相机已经有很长一段历史了.但是,伴随着20世纪后期的廉价针孔照相机的问世,它们已经变成我们日常生活的一种常见的存在.不幸的是,这种廉价是由代价的:显著的变形.幸运的是, ...

最新文章

  1. 挑选适合自己的公司——网络工程师你是否真的已经倒下(二)
  2. Libvirt — 4 种主机虚拟化网络模式
  3. android视频播放指定位置,android – 如何在某个特定位置的视图中查看视频?
  4. 基本粒子群算法(PSO)的改进
  5. 51Nod --1133 不重叠的线段
  6. VTK:3DArray用法实战
  7. C# WinForm开发系列 - TextBox
  8. C++总结笔记(七)—— 运算符重载
  9. axios vue 回调函数_vue中ajax请求与axios包完美处理
  10. 5008.vs2015创建c++动态库
  11. axure操作回复_Axure8.0基础教程(31-40)新手必须掌握的基础操作
  12. HowNet介绍及相关API的使用方法
  13. 如何确保运维数据安全
  14. linux系统新增一块SCSI硬盘并分区挂载到指定目录
  15. 算法题-----题目、题解、个人算法、个人思考
  16. 怎么用python画螺旋_用Python tu绘制螺旋
  17. 常见服务器返回状态码
  18. 产品DAU下降如何分析
  19. 经典物理学电荷连续性方程推导
  20. 交叉编译-20:gettext移植到君正平台

热门文章

  1. windows如何软件获取主板序列号等信息
  2. linux raid1读取速度,RAID1,RAID5,SSD读写性能测试结果1(实测)
  3. MIT的学习资料(reading部分)锁与同步学习笔记
  4. VC在编译链接的无故死掉解决方案(防VC6卡死)
  5. 2011年《Weighted dynamic time warping for time series classification》
  6. 7-8 图着色问题(25 分)
  7. JPA Column注解
  8. 【AUDIO音频兴趣拓展】IOT产品声学结构设计_三、音频腔体设计
  9. BBSxp5.11/Licence暴库传SHELL
  10. Android 开发环境搭建 与在编译中遇到错误make Error 45解决方法