matlab张正友摄像机标定算法应用,张正友摄像机标定的研究(MATLAB+OpenCV)
张正友 本科浙大,本来以为是中国人论文是中文呢,哎
不过里面的棋盘格跟我的不一样啊,why???,我决定先看看中文的论文吧,我的首要任务是弄清楚输入输出,流程,怎么用吧
matlab 跟 opencv上都有张正友的实现
因为cvCalibrateCamera2 函数主要是用张正友的平面标定方法的,所以首先我建议大家看一下张正友的那篇经典的论文
1) 完整版 22页 里面分析的非常详细《A Flexible New Technique for Camera Calibration.rar》(http://research.microsoft.com/~zhang/Papers/TR98-71.pdf)
2) 精简版 8页《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
(http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf)
piao 在opencv论坛上的帖子
看到论坛里有不少人在用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(525.67 KiB) 被下载 17063 次
程序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
附件
opencv+cvut 实现 http://wenku.baidu.com/view/e88cc989d0d233d4b14e691c.html原理部分单应性矩阵在摄像机标定时的作用
在计算机视觉中单应性矩阵的求解在摄像机标定的过程中有重要的意义,单应性矩阵中包含着摄像机的内参数矩阵,旋转向量和平移向量。
我们设3维空间有一点Q=[X Y Z 1]T(齐次坐标系表示),到成像仪上的q[x y 1]T映射,设单应性矩阵为H,s为比例系数。则Q和q之间的关系可表示为q=ShQ.
在点映射过程中,点要经过旋转和平移的物理变换,所以设物理变换坐标W=[R T],R为旋转向量,T为平移向量。然后再投射过程中,根据得到的摄像机的内参矩阵M,所以q=sMWQ,从而推算出H=sMW.
通过单应性矩阵,我们把源图像平面上的点击位置与目标图像平面的伤的点击位置联系了起来,而opencv中有一个函数提供了单应性矩阵的计算:cvFindHomography().而opencv中是采用从多个视场,采集图片,并计算相应的单应性矩阵,从而求解摄像机的内参数(内参数相对于摄像机的视场是不变的)。
matlab张正友摄像机标定算法应用,张正友摄像机标定的研究(MATLAB+OpenCV)相关推荐
- 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)
你好,我是小智. 上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python.C++.Matlab版本的算法实现方式. 该算法适用于将相机装在手抓上和将相机装在外部两种情况 ...
- 相机激光标定算法:从理论到实践
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文是标定系列解读第三篇,介绍了Camera-Lidar标定,通过对一些基础知识和小细节进行讨论和理论 ...
- 张正友摄像机标定的研究(MATLAB+OpenCV)
张正友 本科浙大,本来以为是中国人论文是中文呢,哎 张正友的主页: http://research.microsoft.com/en-us/um/people/zhang/Calib/ 不过里面的棋盘 ...
- 张正友标定算法理论及算法实现
张正友标定算法理论及算法实现 理论基础 1999年,微软研究院的张正友提出了基于移动平面模板的相机标定方法.此方法是介于传统标定方法和自标定方法之间的一种方法,传统标定方法虽然精度高设备有较高的要求, ...
- 张正友相机标定算法原理与源代码(OpenCV+C++)
摄像机的标定问题是机器视觉领域的入门问题,可以分为传统的摄像机定标方法和摄像机自定标方法.定标的方法有很多中常见的有:Tsai(传统)和张正友(介于传统和自定标)等, 摄像机成像模型和四个坐标系(通用 ...
- 张正友相机标定算法详解
张正友相机标定算法详解 1.齐次表示法与一些基本结论 1.1 点与直线的齐次表示 在射影几何中,通常用齐次方式来表达点与直线.比如p=(u,v)p=(u,v)p=(u,v)被表示成p^=(x1,x ...
- 标定代码:张正友标定法(matlab工具箱自编程序)(matlab)
张正友标定法原理 张正友标定法,一般采用二维棋盘格标定板. 标定板制作链接:棋盘格 张正友标定法推导过程
- 张正友立体魔方_双目立体视觉中的相机标定与机器人位置标定
在基于双目立体视觉的工业机器人抓取系统中涉及三个坐标系:世界坐标系(现实世界中的坐标位置).机器人坐标系(以机器人基座标 标识的坐标位置)和 相机坐标系(以双目相机中某相机光心位置为原点,光轴作为参考 ...
- 正余弦函数的matlab仿真,实现正余弦信号的算法比较
实现正余弦函数的几种算法记录 1.几种算法的理论推导与matlab仿真 (1)Taylor级数逼近正余弦函数的推导 精度要求为20bit,其对应误差为9.536e-7,所以泰勒函数逼近的误差值要小于9 ...
最新文章
- ExtJS FormPanel不执行校验
- 如何快速优雅的在CSDN输入公式?
- POJ 1182 食物链
- python将列表转换为字符串_每日一课 | Python将文件读入列表
- BOM—浏览器对象模型(Browser Object Model)
- 基于Django进行简单的微信开发
- DBCS和UCS编码相关
- php 数组 utf8,PHP数组编码gbk与utf8互相转换的两种方法实例分享
- 笔记本设置路由实现内外网同时使用
- 如何用O2OA公文编辑器制作标准的红头文件?
- 邮箱地址是什么?企业邮箱的密码安全
- CEC2018:动态多目标测试函数DF6~DF9的PS及PF(提供Matlab代码)
- Java压缩文件/文件夹
- UUP, Windows 11 更新机制的未来
- 关于Youtube榜单数据的探索,排名第一的视频播放次数已接近90亿次!
- 更改jupyter lab默认启动路径(亲测有效)
- 稳定性大幅度提升:SOFARegistry v6 新特性介绍
- 网管IT服务管理五个心得 (zt)
- 漏洞扫描服务内容、方式以及流程一篇了解
- 魂斗罗_MD《魂斗罗》各大BOSS回顾