相机内参标定理论篇------相机模型选择

这篇具有很好参考价值的文章主要介绍了相机内参标定理论篇------相机模型选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相机种类:

当拿到一款需要标定内参的相机时,第一个问题就是选择那种的相机模型来标定相机。首先对相机类型进行分类,然后针对相机类型选择相机模型。工程上相机类型的划分并不是十分严格,一般来说根据相机FOV可以把相机大概分为以下几类:

长焦相机:<= 

标准相机:~;

广角相机:~;

鱼眼相机:>。

这里按角度的划分也不是绝对严格。并且相机的命名也没有统一的规范,读者可能会遇到不同的命名方法。不过这些都不是很重要,最终也是按角度来对应相机模型,知道多大角度相机用什么相机模型就可以了。

有时可能会遇到变焦相机,但变焦相机在标定内参时也需要固定焦距,因此也可以划分到上面几类。这里需要注意内参和焦距严格对应,当调焦后需要重新标定相机内参。

不同角度的相机需要选择不同的相机模型来标定相机内参。相机模型又分为投影模型畸变模型。接下来分别进行讨论。

长焦相机:

长焦相机的标定采用针孔相机模型,但在实际标定中我们很难通过标定板来标定长焦相机。长焦相机的对焦距离太大,普通标定板由于尺寸较小会导致其在采集的图像中所占区域太小,无法提供足够的约束来标定外参。如果强行在近处采集标定板图像,会造成图像上标定图像模糊不清,从而导致角点提取误差较大,甚至失败。因此标定时外参的计算会有非常大的误差,又因为相机内参和外参在投影时具有耦合的效应,即使重投影误差非常小也无法保证内参的正确性。这也是为什么重投影误差只能作为内参精度的参考,而无法作为精度衡量的标准。

所以一般来说不建议个人去标定长焦相机,即使标定出来结果也很有可能是错误的。之前笔者还是小白的时候尝试使用标定板标定长焦相机,虽然重投影误差很小但内参精度较差,点云投影效果还没有使用相机厂商提供的参考内参值精确。如果必须自己标定的话也不建议用标定板的方式,需要设计新的方法,核心是保证参照物能够提供足够的约束。

标准相机:

针对标准相机工程上采用针孔相机模型标定。其原理类似于小孔成像,不同之处在于为了增加透光量采用凸透镜。其投影模型为针孔投影模型,原理如下图所示:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

接下来考虑其畸变模型,这里需要了解一下概念:径向畸变和切向畸变。

一般来说,制造透镜很难保证曲率和设计的一致,曲率制造的误差会造成相机成像是在径向产生误差即径向畸变。径向畸变主要有以下两种:桶型畸变和枕型畸变。

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

径向畸变主要描述畸变量和像素到图像中心距离的关系,后续会在具体公式讨论。

同样安装时镜头和成像平面无法保证绝对平行,因此会产生切向畸变:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

切向畸变主要描述成像平面和光轴之间的倾斜角度。因此针孔相机模型的畸变模型是径向切向畸变模型

接下来看如何将相机坐标系下的点投影到图像上:相机坐标系->图像坐标系->像素坐标系。

具体公式如下:

一般投影时先对空间三维点归一化,即认为先将点投影到归一化平面(z = 1的平面),然后再投影到图像上:

其中u v是无畸变点,r描述相机坐标xy轴是否垂直也叫做斜率系数,很多相机模型认为该值为0。接下来对点加径向畸变:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

其中k1 k2 k3是径向畸变参数。有时会遇到k4 k5,也是径向畸变参数,不过一般用到k3就行了。因为径向畸变是泰勒展开的多项式拟合,用到太多畸变参数就会存在过拟合问题反而效果不好。

上面提到的枕型畸变和桶型畸变与k的取值有关,当k都大于零时就会产生枕型畸变,反之则会产生桶型畸变。

接下来再加上切向畸变:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

以上就是相机坐标系下点投影到图像上像素的整个过程。

广角相机:

广角相机和鱼眼相机其实都属于鱼眼相机的范畴,只是标定时选择的相机模型不一样。在介绍接下来的相机模型前还是简单介绍鱼眼相机相关的基础知识以方便理解。

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型                 相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

        你以为的鱼眼相机                                                       实际的鱼眼相机

我们知道鱼眼相机的初衷是为了让相机看到尽可能大的视野,也就是尽可能将场景中的物体投影到图像上,因此鱼眼相机通过组合多个镜头将光线多次折射到图像平面上。这时就需要引入较大的径向畸变以保证有限的图像平面上看到甚至超过180度的视野。所以鱼眼相机需要根据某种投影模型进行设计,常见的模型主要分为四种:等距投影模型、等立体角投影模型、正交投影模型和体视投影模型。其投影过程如下图所示,除了f*tan()对应针孔投影模型外,其它四种对应上面四种。

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

鱼眼相机四种投影模型其中最常用的是等距相机模型,所以主要对等距相机模型进行讨论,其它模型感兴趣自己上网搜索。等距相机模型:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

由上图可以看出经典相机模型一般都是先将相机坐标系下的点投影到单位球(Unit Sphere)。然后引入与相关的比例系数得到单位平面上加完畸变后的投影点,接着再加上由于制造等因素引起的畸变,得到最终单位平面的投影点。有了单位平面上带畸变的投影点直接使用针孔投影模型就可以将其投用到图像上。

等距相机模型的投影公式为:rd = f * ,rd为成像的高,为入射角。该模型描述成像的像高和入射角成正比。等距相机模型映射关系很简单,观察图像可以发现中心畸变小边缘处畸变严重。

广角相机最好选择等距相机模型,但是可以看出等距相机的通用性较差,因此OpenCV中使用的模型是由Kannala在等距投影模型的基础上提出的一种近似模型。接下来对OpenCV中fisheye相机模型进行分析。整体过程如下图所示:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

上图是利用相机模型将世界坐标系下点投影到图像上的过程。第一步是将世界坐标系的点通过外参转到相机坐标系下,然后转到归一化平面上。

这里可以看出OpenCV中fisheye模型是先在归一化平面上加畸变然后利用针孔投影模型将加完畸变的点投影到图像上。可以看出等距相机模型的畸变只考虑了径向畸变没有考虑切向畸变。

已知等距相机模型r = f * ,但模型通用性较差,并且在实际中很难按设计模型制造出不存在误差的镜头,尤其是鱼眼相机中包含多个镜头。因此常用的方法是使用多项式拟合。最后得到包含畸变后新的d,这里d类似于等距相机模型中的rd,只不过是在归一化平面上。如下图所示,但f为1时rd就是加畸变后点到相机光轴的距离。

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

接着计算d在归一化平面上的坐标,公式中是利用d和r的比例关系求得的。然后利用针孔投影模型将点投影到图像上。上面公式中有一个,这个是表征图像平面xy是否垂直的参数也叫斜率系数,很多情况下默认为0。到此就得到了空间点到图像上的整个投影过程。

总结来说OpenCV fisheye相机模型是先加畸变,然后利用针孔相机模型投影到图像上。

鱼眼相机:

如下图所需,鱼眼相机主要有以下几类:

Dioptric cameras,通过组合多个透镜来实现,主要靠光线多次折射,也可以做到180度以上。

Catadioptric cameras,使用一个标准相机加一个面镜,实际中很少应用;

polydioptric camera,通过多个相机重叠视野,实际中也很少应用。

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

实际工程中,鱼眼相机可以分为大于180度的和小于180度两种相机。作者个人经验,小于180度的相机可以使用基于等距模型的OpenCV fisheye中相机模型来标定相机。但是如果相机度数大于180度时OpenCV fisheye标定出来的效果并不是十分好。曾经作者曾遇到一款鱼眼相机可以看到220度以上,这时利用OpenCV中fisheye模型来标定会失败,即使成功内参值也有较大的误差。

大于180度的相机通常叫做omnidirectional camera,这时标定相机可以用的相机模型有kalibr的MEI模型或是Davide Scaramuzza的ocam相机模型。但在实际应用中ocam相机模型更准确一些。不过OpenCV对ocam模型没有支持,但是支持了MEI模型的相关函数。

虽然实际中ocam模型效果较好,但很多人也可能用到MEI模型,所以先对其进行介绍。MEI模型的投影过程如下图所示:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

上图描述了MEI模型投影过程,可以看出为了让图像看到更大的视野,MEI模型重新构建了新的相机坐标系进行投影。新相机坐标系和真实相机坐标系在Z轴上存在偏移量。通过在新的坐标系下进行投影实现对像素在径向上的压缩。

具体流程如下:

求相机坐标系下点投影到单位圆上:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

构建新的坐标系,新坐标系相对原坐标系在Z轴偏移-。求在新坐标系下的坐标:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

然后求在新坐标系下归一化平面上的投影:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

对投影点加畸变得到,这里的畸变是径向切向畸变可以参加针孔模型部分:

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

然后利用针孔投影模型将投影到图像上: 

相机内参标定理论篇------相机模型选择,针孔相机模型,鱼眼相机模型,ocam,相机内参模型

 接下来介绍ocam模型,由于暂时没法翻墙,不好查资料后续再更新吧。需要的同学可以访问下面连接查询。

https://sites.google.com/site/scarabotix/ocamcalib-toolbox文章来源地址https://www.toymoban.com/news/detail-763433.html

到了这里,关于相机内参标定理论篇------相机模型选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python OpenCV 单目相机标定、坐标转换相关代码(包括鱼眼相机)

      本文不讲原理,只关注代码,有很多博客是讲原理的,但是代码最多到畸变矫正就结束了,实际上就是到 OpenCV 官方示例涉及的部分。   在官方示例中使用黑白棋盘格求解了相机的内外参和畸变系数,并对图像做了畸变矫正,但在实际使用时还缺少很多功能,以下是本

    2024年02月02日
    浏览(35)
  • 2.4.1.1 相机内参标定

    更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 相机内参标定主要是为了获取相机本身的性质参数,包括相机的焦距,光心以及畸变参数等。 内参的物理意义与相机模型强相关,常用的相机成像模型为小孔模型,等效焦距与光心用数学可表示为一个矩阵 [ f

    2024年02月22日
    浏览(40)
  • Opencv 相机内参标定及使用

    目录 一、功能描述 二、标定板制作 三、图像采集 四、标定内参 方法一:Matlab标定  方法二:C++程序标定 五、使用内参 1.本文用于记录通过 Opencv 进行相机内参标定和对内参的使用来进行图像畸变矫正。         1)相机矩阵:包括焦距(fx,fy),光学中心(Cx,Cy),完

    2024年01月24日
    浏览(39)
  • 【相机标定】opencv python 标定相机内参时不计算 k3 畸变参数

    畸变参数 k3 通常用于描述径向畸变的更高阶效应,即在需要高精度的应用中可以用到,一般的应用中 k1, k2 足矣。 常见的应用中, orbslam3 中是否传入 k3 是可选的,而 kalibr 标定中则只需要传入 k1, k2 。但计算 k3 时的 k1, k2 不等于不计算 k3 时的 k1, k2 ,因此需要学会两种场景下

    2024年02月09日
    浏览(40)
  • python opencv实现相机内参标定

    使用python opencv 标定相机内参。 (1)从网络上下载一张棋盘格图片,粘贴到word文档上,设定尺寸大小为合适值,作为标定板。 (2)在不同距离,不同角度下用手机相机拍摄棋盘图片。 (3)调用 opencv findChessboardCorners 和 cornerSubPix 函数提取棋盘的角点。 (4)调用 opencv cal

    2024年02月13日
    浏览(54)
  • 相机标定 >> 坐标系转换@内参、外参

    为了更好的理解标定,首先应熟悉各个坐标系。(坐标系图均取自百度百科) 该坐标系是以图像左上角为原点建立以像素为单位的二维坐标系u-v。(相对坐标系) 图像坐标系是以 O1 (是图像的主点,也即光轴与像平面的交点,一般就是像素坐标系的中点)为原点的二维坐标

    2024年02月12日
    浏览(53)
  • 【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

    Livox Lidar + HIKROBOT Camera 联合标定 参考链接:相机雷达标定文档 安装ROS环境,参考笔者的博客:【ROS】Ubuntu18.04安装Ros 参考链接:海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++) 海康的相机没有ros驱动,且对linux开发不太友好(但支持windows),因此需要重写了sdk接口

    2024年02月04日
    浏览(49)
  • zed2i相机内参标定

    参考: https://blog.csdn.net/yanpeng_love/article/details/107166922 https://blog.csdn.net/weixin_41954990/article/details/127928852 参考以上连接先安装 kalibr 。 注意: python包装不上,换成:pip install 出现pyx找不到的错误:sudo apt-get install python3-pyx 1. 生成标定板 可以自己定制特定尺寸的标定板: 其中,

    2024年02月04日
    浏览(92)
  • 计算机视觉(相机标定;内参;外参;畸变系数)

    目录 一、预备知识 1、坐标系变换过程(相机成像过程) (1)相机坐标系转换为图像坐标系(透视投影变换遵循的是针孔成像原理) (2)齐次坐标的引入原因:(为什么引入齐次坐标???) 2、内参与外参矩阵的构成 3、畸变参数 二、相机标定 1、张正友标定法(光学标

    2024年02月07日
    浏览(50)
  • 相机系列——透视投影:针孔相机模型

    作者:木一 上文我们提到,三维相机是对 真实世界成像的模拟 ,为了让三维物体在计算机屏幕上呈现出来的图像符合人眼观察效果,通常采用 透视投影 方式模拟相机成像,为了简化计算,可以用 针孔相机模型 来描述 透视投影 成像过程。 针孔相机模型 是一种简化的光学

    2024年04月28日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包