笔记总结-相机标定(Camera calibration)原理、步骤

笔记总结-相机标定(Camera calibration)原理、步骤      这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。1.为什么要相机标定?      在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。2.什么叫相机标定?       在大多数条件下这些参数必须通…

大家好,又见面了,我是你们的朋友全栈君。

       这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。

1.为什么要相机标定?

       在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。     


       【1】进行摄像机标定的目的求出相机的内、外参数,以及畸变参数

       【2】标定相机后通常是想做两件事:一个是由于每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变矫正畸变,生成矫正后的图像;另一个是根据获得的图像重构三维场景
      
摄像机标定过程,简单的可以简单的描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点Xi和对应的图像坐标二维点xi,这些三维点到二维点的转换都可以通过上面提到的相机内参K
,相机外参 R
和t,以及畸变参数 D
,经过一系列的矩阵变换得到。

2.什么叫相机标定?

        在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)

3.为什么相机标定很重要?

      无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。

4.相机标定方法有哪些?    

         相机标定方法有:传统相机标定法、主动视觉相机标定方法、相机自标定法。
传统相机标定法需要使用尺寸已知的标定物,通过建立标定物上坐标已知的点与其图像点之间的对应,利用一定的算法获得相机模型的内外参数。根据标定物的不同可分为三维标定物和平面型标定物。三维标定物可由单幅图像进行标定,标定精度较高,但高精密三维标定物的加工和维护较困难。平面型标定物比三维标定物制作简单,精度易保证,但标定时必须采用两幅或两幅以上的图像。传统相机标定法在标定过程中始终需要标定物,且标定物的制作精度会影响标定结果。同时有些场合不适合放置标定物也限制了传统相机标定法的应用。
        目前出现的自标定算法中主要是利用相机运动的约束。相机的运动约束条件太强,因此使得其在实际中并不实用。利用场景约束主要是利用场景中的一些平行或者正交的信息。其中空间平行线在相机图像平面上的交点被称为消失点,它是射影几何中一个非常重要的特征,所以很多学者研究了基于消失点的相机自标定方法。自标定方法灵活性强,可对相机进行在线定标。但由于它是基于绝对二次曲线或曲面的方法,其算法鲁棒性差。
       基于主动视觉的相机标定法是指已知相机的某些运动信息对相机进行标定。该方法不需要标定物,但需要控制相机做某些特殊运动,利用这种运动的特殊性可以计算出相机内部参数。基于主动视觉的相机标定法的优点是算法简单,往往能够获得线性解,故鲁棒性较高,缺点是系统的成本高、实验设备昂贵、实验条件要求高,而且不适合于运动参数未知或无法控制的场合。

5、常用术语
内参矩阵: Intrinsic Matrix
焦距: Focal Length
主点: Principal Point
径向畸变: Radial Distortion
切向畸变: Tangential Distortion
旋转矩阵: Rotation Matrices
平移向量: Translation Vectors
平均重投影误差: Mean Reprojection Error
重投影误差: Reprojection Errors
重投影点: Reprojected Points

6.相机成像原理


笔记总结-相机标定(Camera calibration)原理、步骤

    6.1  世界坐标系

     世界坐标系(world coordinate)(xw,yw,zw),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

   6.2  相机坐标系

    相机坐标系(camera coordinate)(xc,yc,zc),也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。

   6.3  相机坐标系转换为世界坐标系

     转换方程为:

笔记总结-相机标定(Camera calibration)原理、步骤

其中R为3*3的旋转矩阵,t为3*1的平移矢量,(xc,yc,zc,1)T为相机坐标系的齐次坐标,(xw,yw,zw,1)T为世界坐标系的齐次坐标。

   具体步骤为下图所示:

笔记总结-相机标定(Camera calibration)原理、步骤

图6.3.1

笔记总结-相机标定(Camera calibration)原理、步骤

图6.3.2

笔记总结-相机标定(Camera calibration)原理、步骤

图6.3.3

 

6.4  像素坐标系、图像坐标系

                                                     笔记总结-相机标定(Camera calibration)原理、步骤

                                                                            图6.4.1                                                                       

像素坐标系(pixel coordinate)
图6.4.1  ,像素坐标系uov是一个二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况。原点o位于图像的左上角,u轴、v轴分别于像面的两边平行。像素坐标系中坐标轴的单位是像素(整数)

像素坐标系不利于坐标变换,因此需要建立图像坐标系XOY其坐标轴的单位通常为毫米(mm),原点是相机光轴与相面的交点(称为主点),即图像的中心点,X轴、Y轴分别与u轴、v轴平行。故两个坐标系实际是平移关系,即可以通过平移就可得到。

6.5 像素坐标系转换为图像坐标系

笔记总结-相机标定(Camera calibration)原理、步骤

其中,dXdY分别为像素在XY轴方向上的物理尺寸,u0,v0为主点(图像原点)坐标。(这里dX =dx

  6.6 像素坐标系转换为图像坐标系

笔记总结-相机标定(Camera calibration)原理、步骤

针孔成像原理

       如图中,空间任意一点P与其图像点p之间的关系,p与相机光心o 的连线为op,oP与像面的交点p即为空间点P在图像平面上的投影。 该过程为透视投影,由上图的矩阵表示。

    其中,Zc为比例因子(Zc不为0),f为有效焦距(光心到图像平面的距离),(x,y,z,1)T是空间点P在相机坐标系oxyz中的齐次坐标,(X,Y,1)T是像点p在图像坐标系OXY中的齐次坐标。

  6.7 世界坐标系转换为像素坐标系

笔记总结-相机标定(Camera calibration)原理、步骤

上面的式子也等于:MXw ,其中M成为投影矩阵,是相机内参矩阵和相机外参矩阵的乘积。

其中 为摄像机的焦距,单位一般是mm;dx,dy 为像元尺寸;u0,v为图像中心。fx = f/dx, fy = f/dy,分别称为x轴和y轴上的归一化焦距.

为更好的理解,举个实例:
现以NiKon D700相机为例进行求解其内参数矩阵:
就算大家身边没有这款相机也无所谓,可以在网上百度一下,很方便的就知道其一些参数——      
  焦距 f = 35mm   最高分辨率:4256×2832     传感器尺寸:36.0×23.9 mm
根据以上定义可以有:
u0= 4256/2 = 2128   v0= 2832/2 = 1416  dx = 36.0/4256   dy = 23.9/2832
fx = f/dx = 4137.8   fy = f/dy = 4147.3

      其中相机的内参和外参可以通过张正友标定获取。通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点(为什么?你自己想想矩阵的运算,你就可以知道了),但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的Zc的值。

M1M2Xw=MXw

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140366.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]

    Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]随着大数据、人工智能的兴起,Python被带到了一个新的高度,但在使用Python过程中,很多人没搞清楚Python环境究竟是什么。当开发工程的时候,往往因为python环境的问题搞得一团糟。本文旨在说清楚什么是Python环境,什么是Python虚拟环境,并希望通过本文的学习掌握常用的Python环境管理工具的使用。

  • qq能够正常登陆但使用域名无法访问internet的解决方法

    qq能够正常登陆但使用域名无法访问internet的解决方法

  • MySQL最新版8.0.21安装配置教程~

    MySQL最新版8.0.21安装配置教程~MySQL最新版8.0.21安装教程

  • 深度学习(五)学习率的调节

    深度学习(五)学习率的调节   学习率对于深度学习是一个重要的超参数,它控制着基于损失梯度调整神经网络权值的速度,大多数优化算法(SGD、RMSprop、Adam)对其都有所涉及。学习率越小,损失梯度下降的速度越慢,收敛的时间更长,如公式所示:new_weight=existing_weight—learning_rate*gradient(新权值=当前权值–学习率×梯度)    如果学习…

  • ScheduledExecutorService 使用

    ScheduledExecutorService 使用ScheduledExecutorService,我平时没有用过,他的最大优点除了线程池的特性以外,可以实现循环或延迟任务。ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。先来个简单的延迟任务调…

  • kafka是什么牌子_kafka为什么叫kafka

    kafka是什么牌子_kafka为什么叫kafka一、定义ApacheKafka是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。系统包括四个主要API:ProducerAPI允许一个应用推送流记录通过一个或多个Kafkatopics;ConsumerAPI允许一个应用订阅一个或多个topics并且处理这些流记录;StreamsAPI允许一个应用作为一…

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号