相机标定(Camera calibration)Matlab——棋盘格标定原理,流程

计算机视觉----相机标定

相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数。求解参数的过程称为相机标定

开源代码参考

–Intel’s OpenCV library:  Intel Labs | The Future Begins Here

–Matlab version by Jean-Yves Bouget:  Perona Lab - Home

–Zhengyou Zhang’s web site:  A Flexible New Technique for Camera Calibration - Microsoft Research

opencv角点检测、棋盘格检测、亚像素cvFindCornerSubPix()

相机标定(Camera calibration)

OpenCV相机标定和姿态更新

实验步骤:

1.打印一张棋盘格A4纸张(黑白间距已知),并贴在一个平板上

2.针对棋盘格拍摄若干张图片(一般10-20张)

3.在图片中检测特征点(Harris特征)

4.利用解析解估算方法计算出5个内部参数,以及6个外部参数

5.根据极大似然估计策略,设计优化目标并实现参数的refinement

相机成像过程涉及坐标变换     

 包含世界坐标系(Xw,Yw,Zw),相机坐标(Xc,Yc,Zc),平面坐标(x,y),像素坐标(u,v). 

1.1图像坐标系

坐标系中,每个像素坐标都是像素来表示的,但是像素表示不能反映图像中的物理尺寸,所以把像素坐标转换为图像坐标。像素坐标系的原点平移到图像的中心,就定为坐标系的原点,图像坐标系x,y分别与像素坐标系的u,v轴平行,方向相同。相机中感光器件每个像素物理尺寸dx*dy,则图像坐标系中的坐标(x,y)与像素坐标系中的坐标(u,v)之间的关系可以表示为:

                                                        

改写成其次矩阵形式为:

                                            

1.2相机坐标系

相机坐标系以相机的光轴作为z轴,光现在相机的光学系统中心位置就是原点Oc,相机坐标系Xc,Yc分别于图像坐标系X,Y轴平行。相机坐标原点与图像坐标系的原点之间距离OcOf之间的距离f,即焦距。

                          

                                                           相机坐标系                            立体几何坐标系

由图中的几何关系能够得到:

                                                    

1.3世界坐标系

世界坐标系图像与真实物体之间的映射关系。也就是真实物体尺寸与图像尺寸的映射关系。相机坐标系到世界坐标系的变换公式为:

                                            

其中R=RxRyRz,T=[tx  ty  tz]T,分别是旋转矩阵和平移矩阵。

相机的内参和外参

外参:摄像机的旋转平移属于外参,用于描述相机在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。因此,在图像拼接或者三维重建中,就需要使用外参来求几幅图像之间的相对运动,从而将其注册到同一个坐标系下面来.

内参:下面给出了内参矩阵,需要注意的是,真实的镜头还会有径向和切向畸变,而这些畸变是属于相机的内参的。由前面步骤得到像素坐标系到世界坐标系映射关系:

                               

   即:                              

                                                 

其中,fx=f/dx,fy=f/dy,f是相机的焦距。RT是外参,矩阵K是内参,包含5个未知数,标定的时候,如果物体距离相机不同位置,那么我们必须在不同位置对相机坐标定。简单理解就是当物体离相机近的时候成像效果大,实际代表尺寸就小。因此每一个位置都要去标定。

 图像的畸变以及矫正

2.1径向畸变:

透镜作为中心的原点,往外是透镜的半径方向,光线越靠近中心位置,畸变越小。径向畸变矫正公式:

                                                    (x,y)是理想无畸变的坐标

2.2切向畸变

镜面与成像平面不平行,就产生畸变。类似于透视变换。矫正公式:

                                            

作用于真实图像后的矫正模型

畸变就是距离的变化,而距离的变化反应到坐标值上就是加减的关系。

相机的标定原理与方法

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)本实验采用张正友标定法对相机进行标定。在张氏标定中用于标定的棋盘格是三维场景中的一个平面,成像平面的像是另一个平面。知道了这两个对应点的坐标,就可以求解得到两个平面的单应性矩阵H..其中,标定棋盘是特质的,交点坐标是已知的,通过角点的提取算法得到,这样就可以得到棋盘平面和图像平面的单应性矩阵H。通过上面的相机模型,令

                                                                     

H是成像平面和标定棋盘格之间的单应性矩阵,通过对应点解的H后,可以通过上面的等式得到相机内参数K,以及外参旋转矩阵R和平移向量t。假设棋盘格所在的平面为世界坐标Z=0的平面,这样的棋盘格任意一点P的世界坐标为(X,Y,0)。所以第三行r3的数据可以被省略。↓

                                                

由于每个单应性方程能提供两个方程,内参数矩阵包含5个方程,要求解至少需要3个单应性矩阵,使用至少三幅棋盘格对图片进行标定,改变相机与标定板之间的相对位置来得到三个不同的图片,通过图像得到关于内参数的两个等式,令

                              

对称B是一个对称矩阵,未知量只有6个,将6个未知量写成向量的形式

                                                

令hi为单应性矩阵的第i个行向量,则有:

                                                

故:

                                      

结合上面两式重写矩阵可以推导出:

                                                              

上面是取得约束的约束等式,假如n幅图像,则V是2n×6“的矩阵。Vb=0最后,使用SVD求解最小二乘,得到相机的各个内参数

                                                        

以及外参数。

                                                                  

注意: 当观测平面 n ≥ 3 时,可以得到b的唯一解

          当 n = 2时, 一般可令畸变参数γ = 0

          当 n = 1时, 仅能估算出α 与 β, 此时一般可假定像主点坐标 u0 与 v0 为0

实验结果?:

两个照片:

                     

发现出现了虚数,没有得到唯一解

用三个:

                                     

四个:

                               

五个:(得到的结果越来越精确

                            

 消除径向畸变

张氏标定法只关注了较大的径向畸变,设(u,v)是理想无畸变的像素坐标,

是畸变后的像素坐标,使用下面式子表示径向畸变:

                             

K1,K2分别表示径向畸变的系数,径向畸变的中心和相机中心是在相同的位置。

                           

假设y=0,则有:

                                    

和上面类似,利用最大似然估计取得最优解,利用LM的方法估计使得下面式子是最小值的参数值

                                 

得到畸变参数之后,现将图像进行去畸变处理。然后用去畸变后图像坐标估计相机的内参数

                                      数据采集,(12张图)                                       确定角点范围

                                   

       角点提取 :        

                            

     参数解算:

                         

输入cameraParams.IntrinsicMatrix得到相机内参矩阵      cameraParams.RadialDistortion径向畸变

                   

  • 24
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Matlab中进行双目相机标定时,常用的方法是基于棋盘图像的标定方法。下面我将简要介绍如何在CSDN上使用Matlab进行双目相机标定。 首先,在CSDN中搜索“Matlab双目相机标定棋盘图”,会有很多相关的教程和代码。选择一篇合适的教程并阅读。 接下来,准备一副双目相机拍摄的棋盘图像。可以使用相机自带的软件进行拍摄,或者是下载一些公开的双目相机标定图像数据集。 在Matlab中,导入相机标定所需的图像和相应的棋盘参数。然后,使用`stereoCameraCalibrator`函数创建一个双目相机标定器对象。通过调用该对象的`addImagePairs`方法,逐步添加图像对进行标定。 接下来,点击标定工具界面的"标定"按钮。Matlab会自动计算相机的内参数和外参数,并生成校正后的图像。可以通过`showExtrinsics`函数查看双目相机的外参数。 接着,在标定工具界面的"立体标定"标签中,点击"标定"按钮进行双目立体标定Matlab会计算双目相机的立体校正参数和视差映射参数。可以使用`showStereomodel`函数查看立体标定结果。 最后,将得到的双目相机标定结果保存,并根据需要进行立体视觉相关的后续处理。 以上是使用Matlab进行双目相机标定的基本步骤,通过在CSDN上搜索相关资料可以找到更详细的教程和示例代码,帮助理解和实践双目相机标定。 ### 回答2: 双目标定是指在使用双目相机进行测量和计算时,需要对相机的内外参数进行标定。而在Matlab中,有一个工具箱可以方便地实现双目标定,其中一种常见的标定方法就是使用棋盘图像来进行标定。 首先,在CSDN上搜索关键词“双目Matlab标定棋盘图”,可以找到很多相关教程和代码示例。其中,一般会先要求准备一张标定棋盘图像,并确定棋盘的尺寸,例如每个子的边长。 接下来,在Matlab中,可以使用棋盘图像来提取棋盘的角点坐标。Matlab中提供了相关函数来实现这个过程,例如`detectCheckerboardPoints`函数可以用来检测棋盘图像中的角点位置。 得到角点的坐标后,可以使用`stereoCameraCalibrator`函数来进行双目相机的标定。在这个函数中,需要输入左右相机的角点坐标和棋盘的尺寸等参数。函数会自动计算出相机的内外参数,并且提供一个界面用于可视化标定结果。 最后,可以根据标定结果来进行双目的测量和计算。通过将左右相机的图像转换到世界坐标系中,可以得到双目测量的结果,例如三维物体的坐标、深度等信息。 总而言之,在Matlab中进行双目相机的标定,可以通过使用棋盘图像和相关函数来实现。这样可以方便地得到相机的内外参数,从而进行双目测量和计算。同时,CSDN上也有很多相关教程和代码示例可供参考和学习。 ### 回答3: 双目摄像头的标定是为了解决双目视觉中的相机畸变、视差和尺度问题,以便在后续的三维重建和深度估计中能够准确地测量物体的距离和位置。 在Matlab中,我们可以使用Camera Calibration Toolbox来进行双目相机的标定。首先,我们需要准备一副标定棋盘图像。这里建议使用常见的8×6或9×6大小的棋盘,确保棋盘上的方数量尽量多。然后,我们需要对每一眼的摄像头单独标定,包括计算相机内参数和外参数。 首先,我们选择一个合适的图像进行相机标定。然后,利用Matlab的Image Acquisition Toolbox来采集棋盘图像。通过Matlab提供的函数imread()读取图像,并使用detectCheckerboardPoints()函数检测出棋盘的角点。接下来,我们使用estimateCameraParameters()函数来对相机进行标定,该函数会自动计算相机的内外参数,并返回标定结果。 在进行标定时,需要注意以下几个问题。首先,保持棋盘图像处于不同的角度和距离,以覆盖相机的整个视野范围。其次,标定时尽量选择不同的光照条件,以克服光照变化对标定结果的影响。最后,对于双目相机,我们需要分别对左右两个摄像头进行标定,以获得双目系统的内外参数。 标定完成后,我们可以使用标定结果对双目图像进行校正,以去除相机的畸变。这可以通过Matlab中的stereoParameters()函数实现。另外,在得到标定结果后,我们还可以计算像素与世界坐标之间的映射关系,以实现三维重建和深度估计等应用。 总而言之,在标定双目摄像头时,我们只需要准备合适的标定棋盘图像,使用Matlab提供的Camera Calibration Toolbox对摄像头进行标定,然后根据标定结果进行校正和后续的应用即可。标定过程相对简单,但对于双目视觉应用的准确性至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值