【ISP】相机标定及坐标系转换详解

本文详细介绍了相机标定的过程,包括畸变系数、内参和外参的解析,以及世界坐标到相机坐标、图像物理坐标再到像素坐标的转换。通过相机标定可以纠正图像畸变,获取相机内外参数,对于图像测量和机器视觉应用至关重要。
摘要由CSDN通过智能技术生成

相机标定简介

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数
在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。
无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。在零失真相机标定法中,每一个像素矢量在空间都是独立标定的,无需知道相机内部的结构,无需建立几何模型。

相机标定是用于获取相机畸变内参数外参数的一个操作,是机器视觉中不可或缺的一个重要步骤。

  • 畸变是相机因其自身成像特性无法避免产生的图像变形
  • 内参数是对相机内部特性的描述,包括相机图像中心相机焦距等。
  • 外参数描述的是相机在世界坐标系上的位置和方向

相机标定须知

在这里插入图片描述

1. 畸变系数

畸变可分为两种,分别是切向畸变径向畸变

  • 径向畸变的产生是由于当光线在远离透镜中心时,其弯曲程度比靠近中心时更大;
  • 径向畸变有桶形畸变枕形畸变两种,分别是下图中的第二张和第三张。

    切向畸变是由于透镜与图像不完全平行而产生,如下图:
    在这里插入图片描述
    畸变系统不受相机拍摄的分辨率和其他因素影响,是相机本身的固有属性。根据OpenCV的文档,畸变可归纳如下,k1,k2,k3,k4,k5,k6径向畸变系数,p1,p2是切向畸变系数。
    在这里插入图片描述

2. 相机内参

相机内参与镜头本身的焦距等相关,为摄像机本身特性,可通过六个参数表示为:1/dx、1/dy、s、u0、v0、f。
dx和dy表示x方向和y方向的一个像素分别占多少长度单位,即一个像素代表的实际物理值的大小;u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数;f为焦距;s为坐标轴倾斜参数。
在opencv文档里内参数共四个为fx、fy、u0、v0。其中fx=f*(1/dx),fy=f*(1/dy),s假设为0,因此为4个内参
在这里插入图片描述
fx,fy为焦距,一般情况下,二者相等,cx、cy为主点坐标(相对于成像平面)。

焦距是光学系统中衡量光的聚集或发散的度量方式,指平行光入射时从透镜光心到光聚集之焦点的距离。亦是照相机中,从镜片中心到底片或CCD等成像平面的距离。具有短焦距的光学系统比长焦距的光学系统有更佳聚集光的能力。简单的说焦距是焦点到面镜的中心点之间的距离

3. 相机外参

相机外参矩阵描述的是相机在静态场景下相机的运动,包括旋转和平移,或者在相机固定时,运动物体的刚性运动。
相机坐标系的三个轴的旋转参数分别为(ω、δ、 θ),然后把每个轴的33旋转矩阵进行组合(即先矩阵之间相乘),得到旋转矩阵R,其大小为33;T的三个轴的平移参数(Tx、Ty、Tz)。R、T组合成成的3*4的矩阵。
在这里插入图片描述

相机标定原理:坐标系之间的转换

在这里插入图片描述
世界坐标系,相机坐标系,图像物理坐标系,像素坐标系之间的关系:
在这里插入图片描述

  1. 世界坐标系
    根据情况而定,可以表示任何物体,此时是由于相机而引入的。单位m。

  2. 相机坐标系
    以摄像机光心为原点(在针孔模型中也就是针孔为关心),z轴与光轴重合也就是z轴指向相机的前方(也就是与成像平面垂直),x轴与y轴的正方向与物体坐标系平行,其中上图中的f为摄像机的焦距。单位m

  3. 图像物理坐标系(也叫平面坐标系):
    用物理单位表示像素的位置,坐标原点为摄像机光轴与图像物理坐标系的交点位置。坐标系为图上o-xy。单位是mm。单位毫米的原因是此时由于相机内部的CCD传感器是很小的,比如8mm x 6mm。但是最后图像照片是也像素为单位比如640x480.这就涉及到了图像物理坐标系与像素坐标系的变换了。下面的像素坐标系将会讲到。

  4. 像素坐标系
    以像素为单位,坐标原点在左上角。这也是一些opencv,OpenGL等库的坐标原点选在左上角的原因。当然明显看出CCD传感器以mm单位到像素中间有转换的。举个例子,CCD传感上上面的8mm x 6mm,转换到像素大小是640x480. 假如dx表示像素坐标系中每个像素的物理大小就是1/80. 也就是说毫米与像素点的之间关系是piexl/mm.

好了四个坐标系都解释完了,接下来就说下各个坐标系中间的变换关系吧。

1. 世界坐标到相机坐标系

在这里插入图片描述
物体之间的坐标系变换都可以表示坐标系的旋转变换加上平移变换,则世界坐标系到相机坐标系的转换关系也是如此。绕着不同的轴旋转不同的角度得到不同的旋转矩阵。如下:
在这里插入图片描述
那么世界坐标系到相机坐标系的变换如下:
在这里插入图片描述

2. 相机坐标系到图像物理坐标系

从相机坐标系到图像坐标系,属于透视投影关系,从3D转换到2D。 也可以看成是针孔模型的改变模型。满足三角形的相似定理。
在这里插入图片描述

3. 图像物理坐标系到像素坐标系。

此时与前面的坐标系变换不同,此时没有旋转变换,但是坐标原点位置不一致,大小不一致,则设计伸缩变换及平移变换。
在这里插入图片描述
综上所述,大家可以看出四个坐标系之间存在着下述关系 ( 矩阵依次左乘 )
在这里插入图片描述
上下两图都可参考,描述相同转换关系
在这里插入图片描述
其中相机的内参和外参可以通过张正友标定获取。通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点,但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的Zc的值。

相机标定流程

1. 标定板

在这里插入图片描述
在这里插入图片描述

2. 标定流程

在这里插入图片描述

3. 标定结果评估

可以使用如下三种方法来评定相机标定的结果: 评估重投影误差,外参可视化,观察畸变矫正后的图片。最好三种都使用。

1. 评估重投影误差

在这里插入图片描述

2. 外参可视化

在这里插入图片描述

3. 观察畸变矫正后的图片

如果相机标定的参数是正确的,经过畸变矫正后的棋盘格,弯曲的线将会变成直线。

4. 如何改善相机标定效果

在这里插入图片描述

代码实现

1. 标定板生成

import cv2
import sys
import numpy as np
 
image = np.ones([1080, 1920, 3], np.uint8) * 255
x_nums = 14                                             
y_nums = 7                                 
square_pixel = 120   # 1080/9 = 120 pixels
x0 = square_pixel
y0 = square_pixel
 
def DrawSquare():
    flag = -1                                        
    for i in range(y_nums):
        flag = 0 - flag
        for j in range(x_nums):
            if flag > 0:
                color = [0,0,0]                         
            else:
                color = [255,255,255]
            cv2.rectangle(image,(x0 + j*square_pixel,y0 + i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值