| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 计算机视觉:相机模型与参数标定 -> 正文阅读 |
|
[人工智能]计算机视觉:相机模型与参数标定 |
一、相机投影模型????????计算机视觉都是对输入的图像(或视频)进行处理,而这写图像(或视频)都需要通过相机获得,用相机拍照(或者用相机录视频),所以是相机就是一个非常关键的工具。 ? ? ? ? 机器人在地面上行走时,需要用摄像头去扫描周围的环境,然后通过算法计算,判断出下一步应该怎么走,以确保能不摔倒并绕开障碍物。因此,了解相机(摄像头)是很有必要的。 1、小孔成像????????早在春秋战国时期,墨子在其著作《墨经》中提出了“光八条”,论述了光、物、影三者的关系。墨子设计的小孔成像实验形象地验证了光的直线传播特性以及物与影的几何投影关系,墨子的光八条概括了孔径相机的最基本的原理。 2、相机模型中的四个平面坐标系为建立小孔成像投影模型如下约束限制:
?从上面的图中,我们利用相似三角形的原理可以知道: 所以可以得到: 于是我们引入齐次坐标来表示上述相机、像素、世界坐标系之间的关系: 进一步变换为: 使用齐次坐标,方便计算,具有可以看下面这篇内容。 为什么要引入齐次坐标,齐次坐标的意义 - 简书 (jianshu.com) 3、像主点偏移????????每个相机都不能算十全十美的,可能由于厂家生成的原因,或者个人使用的原因......相机光心都有可能存在很微小的误差,完完全全在原点可能性较小,会发生一定的偏移。 ? ? ? ? 我们用??分别是在x、y方向上的偏移量。于是,我们写出内参矩阵: 4、畸变现象与内参矩阵???????由于相机的透镜制造精度以及组装工艺的偏差会带来畸变现象,导致拍出来的图像失真。镜头的畸变分为两类,分别是径向畸变和切向畸变两类: 图像径向畸变:由于透镜质量原因,沿着透镜半径方向分布的畸变,光线在远离透镜中心的地方比靠近中心的地方更加弯曲。
?图像切线畸变:切向畸变主要发生在相机和镜头不平行的情况下;因为有夹角,所以光透过镜头传到图像传感器上时,成像位置发生了变化。 ????????x,y是归一化的图像坐标,即坐标原点已经移动到主点,并且像素坐标除以焦距。p1、p2是径向畸变系数,r2=x2+y2。 ????????因此,内参矩阵中K应该加入畸变参数,实现畸变矫正: 5、外参矩阵????????上述讨论的范畴全是在相机坐标下发生的事情,然而实际情况是,相机往往装在机械臂末端,移动小车前方,车辆四周,当我们需要知道成像平面内的物体在机器人或者车辆坐标系下的位置时,需要进行一个坐标转换,称为外参(Extrinsic parameters),它与相机制造、镜头畸变没有任何关系,只与相机在世界坐标系内的安装位置和角度有关。从纯数学的角度来说,刚体运动和坐标变换总是可以分解为一个旋转运动和一个平移运动。 因此世界坐标系下的点P与图像坐标的关系可以表达为: 二、相机标定:张正友棋盘格标定法????????相机标定就是确定相机的内部参数以及外部参数,通过一种理论数学模型和优化的手段来近似实际的物理成像关系。
1、张正友棋盘格标定法描述????????使用张正友棋盘格标定法,是将照片中的三维信息压缩为二维(Z=0)。在张正友棋盘格标定法中,用于标定的棋盘格是三维场景中的一个平面Π,其在成像平面的像是另一个平面π,知道了两个平面的对应点的坐标,就可以求解得到两个平面的单应矩阵H。其中,标定的棋盘格是特制的,其角点的坐标是已知的;图像中的角点,可以通过角点提取算法得到(例如Harris角点),这样就可以得到棋盘平面Π和图像平面π的单应矩阵H。 ? ?方法步骤:
? ?优点:
Intel’s OpenCV libraryhttp://www.intel.com/research/mrl/research/opencv/Matlab version by Jean-Yves Bougethttp://www.vision.caltech.edu/bouguetj/calib_doc/index.htmlZhengyou Zhang’s web sitehttp:// http://research.microsoft.com/~zhang/Calib/ 2、计算外参和内参2.1 计算单应性矩阵H棋盘格平面到图像平面的单应性关系为: 其中s为尺度因子,K为摄像机内参数,R为旋转矩阵,T为平移向量。 s对于齐次坐标来说,不会改变齐次坐标值。张正友棋盘格标定法中,将世界坐标系构载在棋盘格平面上,令棋盘格平面为Z=0的平面。则可得: 其中K[r1, r2, r3, t]叫做单应性矩阵H,即 ? 2.2 计算内参数矩阵即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。为了方便计算,定义如下: 可以看到,B是一个对称阵,所以B的有效元素为六个,让这六个元素写成向量b,即:: 2.3 计算外参数矩阵外部参数可通过Homography求解,由 H = [h1 h2 h3] = λK[r1 r2 t],可推出: 一般而言,求解出的R = [r1 r2 r3] 不会满足正交与 归一的标准 ? 在实际操作中,R 可以通过SVD分解实现规范化( 详见原文)。 3、实验:MATLAB实现3.1 实验数据? ? ? ? 借用了实验室的棋盘格标定板,然后再使用手机对棋盘进行拍摄,拍摄了共20张的棋盘数据,同时具有角度变换和距离变换等设置。 3.2?实验过程使用MATLAB自带的工具箱进行标定。 Step1:点击APP Step2:点击下滑,找到图像处理和计算机视觉中的CameraCalibrator并点击 ?Step3:点击添加拍摄的棋盘格图像 Step4:添加照片,并点击运行 ? Step5:导出相机标定参数 Step6:在matlab工作空间里可以看到相机参数的属性 Step7:查看相机的内参矩阵,径向畸变和切向畸变 3.3 实验结果4、实验:OpenCV实现4.1 实现代码
4.2 实验结果?① 内参矩阵 ② 外参矩阵 5、实验分析与总结????????从最后实验得出的结果中,可以知道我手机的相机的各种内部参数和外部参数。通过MATLAB和OpenCV两种方式实现相机标定对比发现,两者的标定结果差距并不大,opencv标定的稳定性也是可以的。 ????????Matlab的优势在于可以显示重投影误差、3D效果图等,而且可以单张图片单独使用不同的窗口标定。Opencv的优势则是多次标定比较快捷,而且标定的结果可以直接用于后续的立体校正、立体匹配中。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:35:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |