码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Matlab工具箱实现张正友相机标定


    1. 基本原理

           一个二维平面中的棋盘点m和一个三维空间内的棋盘点M可以表示如下:

           它们对应的齐次坐标\hat{m}和\hat{M}可以表示如下:

           如果m和M是同一个点,那么他们的转换关系可以写为:

    其中A=\begin{bmatrix} \alpha & \gamma & u_0\\ 0 & \beta & v_0\\ 0 &0 & 1 \end{bmatrix},s是任意的比例因子,[R\ t]是外参矩阵,R是旋转矩阵,t是平移矩 阵,A是相机内参矩阵,(u_0,v_0)是坐标的主点,\alpha和\beta分别是图像在u和v轴的比例因子, \gamma是描述两个坐标轴倾斜角的参数。

           进一步地,假定棋盘点所在平面在世界坐标系中的Z坐标为0,且X, Y轴与棋盘格的方向重合,原点为检测到棋盘格点的首点,如图 1 所示,其中原点为黄色矩形标记点。

    图 1 示意图 

           那么可以得到如下式子:

           则点M和它在棋盘上的映射点m的关系可以用单应矩阵H表示如下:

           这里H=A[r_1,r_2,t],\hat{M}=[X, Y, 1]^T。显然H是一个 3*3 的矩阵,自由度是 8。需要 8 个 方程即 4 组对应点,但是通常情况下,为了得到更准确的解,需要大于 4 对的对应点, 方程组就会变成超定的,此时可以使用最小二乘法进行优化得到最后的解H。

    2. 实验过程和步骤

           原始Camera Calibration工具箱链接如下。由于其最近更新为2003年,版本较新的matlab运行这个工具箱的代码会出现很多错误。因此,本文只采用它提供的20张棋盘图,利用matlabR2021a内置的工具箱完成实验。

    Camera Calibration Toolbox for Matlab (stanford.edu)http://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/example.html通过下面的链接下载用于标定 20 张的棋盘图,如图 2 所示

    http://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/calib_example.ziphttp://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/calib_example.zip

    图2 20张棋盘图

          打开matlabR2021a自带的App “Camera Calibrator”

    图3 Camera Calibrator位置示意图

           导入下载的20张图片后点击Calibrate即可完成标定。

    图4 运行示意图

    3. 实验结果

           从图7中可以看出第5、18、19、20张图的平均误差较大,其中第5张图的平均误差最大。观察误差较大的4张图与其他16张图的不同点,猜测可能是因为棋盘偏离标准位置所导致的,这里的标准位置我认为是棋盘平面与相机方向正交或平行。

    图5 以摄像头为参考系

    图6 以平面为参考系

    图7 像素平均误差

    4. 总结

    算法优点:张正友标定方法相比于经典方法显得十分灵活和简便,只需要摄像机从不同方向观测标定板即可。

    局限性:摄像机拍照时通过透镜把实物投影到像平面上,但是由于透镜的精度及其他问题,得到的图像会出现失真的情况。因此我们需要考虑成像畸变的问题。透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等,但都没有径向和切向畸变影响显著。张正友标定方法只关注了影响最大的径向畸变,忽略了切向畸变,所以标定数据和实际仍存在轻微误差。

  • 相关阅读:
    使用OpenPCDet实现VoxelNext进行训练和测试:实现NuScence数据集的全局感知结果可视化
    redis set命令总结
    VMware安装Ubuntu 16.04(完整版图文教程)
    看表情包学Linux:基本指令介绍
    torch.onnx.export详细介绍
    微软OneDrive简介:特点、应用场景、使用方法、注意事项
    C语言精华题目锦集1
    SSM整合流程(整合配置、功能模块开发、接口测试)
    Leetcode 429:N叉树的层次遍历
    英语语音篇 - 元音自然拼读
  • 原文地址:https://blog.csdn.net/qq_42276781/article/details/125497760
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号