目录

一.目的

1.想知道:一分钟详解鱼眼镜头标定基本原理及实现

1.将其转载,避免作者删除,就没有了

二.参考

1.一分钟详解鱼眼镜头标定基本原理及实现

三.注意

四.操作:备份原文

前言

一 理论部分

二 实践部分

三 跋

参考文献:


一.目的

1.想知道:一分钟详解鱼眼镜头标定基本原理及实现

1.将其转载,避免作者删除,就没有了

二.参考

1.一分钟详解鱼眼镜头标定基本原理及实现

https://mp.weixin.qq.com/s/VyxoTaYtYPB-Bfh3JCXl1A

  1. 原文地址,值得多看

三.注意

四.操作:备份原文

前言

在VSLAM中,经常会使用鱼眼镜头或者广角镜头。本文主要分为理论部分与鱼眼镜头标定实践两部分,其中理论部分,主要参考《A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses》,作者为Juho Kannala和Sami S. Brandt,写于2006年,同时这篇文章的作者在2004年也写了一篇与鱼眼镜头标定相关的论文《A Generic Camera Calibration Method for Fish-Eye Lenses》,同样值得参考。

一 理论部分

对于大多数具有窄角甚至广角镜头的传统相机,针孔相机模型伴随着镜头畸变是一个比较不错的近似。但是针孔模型不太适用于鱼眼镜头。鱼眼镜头一般被设计用来覆盖相机前方的整个半球形视场,视角非常大,约180°。然而,不可能通过透视投影在有限的图像平面上投射半球形视场。因而,鱼眼镜头服从某些其他投影模型。这就是为什么鱼眼镜头本身固有的畸变不应该仅被认为是与针孔模型的偏差。

很多作者对鱼眼镜头的适合的可能模型进行了研究。许多方法的思想是将原始鱼眼镜头成像为遵循针孔模型,畸变参数是通过变换后强制按直线来估计的,但问题是这些方法并不能完全校准。最近,鱼眼镜头相机的第一种自动校准方法也出现了,Claus 和Fitzgibbon[1]提出了一种畸变模型,它同样允许相机运动和镜头几何的同时线性估计,而Thirthala和Pollefeys[2]使用径向一维摄像机的多视图几何来估计非参数相机模型。此外,Barreto和Daniilidis最近的工作引入了径向基本矩阵来纠正广角镜头的失真[3]。然而,这些方法的重点更多的是在于自动校准技术,而不是真实镜头的精确建模。

由于透视投影模型不适用于鱼眼镜头,我们使用更灵活的径向对称投影模型。

不失一般性,甚至权重都被取消了。这是因为我们可以将r作为奇函数扩展到负数一侧,而奇数幂跨越连续奇函数集。对于计算,我们需要确定(6)中的各项。

为了使得本文不那么枯燥,关于鱼眼镜头标定的理论部分我们仅介绍到这里,如果感兴趣的读者,可以去仔细研读论文《A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses》。

二 实践部分

在上述论文作者的主页,作者提供的Matlab标定代码:Camera Calibration Toolbox for Generic Lenses:http://www.ee.oulu.fi/~jkannala/calibration/calibration.html。

此处,笔者简单为大家介绍一下OpenCV中关于鱼眼标定的流程。

首先,可以参考OpenCV Documentation中提供的鱼眼镜头标定相关函数:

https://docs.opencv.org/3.2.0/db/d58/group__calib3d__fisheye.html

具体鱼眼镜头标定步骤如下:

本次实验,使用小觅相机(标准版)进行实验,小觅相机的镜头视角较大,大约在140°左右。小觅相机实物如下图2所示。

图2 小觅相机(标准版)实物图

Step-1: 制作标定板。可以是圆,也可以是棋盘格,当然也可以是圆环。此处我们选择4*11的OpenCV提供的圆形标定板。为了使得标定结果趋于收敛,在工作距离附近,在不同姿态下,采集近20~30张标定图片,如下图3所示。

图3 标定板采集样图

Step-2:进行形态学处理。此处是由于在采集图片过程中,难免会在图片中引入环境光带来的噪声。

Step-3:检测每一张图片中的圆心角点坐标,并排序。(OpenCV中findCirclesGrid函数同时解决了这个问题)。

Step-4: 进行标定。(cv::fisheye:calibrate)

Step-5: 计算重投影误差。在Step-3中,cv::fisheye::calibrate返回值为总重投影误差,当然也可以进一步计算x和y方向的重投影误差值。

Step-6:(此步非必须)进行去畸变,进一步验证标定参数的正确性。

组合使用函数:

1)fisheye::estimateNewCameraMatrixForUndistortRectify
2)cv::fisheye::initUndistortRectifyMap
3)remap

即可获得畸变矫正后的效果图。

经过鱼眼标定后,使用标定好的参数进行去畸变后效果图(使用函数

void estimateNewCameraMatrixForUndistortRectify(InputArray K, InputArray D, const Size &amp;image_size, InputArray R,<br>&nbsp;&nbsp;&nbsp;&nbsp;OutputArray P, double balance = 0.0, const Size&amp; new_size = Size(), double fov_scale = 1.0)

进行估计新的相机矩阵用于畸变矫正或者校正时,图4为参数balance设为0时的畸变矫正效果图,图5为参数balance设为1时的效果图)。

图4 鱼眼模型标定后,畸变矫正,balance=0时

图5 鱼眼模型标定后,畸变矫正效果图,balance=1.0时

如果选用针孔模型来进行标定,去畸变后的效果图如下所示。

使用针孔模型进行标定后,同样对图3进行去畸变效果图如下(图6为balance=0,图7为balance=1时):

图6 针孔模型标定后,畸变矫正效果图,balance=0时

图7 针孔模型标定后,畸变矫正效果图,balance=1时

由图可见,使用针孔模型去畸变后,整个画幅的图像的畸变不符合「枕形」或者「桶形」,因而使用针孔模型来进行标定鱼眼镜头是不太适合的。

三 跋

最后,留个大家一个问题可以去思考,作者在文章中提到,对于圆形的中心在经过透视变换后,由于较大的畸变存在,椭圆的中心已经不再对应圆形的中心。那么,对于椭圆的中心构象偏差,又该如何去矫正呢?

参考文献:

[1] Kannala J, Brandt S S. A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses[J]. IEEE transactions on pattern analysis and machine intelligence, 2006, 28(8): 1335-1340.

[2] Claus, D. and Fitzgibbon, A. W.: “A rational function lens distortion model for general cameras”, Proc. CVPR, pp. 213-219, 2005

[3] Thirthala, S. and Pollefeys, M.: “Multi-view geometry of 1D radial cameras and its application to omnidirectional camera calibration”, Proc. ICCV, pp. 1539-1546, 2005.

[4] Barreto, J. P. and Daniilidis, K.: “Fundamental matrix for cameras with radial distortion”,Proc. ICCV, pp. 625-632, 2005.

鱼眼:一:一分钟详解鱼眼镜头标定基本原理及实现相关推荐

  1. 一分钟详解鱼眼镜头标定基本原理及实现

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 3D视觉工坊的第61篇文章 前言 在VSLAM中,经常会使用鱼眼镜头或者广角镜头.本文主要分为理论部分 ...

  2. 鱼眼镜头标定基本原理及实现

    原文首发于微信公众号--3D视觉工坊:一分钟详解鱼眼镜头标定基本原理及实现 前言 在VSLAM中,经常会使用鱼眼镜头或者广角镜头.本文主要分为理论部分与鱼眼镜头标定实践两部分,其中理论部分,主要参考& ...

  3. 一分钟详解Git使用技巧(一)

    作者:小凡 Date:2020-01-10 来源:一分钟详解Git使用技巧(一)

  4. 一分钟详解PCL中点云配准技术

    原文首发于微信公众号「3D视觉工坊」: 一分钟详解PCL中点云配准技术 本文是对前两篇文章:

  5. 一分钟详解initUndistortRectifyMap函数bug修复方法

    本文首发于微信公众号「3D视觉工坊」--一分钟详解initUndistortRectifyMap函数bug修复方法 在上一篇文章OpenCV中initUndistortRectifyMap函数存在bu ...

  6. 用pcl读ply文件_一分钟详解PCL中点云配准技术

    原文首发于微信公众号「3D视觉工坊」:一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更 ...

  7. 90分钟详解网络编程相关的细节处理丨 reactor丨网络io丨epoll丨C/C++丨Linux服务器开发丨后端开发丨Linux后台开发

    90分钟搞懂网络编程相关细节处理 1. 网络编程四要素 2. io多路复用 3. reactor三种基础封装方式 视频讲解如下,点击观看: 90分钟详解网络编程相关的细节处理丨 reactor丨网络i ...

  8. 详解Docker的基本原理与实践操作

    详解Docker的基本原理与实践操作,Web时代,应用变得越来越强大,与此同时也越来越复杂.集群部署.隔离环境.灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁. 本文我们就来探索Docke ...

  9. 全程15分钟 详解如何为MacBook Pro 15寸 加装固态硬

    本文导航 第1页:详解如何为MBP15加装固态硬 第2页:用时约3分钟:查看硬盘和光驱接口信息 第3页:用时约2分钟:拆解机身底盖螺丝 第4页:用时约3分钟:拆解光驱和清理风扇 第5页:用时约5分钟: ...

最新文章

  1. 会声会影X4 初学者速成 转
  2. 用C语言Linux下打印带颜色的字符串
  3. Spring的REST服务发现性,第5部分
  4. 逻辑回归 数据_数据科学中的逻辑回归
  5. Yum 安装 mysql5.7
  6. 实时流(直播流)播放、上墙(大屏播放)解决方案
  7. Oracle解决Ora-01653无法扩展表空间问题
  8. 【ML小结5】决策树(ID3、C4.5、CART)
  9. js文件之间函数的调用
  10. STLink连接与资源下载
  11. 导入数据java生成逆向sql,用于回滚,你试过吗?
  12. 可以搜python题答案的app-可以搜Python题答案的APP有哪些?
  13. 干货篇 | 当CPU使用率达到100%该怎么办?
  14. 嵌入式系统开发-麦子学院(15)-根文件系统
  15. 六、Linux常用命令之压缩打包篇(gzip、gunzip、tar、zip、bzip2)
  16. 从session里面取得值为null
  17. 解决SQLServer复制到Excel中内容换行问题
  18. IEC60958和IEC61937
  19. 8086的储存器编址
  20. Python基础教程(英文视频教学)

热门文章

  1. 计蒜客习题:修建大桥
  2. V831——人脸识别开锁
  3. 携创教育:自考本科有用吗?有什么优势?
  4. 《疯狂JAVA讲义》学习笔记(一)
  5. 1.HTML+CSS3 —— To:Kobe——彩虹渐变
  6. 一个炫酷的flash网站模板
  7. UML九图之三(状态图)
  8. 李飞飞论战《未来简史》作者赫拉利!2019 年最精彩 AI 论战
  9. ADC 学习笔记(二)指标参数总结
  10. mysql 悲观锁 性能_mysql的乐观锁和悲观锁