首页 > 其他分享 >总结 | 相机标定的基本原理与改进方法

总结 | 相机标定的基本原理与改进方法

时间:2022-09-30 12:01:38浏览次数:50  
标签:基本原理 投影 标定 像素 相机 图像 坐标系


1、相机模型

(1)各个坐标系

确定空间某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型(各个坐标系),这些坐标系之间的转换参数就是相机参数,求解参数的过程叫做相机标定(摄像机标定)。建立立体视觉系统所需要的各个坐标系,包括世界坐标系、相机坐标系、以及图像坐标系(物理和像素坐标系)。


坐标系名称

坐标系描述

世界坐标系(3D)

描述目标在真实世界中的位置引入的参考坐标系(Xw,Yw,Zw)

相机坐标系(3D)

联系世界坐标系与图像坐标系的桥梁,一般取摄像机的光学轴为z轴(Xc,Yc,Zc)

图像物理坐标系(2D)

根据投影关系引入,方便进一步得到像素坐标,单位为毫米,坐标原点为摄像机光轴与图像物理坐标系的交点位置(x,y)

图像像素坐标系(2D)

真正从相机内读到的信息,图像物理坐标的离散化,以像素为单位,坐标原点在左上角(u,v)

首先明确各个坐标系之间的转换关系:

①  世界坐标系与相机坐标系

这是将一个三维的坐标系转换成另一个三维的坐标系,这两个坐标系之间的转换属于刚体转换,物体只改变在两个坐标系中的空间位置(平移)和朝向(旋转),而不改变其形状。它们之间的转换关系可以用旋转矩阵R和平移矩阵T来完成,这两个矩阵反映了世界坐标系与相机坐标系之间的转换关系,合称外参矩阵Lw。获得了外参矩阵,这样已知世界坐标系中的一点通过转换关系就可以得到此点在相机坐标系的位置,反之亦成立。 

②  相机坐标系与图像物理坐标系

这是一个将三维的坐标系转化为二维的坐标系,这两个坐标系之间的转换要通过几何投影模型关系获得,下面是两个坐标系的投影关系示意图: 

总结 | 相机标定的基本原理与改进方法_二维

③ 

首先以一个形象的例子来说明两个坐标系间的区别。物理坐标系是一个连续的概念,它是以毫米为单位,就好比某一观众在电影院里的具体坐标值(3.4,5.9);而像素坐标系是一个离散的概念,它是以像素作为单位,只能是整数值坐标,就好比某一观众在电影院里的位置是(第三排,第六列)。另外还需要注意的是,这两个坐标系的原点位置也不相同,物理坐标系将原点定为摄像机光轴与图像物理坐标系的交点位置,通常称其为主点;而像素坐标系则以像素图像的左上角为原点。

(2)相机畸变模型
一般只考虑径向畸变k和切向畸变p

总结 | 相机标定的基本原理与改进方法_二维_02

其中总结 | 相机标定的基本原理与改进方法_二维_03

一般选择2或3个k值,这个是经验证过可以获得较好的结果,如果k取得再多影响不会很大可以忽略,甚至可能反而导致效果不好。
畸变模型:枕型畸变(k>0)和桶型畸变(k<0)

总结 | 相机标定的基本原理与改进方法_3d_04

当k>0时,r越大(点离中心越远),畸变量越大,r越小,畸变量越小,呈枕型。

当k<0时,r越大(点离中心越远),畸变量越小,r越小,畸变量越大,呈桶型。

(3)相机标定参数

内参:

(单位长度的像素个数)总结 | 相机标定的基本原理与改进方法_世界坐标系_05

(主点坐标)总结 | 相机标定的基本原理与改进方法_3d_06

(畸变系数)总结 | 相机标定的基本原理与改进方法_世界坐标系_07

外参:R、T(旋转和平移矩阵)

2、张正友标定法

(1)标定基本原理

目标函数:

总结 | 相机标定的基本原理与改进方法_3d_08

这里A为内参,R、T为旋转平移矩阵。n代表n张图片,m代表每张图片上有m个角点。

可以将三维空间中的点都投影到二维空间的对应点m^处,在二维平面上通过角点提取算法可以提取出对应角点总结 | 相机标定的基本原理与改进方法_3d_09。通过选择合适的内外参数来使得目标函数达到最小,将这一组内外参数作为实际求得的内外参数。

提出问题:为什么张正友没有使用这样一种简单直观的方式?

因为这样做要优化的量太多,如果初始值不好很容易陷入局部最优。

张正友的贡献:通过数值解法解出了一个比较准确的初始值(内外参),使得后面做最优化的方法有一个非常好的初始值,所以结果比较准。

(2)张正友标定原理

先求解单应性矩阵,根据单应性矩阵求解相机的内外参,这里不做详细过程介绍。张正友标定法通过代数求解出了一个代数意义上的内外参最优解,最后也需要将多组代数意义上的最优解代入目标函数中验证,获得物理意义上的最优解。

也可以将畸变因子考虑在内,做进一步优化,目标函数就变为如下形式:

总结 | 相机标定的基本原理与改进方法_3d_10

3、一些改进

(1)明确张正友的方法没有限制棋盘格或者圆环。

只要可以检测出需要的特征点就可以,至于图案形状是没有限制的。

(2)圆环与棋盘格的优缺点分别是什么

圆环标定板的精度会好一些,原因是因为圆的特征检测(提取圆心坐标)的鲁棒性要比正方形的特征检测(检测边缘的交点作为角点)好。

(3)比较圆环与棋盘格标定板

圆检测精度高,表现为中心拟合精度高,但是具有偏心误差,这是由于空间中的圆的圆心投影不等于投影出的椭圆的圆心。

棋盘格检测精度低,可能是因为实际的棋盘格标定板的边缘存在过渡带,不是直接的由白瞬间变黑,但不存在偏心误差,这是由于空间中两条相交直线的交点,投影到二维图像上仍然是这两条投影直线的交点,故棋盘格检测不存在偏心误差。。      

解决办法:可以将椭圆先投影为正圆,检测正圆的圆心,再通过透视投影的方法将其对应到原图像中,而不是检测椭圆的中心,通过这样一个变换把真实的圆心提取出来,这样就不存在偏心误差了。

以下是使用棋盘格标定板和圆环标定板的实验数据:

总结 | 相机标定的基本原理与改进方法_3d_11

(4)标定板选择

如果知道怎么纠正偏心误差,用圆环标定板的精度一定会更高;如果不知道如何纠正偏心误差,则选择圆环标定板和棋盘格标定板的精度差不多或更差。

4、实际操作

(1)OpenCV中的函数cv::calibrateCamera

calibrateCamera(

object_points,//3维物点坐标

image_points,//通过角点检测出的2D像点坐标

imageSize,//图片尺寸

cam_intr_para,//相机内参

distCoffs,//相机畸变矩阵

rvecs,//旋转矩阵

tves//平移矩阵

)

(2)拍摄机位和数量的选择

至少需要拍不同视角的3张照片,大概需要拍20张不同视角照片,照片最好覆盖图像的每一个位置,不能只固定在中间位置上拍摄。

总结 | 相机标定的基本原理与改进方法_世界坐标系_12

(3)标定结果的评判标准

重投影误差Re-projection error

用目标函数,将三维物点投影至二维图像中与二维图像中提取出的对应角点坐标做某种差值计算(目标函数)求和。

提出问题:重投影误差是否可以完全正确的反应出标定(内外参)结果是否正确?

不一定,这个重投影误差还受以下因素影响:

①图像角点检测精度,如果角点检测精度差,会直接影响到重投影误差;

②相机本身存在噪声,相机抖动;

③与相机分辨率有关,由于单位是像素。在其它条件一致的情况下,分辨率越大的相机,它的像素越密集,得到的重投影误差也会大;

④优化算法

其它评判标准:

选择两个三维的点,将其投影在二维图像上,计算这两个点的距离。用角点检测算法在这个图像上检测出对应点,也计算这两个像点之间的距离。判断两个距离的偏差。

(4)应用

①单目:PnP问题

根据三维标定靶与二维平面之间的对应点坐标,求解三维标定靶与二维平面之间的转换关系(旋转和平移矩阵)。

在OpenCV中可通过函数solvePnP实现。

②双目测量

用两个相机拍摄的图片中可以恢复三维信息,这是由于二维图片中的一点对应于三维空间中的一条射线,由两条射线的交点可以确定这个点在三维空间中的位置。

标签:基本原理,投影,标定,像素,相机,图像,坐标系
From: https://blog.51cto.com/u_14439393/5725738

相关文章

  • 系列篇|事件相机-数据集与仿真器
    在上次的推送中,我们介绍了事件相机的基本原理。这次简要介绍一些数据集和仿真器。0、为什么需要数据集与仿真器?在研究中,为了比较不同算法的优劣,研究人员不能用自己采集的数......
  • JS中面向对象编程(OOP)的基本原理——this关键字、原型链、构造函数、继承
    面向对象编程(ObjectOrientedProgramming),是软件开发过程的主要方法之一。在OOP中,使用对象和类组织代码来描述事物及其功能。虽然点符号是访问对象属性的有效方法(如myobj.......
  • 世界坐标系转换/相机标定/畸变矫正-Python
    PnP(Perspective-n-Point)是求解3D到2D点的对应方法。不论是相机和雷达的标定还是相机和相机的标定都可以使用PNP来解决,即通过不同坐标系下相同的点对求解变换矩阵。这里......
  • 一--Fundamentals of Computer Architecture 计算机体系结构的基本原理
    1.1LayersofComputerSystem计算机系统的层次1.2DefiningComputerArchitecture定义计算机体系结构1.3MeasuringandReportingPerformance测量和报告性能1.4Qu......
  • Halcon 生成标定板
    Halcon生成标定板:gen_caltab(7,7,0.0125,0.5,'caltab.descr','caltab.ps')XNum:X轴圆点数量YNum:Y轴圆点数量MarkDist:圆点间距,单位为米DiameterRatio:圆点直径与间距......
  • 爬虫基本原理
    目录一、爬虫是什么二、爬虫的基本流程三、请求与响应四、总结一、爬虫是什么1、浏览器获取数据的方式浏览器提交请求->下载网页代码->解析/渲染成页面2、爬虫获......
  • Basler相机SDK注意事项
    1、格式转换后,CPylonImage.GetBuffer()访问冲突原因是ptrGrabResult里有缓存,需在合适的位置先 ptrGrabResult.Release()。推荐使用方式二。2、QPixmap::fromImage(img)......
  • 【项目实战】自备相机+IMU跑通Vins-Mono记录
    前言初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以......
  • 防爆数码相机主要性能有哪些
    防爆数码相机的主要性能有哪些呢?当然是拍照像素和防爆性能了。防爆照相机主要用于煤矿灾害事故勘查和日常地质编录,井下摄录生产安全情况、机电设备运行状态、顶板支护......
  • plus.camera.getCamera()调用相机、摄像头
    <divstyle="line-height:1.5rem;"class="image-itemspace"οnclick="getImage()">拍照</div><divstyle="line-height:1.5rem;"class="image-itemspace"οncli......