首页 > 编程知识 正文

相机使用教程(相机知识)

时间:2023-05-03 15:28:38 阅读:75188 作者:2930

3358 www.Sina.com/https://blog.csdn.net/a 083614/article/details/78579163

最近,进行项目需要标定。 因为是xqdxtg,所以有很多不明白的地方。 因此,我调查了很多博客,但是没有博客能完全理解整个过程。 大部分都不完整。 因此,可以自己总结博客,整理自己的想法,帮助大家。 (hxdbm标定的详细解还不完全清楚,以后再添加) ) ) ) )。

http://www.Sina.com/http://www.Sina.com /

(http://blog.csdn.net/lql 0716/article/details/71973318? locationNum=8fps=1)

未经博主允许不得转载

(http://blog.csdn.net/human king7/article/details/44756073 )

参考博客:

(http://blog.csdn.net/hero acool/article/details/50286677 )

相机标定(Camera calibration)原理、步骤

(http://blog.csdn.net/human king7/article/details/44756235 )

相机标定内容详解

(http://blog.csdn.net/hero acool/article/details/51023921 )

在图像测量过程和机器视觉APP应用中,需要建立摄像机图像的几何模型,以确定空间物体表面某一点的三维几何位置与图像中对应点之间的相互关系,这些几何模型参数是摄像机参数。 这些参数必须在大多数条件下通过实验和计算获得,求解此参数(内参、外参、应变参数)的过程称为摄像机标定(或摄像机标定)。 在图像测量或机器视觉应用中,摄像机参数的标定是非常重要的环节,其标定结果的精度和算法的稳定性直接影响摄像机工作结果的准确性。 因此,进行摄像机标定是做好后续工作的前提,提高标定精度是科研工作的重点。

“应变”(distortion )是相对于“线性投影”(rectilinear projection )的偏移。 简而言之,线性投影是指场景中的直线在投影到图像上时仍然是直线。 扭曲简单来说,就是一条直线投影在图像上,不能保持一直线。 这是“光学失真”(optical aberration ),可能是因为摄影机镜头。

hxdbm标定介绍

在坐标变换的基础视觉测量中,一个重要的预备工作是定义3,3358 www.Sina.com /、3,3358 www.Sina.com /、3,3358 www.Sina.com /四个坐标系的含义

另一方面,从图像坐标系(x,y )到像素坐标系(u,v )的1 .两坐标轴相互垂直

这个时候有

2 .一般说来,两轴互不垂直

这个时候有

矩阵的形式如下

二.从相机坐标系(Xc、Yc、Zc )到图像坐标系(x、y )

(根据小孔成像原理,图像坐标系应该位于摄像机坐标系的另一侧,是倒立翻转成像,但为了便于理解和计算,投影在同一侧。 )

根据三角形相似性原理

三.从世界坐标系(Xw、Yw、Zw )到相机坐标系(Xc、Yc、Zc )

##、连接式

其中

应变一般为[图像]摄像机标定(2) hxdbm标定推导详解

ps:失真是照相机自身的固有特性,与照相机内参数相同,可以在定位一次后进行。

径向变形来源于透镜形状。

切线畸变来自整个相机的装配过程。

应变也有其他类型的应变,但径向应变、切向应变不明显,所以忽略。

MATLAB相机标定教程

实际相机的镜头总是在成像器的边缘产生明显的畸变,这种现象来自于“筒形”和“鱼眼”的影响。

如下图所示,光在原理镜头的中心比接近中心的地方更弯曲。 在普通镜头中,这种现象更严重。 筒形失真在廉价的网络摄像机中非常强,但在高端摄像机中并不明显。 这是因为这些透镜系统进行了很多消除径向畸变的工作。

对于径向偏斜,成像器中心(光学中心)的应变为0,且应变随着朝向边缘而变得越来越严重。

对于径向偏斜,可以使用以下泰勒级数展开公式进行校正:

这是

里的x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。

切向畸变(薄透镜畸变和离心畸变):

切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。

切向畸变可以通过如下公式来矫正:


这里的x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。

opencv畸变模型

径向畸变模型:

xc= xd (1+k1r^2 +k2r^4 +k3r^6+⋯)
yc= yd (1+k1r^2 +k2r^4 +k3r^6+⋯)

切向畸变模型:

xc= 2p1xdyd+p2 (r^2 +2xd^2 )
yc= 2p2xdyd+p1 (r^2 +2yd^2 )

可得:

xc= xd (1+k1r^2 +k2r^4 )+2p1xdyd+p2 (r^2 +2xd^2 )
yc= yd (1+k1r^2 +k2r^4 )+2p2xdyd+p1 (r^2 +2yd^2 )

xd,yd为图像中的点(存在畸变),xc,yc是畸变校正后的点。
由公式可得畸变有k1,k2,k3,p1,p2五个参数,对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k3也可忽略,只计算k1,k2两个参数。hxdbm标定中就默认为p1,p2为0。

标定方法 1、传统相机标定

最简单的相机标定为线性标定,即不考虑相机的畸变而只考虑空间坐标转换。
每个坐标点有X,Y两个变量,可列两个方程,相机内参有5个未知数,外参平移和旋转各3个,共有11个变量,因此至少需要6个特征点来求解。

2、非线性标定

当镜头畸变明显时必须考虑畸变,一般较为便宜的网络摄像头畸变特别大,而价格较贵的工业摄像头则畸变很小,因为其中已经嵌入了许多消除畸变的程序。这时线性模型转化为非线性模型,需要通过非线性标定方法求解。有最速下降法,遗传算法,高斯年轻的板凳法和神经网络算法等。

3、hxdbm标定介绍

(hxdbm标定只考虑了径向畸变,没有考虑切向畸变)

由上面的坐标转换可得:


H即为单应性矩阵

H为3x3矩阵,并且有一个元素作为齐次坐标,则有8个未知元素,一组坐标对应两个方程,则至少需要四组对应的点即可算出单应性矩阵H。

因为R旋转矩阵为正交矩阵,存在:

代入H可得求出两组A和H的公式:

矩阵A包含5个元素,需要3组H方可解出A的唯一封闭解,因此在标定时需拍摄3组以上的图片。由A可计算出相应的外参矩阵。在上述计算中,忽略了相机畸变的影响。对内外参应用最风中的翅膀乘方法估计实际存在的径向畸变的畸变系数(忽略切向畸变),最后通过极大似然法进行优化,得到精度较高的解。

标定过程

相机标定步骤:

1、打印一张棋盘格,把它贴在一个平面上,作为标定物。
2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
3、从照片中提取棋盘格角点。
4、估算理想无畸变的情况下,五个内参和六个外参。
5、应用最风中的翅膀乘法估算实际存在径向畸变下的畸变系数。
6、极大似然法,优化估计,提升估计精度。

Matlab工具箱标定:

1、应用程序中找到Camera Calibration

2、添加标定板拍摄图片(按Ctrl可一次添加多张)

3、输入棋盘格每格的尺寸大小

4、显示已检测出的棋盘格,点击Calibration,开始标定。

5、得到标定结果(平均误差小于0.5即可认为结果可靠,这个地方我还不是很清楚)

6、可查看标定结果和程序

opencv标定

1、循环读取图片
2、使用findChessboardCorners函数检测角点(需提前输入角点数)。

3、使用find4QuadCornerSubpix函数对角点进行亚像素精确化
4、可用drawChessboardCorners将角点显示。
5、根据角点数和尺寸创建一个理想的棋盘格(用point向量存储所有理论上的角点坐标)。
6、通过calibrateCamera函数由理想坐标和实际图像坐标进行标定,可得到标定结果。
7、由projectPoints函数计算反向投影误差。

标定结果:

matlab标定的内参经过转置与VS标定的内参基本一致。
每一幅图像都有一个外参矩阵,它的作用是:通过将棋盘格上坐标系上的角点坐标(x,y,0,1)(计算过程中设定参考坐标系在棋盘格上左上方角点,Z轴垂直棋盘格平面,因此z为0,1表示齐次坐标)左乘外参矩阵再左乘内参矩阵可以得到该外参矩阵对应图像中的相应角点坐标。VS的标定结果经过代入点进行上述计算得到的坐标与图像基本一致,但matlab的结果不同直接代入并不相同。原因在于两种方法标定的结果表示形式不同,两种方法结果中外参矩阵的平移向量相同,但旋转矩阵结果不一致,估计是内部实现不同。ps:平时事情比较多,更新比较慢。

ps:如上图opencv标定结果中内参矩阵里的2168和2174并不是焦距,而是焦距/每个像素大小,否则数量级不会这么大,焦距一般只有几毫米或几十毫米。刚看到国内的硕士论文里有人写错了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。