图像处理——相机标定(Cameracalibration)

更新时间:2023-07-27 18:19:46 阅读: 评论:0

图像处理——相机标定(Cameracalibration)
笔记本加内存条
⾮常感谢以下五位的渊博知识:
⼀、相机标定(Camera calibration)原理
在图像测量过程以及机器视觉应⽤中,为确定空间物体表⾯某点的三维⼏何位置与其在图像中对应点之间的相互关系,必须建⽴相机成像的⼏何模型,这些⼏何模型参数就是相机参数。在⼤多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。⽆论是在图像测量或者机器视觉应⽤中,相机参数的标定都是⾮常关键的环节,其标定结果的精度及算法的稳定性直接影响相机⼯作产⽣结果的准确性。因此,做好相机标定是做好后续⼯作的前提,提⾼标定精度是科研⼯作的重点所在。
常⽤术语
内参矩阵: Intrinsic Matrix
焦距: Focal Length
主点: Principal Point
径向畸变: Radial Distortion
切向畸变: Tangential Distortion
旋转矩阵: Rotation Matrices
平移向量: Translation Vectors
平均重投影误差: Mean Reprojection Error
重投影误差: Reprojection Errors
重投影点: Reprojected Points
1、坐标系的转换
⾸先介绍⼀下坐标系转换中⽤到的4种坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。
那一刻我读懂了你
坐标系转换就是为了将空间的三维世界坐标系转换⾄图像处理的⼆维像素坐标系。
1.1 世界坐标系
世界坐标系(world coordinate)(xw,yw,zw),也称为测量坐标系,是⼀个三维直⾓坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况⾃由确定。世界坐标系的最⼩单位为mm。
1.2 相机坐标系
相机坐标系(camera coordinate)(xc,yc,zc),也是⼀个三维直⾓坐标系,原点位于镜头光⼼处,xc、yc轴分别与像⾯的两边平⾏,zc轴为镜头光轴,与像平⾯垂直。
劳劳亭古诗
紫组词相机坐标系的最⼩单位为mm。
1.3 图像坐标系
图像坐标系(image coordinate)(x,y),是像平⾯上的⼆维直⾓坐标系。图像坐标系的原点为镜头光轴与像平⾯的交点(也称主点,principal point),它的x轴与相机坐标系的xc轴平⾏,它的y轴与相机坐标系的yc轴平⾏。图像坐标系的最⼩单位为mm。
1.4 像素坐标系
像素坐标系(pixel coordinate)(u,v),是图像处理⼯作中常⽤的⼆维直⾓坐标系,反映了相机CCD/CMOS芯⽚中像素的排列情况。它的原点位于图像左上⾓,横坐标u 表⽰像素所在的列,纵坐标v表⽰像素所在的⾏。像素坐标系与图像坐标系可以简单理解为平移关系,它们同处于像平⾯。像素坐标系的x轴与图像坐标系的u轴平⾏,像素坐标系的y轴与图像坐标系的v轴平⾏。像素坐标系的最⼩单位为像素。
1.5 图像坐标系转换为像素坐标系
像素坐标系与图像坐标系是平移关系:
它们之间的转换矩阵关系为:
dX、dY表⽰单⼀像素在x轴和y轴⽅向上的物理长度(其单位可理解为 mm/像素)。
u0,v0为主点(图像原点)坐标。
1.6 相机坐标系转换为图像坐标系
1.6.1  相机成像
相机的镜头相当于⼀个凸透镜,感光元件就处在这个凸透镜的焦点附近,所成的像是⼀个倒像。在实际中,当物距⾜够远时(远⼤于两倍焦距),凸透镜成像可以看作是在焦距处的⼩孔成像,即所谓的“针孔模型”。通过针孔模型,我们可以得到三维坐标到⼆维坐标的的对应关系。
1.6.2 ⼩孔成像
Q点位于图像坐标系,P点位于相机坐标系。根据三⾓形相似原理,上图可以得到如下⽐例关系:
1.6.3  变换矩阵
将Xp、Yp、Zp⽤相机坐标系的Xc、Yc、Zc表⽰,xQ、yQ⽤图像坐标系的x、y表⽰,并变换x、y到左边:
所以,相机坐标系与图像坐标系之间的矩阵变换关系为:
1.7 世界坐标系转换为相机坐标系
世界坐标系和相机坐标系都是三维坐标,任意两个三维坐标之间均可以通过旋转和平移进⾏转换:
由于世界坐标系和相机坐标系之间的变换矩阵与相机⽆关,因此称为外部参数矩阵。乘号怎么打
1.8 世界坐标系转换为像素坐标系
将1.5、1.6、1.7这3个⼩节的变换矩阵进⾏连乘,即可得到世界坐标系与像素坐标系的转换关系(s为Zc):
搬家祝福
2 相机内参与畸变参数
2.1 相机内参
戴娆个人资料
即相机内部的参数,参看1.5、1.6节的变换矩阵,以及1.8节的M1。
2.2 畸变参数
畸变参数(distortion parameters)
畸变(distortion)是对直线投影(rectilinear projection)的⼀种偏移。
简单来说直线投影是场景内的⼀条直线投影到图⽚上也保持为⼀条直线。
畸变简单来说就是⼀条直线投影到图⽚上不能保持为⼀条直线了,这是⼀种光学畸变(optical aberration),可能由于摄像机镜头的原因。
畸变⼀般可以分为:径向畸变、切向畸变
1、径向畸变来⾃于透镜形状
2、切向畸变来⾃于整个摄像机的组装过程
畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著
畸变图⽰
径向畸变
实际摄像机的透镜总是在成像仪的边缘产⽣显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。
如下图,光线在远离透镜中⼼的地⽅⽐靠近中⼼的地⽅更加弯曲。对于常⽤的普通透镜来说,这种现象更加严重。筒形畸变在便宜的⽹络摄像机中⾮常厉害,但在⾼端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的⼯作。
对于径向畸变,成像仪中⼼(光学中⼼)的畸变为0,随着向边缘移动,畸变越来越严重。
径向畸变包括:枕形畸变、桶形畸变
切向畸变
切向畸变图⽰:
⼆、张正友相机标定
张正友的⽅法只考虑了径向畸变,没有考虑切向畸变
相机标定的⽬的:获取摄像机的内参和外参矩阵(同时也会得到每⼀幅标定图像的旋转和平移矩阵),内参和外参系数可以对之后相机拍摄的图像进⾏矫正,得到畸变相对很⼩的图像。
相机标定的输⼊:标定图像上所有内⾓点的图像坐标,标定板图像上所有内⾓点的空间三维坐标(⼀般情况下假定图像位于Z=0平⾯上)。
相机标定的输出:摄像机的内参、外参系数。
这三个基础的问题就决定了使⽤Opencv实现张正友法标定相机的标定流程、标定结果评价以及使⽤标定结果矫正原始图像的完整流程:
1. 准备标定图⽚
2. 对每⼀张标定图⽚,提取⾓点信息
3. 对每⼀张标定图⽚,进⼀步提取亚像素⾓点信息
4. 在棋盘标定图上绘制找到的内⾓点(⾮必须,仅为了显⽰)
5. 相机标定
6. 对标定结果进⾏评价
7. 查看标定效果——利⽤标定结果对棋盘图进⾏矫正
1. 准备标定图⽚
标定图⽚需要使⽤标定板在不同位置、不同⾓度、不同姿态下拍摄,最少需要3张,以10~20张为宜。标定板需要是⿊⽩相间的矩形构成的棋盘图,制作精度要求较⾼,如下图所⽰:
2.对每⼀张标定图⽚,提取⾓点信息
需要使⽤findChessboardCorners函数提取⾓点,这⾥的⾓点专指的是标定板上的内⾓点,这些⾓点与标定板的边缘不接触。
FindChessboardCorners是opencv的⼀个函数,可以⽤来寻找棋盘图的内⾓点位置。
函数形式
int cvFindChessboardCorners( const void* image, CvSize pattern_size, CvPoint2D32f* corners, int* corner_count=NULL, int
flags=CV_CALIB_CB_ADAPTIVE_THRESH );
参数说明
Image:
输⼊的棋盘图,必须是8位的灰度或者彩⾊图像。
pattern_size:
棋盘图中每⾏和每列⾓点的个数。这⾥是内⾓点的⾏列数,不包括边缘⾓点⾏列数;⾏数和列数不要相同,这样的话函数会辨别出标定板的⽅向,如果⾏列数相同,那么函数每次画出来的⾓点起始位置会变化,不利于标定。
Corners:
检测到的⾓点
corner_count:
输出,⾓点的个数。如果不是NULL,函数将检测到的⾓点的个数存储于此变量。
Flags:
各种操作标志,可以是0或者下⾯值的组合:
CV_CALIB_CB_ADAPTIVE_THRESH:该函数的默认⽅式是根据图像的平均亮度值进⾏图像⼆值化,设⽴此标志位的含义是采⽤变化的阈值进⾏⾃适应⼆值化;
罐子打不开要怎么办
CV_CALIB_CB_NORMALIZE_IMAGE:在⼆值化之前,调⽤EqualizeHist()函数进⾏图像归⼀化处理;
CV_CALIB_CB_FILTER_QUADS:⼆值化完成后,函数开始定位图像中的四边形(这⾥不应该称之为正⽅形,因为存在畸变),这个标志设⽴后,函数开始使⽤⾯积、周长等参数来筛选⽅块,从⽽使得⾓点检测更准确更严格。
CALIB_CB_FAST_CHECK:快速检测选项,对于检测⾓点极可能不成功检测的情况,这个标志位可以使函数效率提升。
总结:该函数的功能就是判断图像内是否包含完整的棋盘图,如果能够检测完全,就把他们的⾓点坐标按顺序(逐⾏,从左到右)记录下来,并返回⾮0数,否则返回0。这⾥对size参数要求⾮常严格,函数必须检测到相同的size才会返回⾮0,否则返回0,这⾥⼀定要注意。⾓点检测不完全时,可能画不出图像,或者画出红⾊⾓点;正确的图像后⾯有参考。
补充说明
函数cvFindChessboardCorners试图确定输⼊图像是否是棋盘模式,并确定⾓点的位置。如果所有⾓点都被检测到且它们都被以⼀定顺序排布,函数返回⾮零值,否则在函数不能发现所有⾓点或者记录它们地情况下,函数返回0。例如⼀个正常地棋盘图右8x8个⽅块和7x7个内⾓点,内⾓点是⿊⾊⽅块相互联通的位置。这个函数检测到地坐标只是⼀个⼤约的值,如果要精确地确定它们的位置,可以使⽤函数cvFindCornerSubPix。
函数测试:
测试图像(左)和运⾏结果(右)

本文发布于:2023-07-27 18:19:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1120435.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:坐标系   图像   标定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图