全景相机标定

1Matlab工具箱

http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/links.html
http://www-sop.inria.fr/icare/personnel/Christopher.Mei/ChristopherMeiPhDStudentToolbox.html
下载工具箱

新的标定工具箱: 不需要先验知识的相机或镜像参数和我们只保持的灵活性 必须为每个校准网格选择4分(我们不 需要单独选择每个角落)。

包含投影模型的函数(和雅克比)是可用的 在Matlab分别作为一个c++类相关的墨西哥人的功能。 类初始化在校准过程中生成的文件。 它使3 d点的投影也像点的提升 投影射线。

这个新的“ 全景 标定工具箱 ”是一个完整的重写之前的版本。 它使用一些功能从“ 加州理工学院 标定工具箱“让Bouguet。

这个页面给出的一个例子 校准会话。 这些图片 是 用于尝试工具箱。 你可以找到一个校准网格/模式 在这里。投影模型 使用的是可用的 在这里。

工具箱已成功用于校准双曲线,抛物线, 折叠镜、球形和广角传感器。

重要:校准参数与Matlab计算 坐标(从1开始),而不是与C / c++公约 (从0开始)。

我要感谢的 ACFR (澳大利亚领域机器人中心)提供一些 夸张的图片,特别是 亚历克斯·布鲁克斯 。

  • 投影模型和参数
  • 校准会话
  • 不同的按钮和设置
  • 下载
  • 常见问题解答

投影模型和参数

使用的投影模型 在这里 。 它是一个统一的投影模型的组合来自盖尔和Barreto 和径向畸变函数。 这个模型可以考虑 远心镜头引入的失真(抛物面镜)和给予 一个更大的灵活性(球形镜子可以校准)。

校准估计:

  • 外在参数对应的旋转 (四元数:Qw)和翻译(Tw)之间的网格和镜子
  • 参数描述镜子形状(xi)
  • 镜头(如引起的失真。 远心的) (kc)
  • 的固有参数普遍相机:斜(alpha_c), 普遍焦距(γγ₂)和主点(cc)

校准会话

  • 启动
  • 镜子类型
  • 加载图片
  • 估计的内在参数 镜子的边界
  • 提取网格角落
  • 校准
  • 分析错误

启动

请编辑  SETTINGS.m  第一次的文件。 
开始在Matlab工具箱:

> > omni_calib_gui

这个窗口将会出现:

包含图片的目录。 
如果你想知道直接的使用不同 按钮,去 本节 。

点击“  "Mirror type"  ”:

1 or [] : parabola (xi=1)
2 : catadioptric (hyperbola,ellipse,sphere)
3 : dioptric (fisheye) 
Choice : 
Camera type : parabolic.

这一步只是约束最小化的抛物线 例(ξ= 1),避免试图提取镜像的边界 折光。

加载图片

" Load images " 会问你在当前图像的基本名称吗 目录和格式:

>>
.                      Omni_Fixed_Values.m    cameraAvecOmni_00.tif  cameraAvecOmni_02.tif  cameraAvecOmni_04.tif  cameraAvecOmni_06.tif 
..                     Omni_Fixed_Values.mat  cameraAvecOmni_01.tif  cameraAvecOmni_03.tif  cameraAvecOmni_05.tif

Basename camera calibration images (without number nor suffix): cameraAvecOmni_
Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'p'='pgm', 'j'='jpg', 'm'='ppm') t
Loading image 1...2...3...4...5...6...7...
done

完成

图片正在加载,我们已经准备好开始估算 内在价值然后校准传感器。

的内在参数 镜子的边界
按下  " Estimate camera intri. " , 我们将计算的固有参数的估计 潜在的相机(普通焦距和中心)。 
在反射折射的传感器的情况下,要求用户点击的中心 镜子:

Please click on the mirror center and then on the mirror inner border.
Calculating edges... done.
Rejecting inner points... done.
Doing a simplified RANSAC to obtain circle parameters... done.
Was the extraction successful ? ([]=yes, other=no) :

然后我们估计普遍焦距从点线图片:

We are now going to estimate the generalised focal (gammac) from line images.
Which image shall we use ? ([] = 1) : 2
Please select at least 4 ALIGNED edge points on a NON-RADIAL line on the grid.
Click with the right button when finished.
done.

提取网格角落

我们现在准备提取的网格角落 将使用在最小化,新闻 ”  提取网格角落  ”: 
" Extract grid corners ":
Extraction of the grid corners on the images
Number(s) of image(s) to process ([] = all images) = 
Window size for corner finder (wintx and winty):
wintx ([] = 8) =   Sub-pixel extraction in the catadioptric case is less tolerant and we should try and keep the window size down.
winty ([] = 8) = 
Window size = 17x17

Processing image 1...
Using (wintx,winty)=(8,8) - Window size = 17x17      (Note: To reset the window size, run script clearwin)
Please press enter after zooming...

现在您可以放大校准网格并按[ENTER]键:

你现在需要点击网格的四角顺时针 顺序:

omni-lines应该按照网格。 
你将被要求网格的大小: 
Size of each square along the X direction: dX=42mm
Size of each square along the Y direction: dY=42mm   (Note: To reset the size of the squares, clear the variables dX and dY)
Corner extraction... 

校准

按“ 校准 ” 将开始最小化:

>> 
Aspect ratio optimized (est_aspect_ratio = 1) -> both components of fc are estimated (DEFAULT).
Principal point optimized (center_optim=1) - (DEFAULT). To reject principal point, set center_optim=0
Skew not optimized (est_alpha=0) - (DEFAULT)

Main calibration optimization procedure - Number of images : 7
Gradient descent iterations : WARNING: removing singular matrix warning and managing it internally.
1...2...(r) 3...4...5...6...7...8...9...10...11...12...(r) 13...14...15...16...17...18...19...20...21...22...(r) 23...24...25...26...27...28...29...30...31...32...(r) 33...34...35...36...37...38...39...40...41..
42...(r) 43...44...45...46...47...48...49...50...51...52...(r) 53...54...55...56...57...58...59...Matrix badly conditioned, stopping...
done
Estimation of uncertainties...done

Calibration results after optimization (with uncertainties):

Focal Length:          fc = [17.92581   17.91205 ] ± [ 0.18220   0.21302 ]
Principal point:       cc = [ 980.75605   544.84446 ] ± [ 4.41434   4.64072 ]
Skew:             alpha_c = [ 0.00000 ] ± [ 0.00283  ]   => angle of pixel axes = 90.00000 ± 0.16228 degrees
Distortion:            kc = [ -0.00008   0.00000   0.00000   -0.00000  0.00000 ] ± [ 0.00001   0.00000   0.00003   0.00002  0.00000 ]
Pixel error+-std :          err = [ 0.17324   0.29971 ]+-[ 0.13750   0.24850 ]
Note: The numerical errors are approximately three times the standard deviations (for reference).

Recommendation: The skew coefficient alpha_c is found to be equal to zero (within its uncertainty).
                You may want to reject it from the optimization by setting est_alpha=0 and run Calibration

Recommendation: Some distortion coefficients are found equal to zero (within their uncertainties).
                To reject them from the optimization set est_dist=[1;1;0;0;0] and run Calibration

(r)表明,外在的独立参数被重新评估。 
“像素错误”的平均绝对误差。

外在的迭代次数和频率参数 计算可以改变在“  SETTINGS.m  ”文件。

分析错误

三个工具可以用来分析错误:

  1. "Plot Pix/Rad errors"  给了你错误的图像和距离 点的图像中心:

  2. "Analyse error"“这将给你 reprojection错误,每一种颜色 关联到一个图像。 这将帮助你识别的点 被错误地提取。 
    然后,您可以使用reextract角落 ” Recomp。 角落 ”。

  3. ” 画三维 “3 d显示了网格: 

当心  :当 校准,它是不够的绝对误差。 的 平均超过所有的错误没有考虑空间 分布的错误。 校准可能取决于 网格的位置(偏见)。

不同的按钮和设置

“  SETTINGS.m  “文件包含工具箱的路径 和变量最小化(max。 之前的迭代和步骤 验算外在参数)。

按钮:

  • "Mirror type"” 镜子类型 “镜子的直径和输入值 参数
  • "Load images"” 加载图片 “加载图像用于校准
  • "Estimate camera intri."” 估计相机足。 ” 获得初始值的校准使用镜子边境
  • "Extract grid corners"” 提取 网格的角落 “帮助提取电网校准的角落
  • "Draw Grid Estimate"” 画网格估计 ” 根据项目黄色网格点 红色的计算值,提取的点
  • "Calibration"” 校准 ” 使用图像中的距离发射最小化
  • "Rm Calibration"” Rm校准 ” 消除了校准参数
  • "Analyse error"” 分析 错误 “reprojects错误,这可以用来找到图片 没有正确提取的分
  • "Recomp. corners"” Recomp。 角落 ” 验算点提取reprojecting后 网格点(这可以使用当“分析错误”表明,网格点 不正确地提取)
  • "Draw 3D"” 画三维 ” 画了一个相机和网格的三维视图
  • "Plot Pix/Rad errors"” 情节 照片/ Rad错误 ”像素误差与阴谋 点的距离图像的中心
  • "Add/Suppress images"” 添加/抑制 图片 ”可以添加或删除图片
  • "Show calib results"” 显示 calib结果 “显示校准值和错误
  • "Save"” 保存 ” 节省了外在和内在参数,网格点,…
  • "Load"” 加载 ” 加载校准期间获取的值
  • "Exit"” 退出 ” 退出程序

下载

文件不属于“ 加州理工学院 标定工具箱 “让Bouguet 发表下 GPL许可证 版本2 。

如果你有任何建议,bug修正请写: Christopher.Mei@sophia.inria.fr

改进的全景校准 工具箱 (别忘了改变 SETTINGS.m 的文件)  ( ZIP] ( BZ2 ]
投影函数(matlab c++,墨西哥人文件) ( ZIP][ BZ2 ]
图像检测的校准工具 ( ZIP][ BZ2 ]
投影模型 ( PDF ]
校准网格/模式 ( PDF ]

旧的工具箱

旧的工具箱,不再维护。

  版本0.93 
Matlab 全景校准 工具箱   (别忘了改变 SETTINGS.m 的文件)  ( ZIP] ( BZ2 ] 
图像检测的校准工具 ( ZIP][ BZ2 ]
  版本1.1 
C 程序 undistort图片  ( ZIP ][ BZ2 ]
  版本1.0
C示例程序阅读 无畸变的校正模型 
( ZIP ] ( BZ2 ]

常见问题解答

当我所说的“  提取网格角落  ”, 我得到一个错误  “标识符” 预期,”(“发现。  ”!

回答 :  自0.92版(兼容matlab 6),这一点 不应该发生了

2 openccv 标定

原文来源 opencv  http://docs.opencv.org/master/dd/d12/tutorial_omnidir_calib_main.html

这个模块包括校准、整流和全景相机立体重建。 本文中描述的相机模型:

c·梅和p,单一的观点全景相机校正平面网格,2007年举行的“国际机器人与自动化会议”。-------------

C. Mei and P. Rives, Single view point omnidirectional camera calibration from planar(平面的) grids, in ICRA 2007.

模型能够模拟反射折射的相机和鱼眼相机,可能都有非常大的视野。

校准的实现是基于李的标定工具箱( Li's calibration toolbox):

b·李·l·亨,k . Kevin和m . Pollefeys“Multiple-Camera系统标定工具箱使用功能Descriptor-Based校准模式”,——2013年。

B. Li, L. Heng, K. Kevin and M. Pollefeys, "A Multiple-Camera System Calibration Toolbox Using A Feature Descriptor-Based Calibration Pattern", in IROS 2013.

本教程将介绍以下的部分全景相机calibartion模块:

  • 校准一个相机。
  • 校准一双立体相机。
  • 纠正图像,以便大型畸变消除。
  • 重建三维从两个立体图像,大视场。。
  • 和opencv / calib3d鱼眼模型相比

单摄像机标定

校准相机的第一步是校准模式和拍照。 几种模式支持OpenCV,checkerborad和圆网格。 也可以使用一个名为随机模式的新模式,您可以参考opencv_contrib /模块/ ccalib为更多的细节。

下一步是提取角校准模式。 棋盘使用OpenCV函数 CV:findChessboardCorners对于圆网格,使用 CV:findCirclesGrid为随机模式,使用 randomPatternCornerFinder类opencv_contrib /模块/ ccalib / src / randomPattern.hpp。 角落的位置在图像保存在一个变量 imagePoints。 的类型 imagePoints可能是 std::矢量< std::<CV:Vec2f> >在每一帧,第一个向量商店的角落,第二个向量角落存储在单个框架。 类型也可以 std::向量<CV: Mat>在哪里 CV:Mat是 CV_32FC2

同时,相应的3 d世界(模式)坐标点是必需的。 你可以计算他们为自己如果你知道你的物理尺寸的模式。 节省3 d点 objectPoints,类似于 imagePoints,它可以 std::矢量< std::< Vec3f > >或 std::向量<CV:Mat>在哪里 CV:Mat的类型是 CV_32FC3。 注的大小 objectPoints和 imagePoints必须是相同的,因为他们是相互对应的。

立体校准

立体标定校准两个摄像头在一起。 两个摄像头的输出参数包括相机参数和相对姿态。 恢复相对姿势,两个摄像头必须遵守相同的模式同时,所以 objectPoints的两个摄像头都是相同的。

图像Rectificaiton

全景图像有很大的变形,所以人类的眼睛球不兼容。 为了更好的视图中,整流可以应用如果相机参数是已知的。 这里有一个例子360度全方位图像的水平视野。

图像

的变量 扭曲的 和 不失真 是原图像和纠正图像依透视画法。 习 是相机参数。 知道 和 new_size 是纠正图像的摄像机矩阵和图像大小。 旗帜 是整流类型,它可以是:

  • RECTIFY_PERSPECTIVE:纠正透视图像,这将失去一些提出的观点。
  • RECTIFY_CYLINDRICAL:纠正柱面图像保存所有视图。
  • RECTIFY_STEREOGRAPHIC:纠正立体图像可能会失去一些观点。
  • RECTIFY_LONGLATI:纠正longitude-latitude地图像地球的世界地图。 整流可用于立体重建但可能不是友好的观点。 这张地图是论文中描述: 李双目球面立体[J]。 智能交通系统、IEEE 2008、9(4):589 - 600。

以下四个图像矫正图像了以上四种类型:

图像

图像

图像

图像

它可以观察到的角度纠正图像perserves一点点的视野,不好看。 圆柱形整流保存所有字段的视图和场景是不自然的只有中间的底部。 球面的底部的失真小于圆柱,但其他地方更大的扭曲,它不能保留所有的视野。 图像非常大的失真,longitude-latitude整改并没有给出一个好的结果,但它可以使纵向约束在一条线,这样可以应用在全景图像立体匹配。

请注意 :有一个更好的结果,你应该仔细选择 知道它与你的相机。 一般来说,一个更小的焦距会导致一个更小的视野,反之亦然。 这里有recommonded设置。

对于RECTIFY_PERSPECTIVE

知道= Matx33f(new_size。 宽/ 4 0 new_size.width / 2,
0,new_size。 高度/ 4,new_size.height / 2,
0 0 1);

RECTIFY_CYLINDRICAL、RECTIFY_STEREOGRAPHIC RECTIFY_LONGLATI

知道= Matx33f(new_size.width / 3.1415,0,0,
0,new_size.height / 3.1415,0,
0 0 1);

也许你需要改变 (v0情况)得到一个更好的观点。

立体重建

立体重建重建3 d分一对校准立体相机。 这是一个计算机幻影的基本问题。 然而,对于全景相机,它不是非常受欢迎的,因为大变形使它有点困难。 传统方法纠正图像视角的立体透视图像重建。 然而,最后一节表明recifying视角图像失去太多的视野,浪费全景相机的优势,即大的视野。

立。

此外, imageRec1和 imagerec2是修正版的第一和第二图像。 纵向线的坐标相同,这样立体匹配变得容易。 这里有一个例子:

图像

它可以观察到他们是一致的。 的变量 disMap差异映射计算吗 简历:StereoSGBM从 imageRec1和 imageRec2。 的差距地图上面的两张图片是:

图像

之后我们有差距,我们可以计算3 d为每个像素位置。 点云存储 pointCloud,这是一个三路或6通道 简历:垫。 我们展示如下图的点云。

图像

【计算机视觉】全景相机标定(MATLAB/opencv)相关推荐

  1. 相机标定 matlab opencv ROS三种方法标定步骤(1)

    一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...

  2. 相机标定 matlab opencv ROS三种方法标定步骤(2)

    二  ubuntu下Opencv的相机标定 一般直接用Opencv的源码就可以进行相机的标定,但是可能只是会实现结果,却不懂实现的过程,我也是模模糊糊的看了<计算机视觉中的多视图几何>以及 ...

  3. 相机标定 matlab opencv ROS三种方法标定步骤(3)

    三 ,  ROS 环境下 如何进行相机标定 刚开始做到的时候遇到一些问题没有记录下来,现在回头写的时候都是没有错误的结果了,首先使用ROS标定相机, 要知道如何查看节点之间的流程图  rosrun r ...

  4. 计算机视觉(相机标定)-1.1-针孔摄像机透镜

    计算机视觉(相机标定)-1.1-针孔摄像机&透镜 学习前言 一.针孔摄像机  1.基本想法  2.实现原理  3.针孔摄像机模型(重点) 二.透镜  1.为什么需要透镜  2.加入透镜后的模型 ...

  5. 鱼眼相机标定以及OpenCV实现

    在另一篇文章中我已经写过有关普通相机模型及其OpenCV标定实现,这篇文章将主要关注鱼眼相机模型及其OpenCV标定实现. 先看一张鱼眼相机拍摄出来的结果: 从图中可以看出很明显的畸变.对鱼眼相机标定 ...

  6. 计算机视觉(相机标定)-2.1 摄像机标定

    计算机视觉(相机标定)- 2.1 摄像机标定 学习前言 一. 摄像机标定是啥?为什么要进行摄像机标定? 二.求MMM 问题一:求解投影矩阵需要多少对应点? 问题二:怎么算? 二.求MMM中的摄像机的内 ...

  7. OpenCV | 双目相机标定之OpenCV获取左右相机图像+MATLAB单目标定+双目标定

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 原本网上可以搜到很多关于双目相机标 ...

  8. 研电赛项目之双目测距,涉及matlab相机标定,opencv多线程编程,摄像头读取,行人检测、BM立体匹配等等

    1 前言 今年参加了十五届研电赛,前天刚提交了作品,还有几天就答辩了,趁这几天总结一下这一个多月的收获. 本次研电赛作品为汽车行驶防碰撞系统,主要面向大型汽车在低速行驶场景下的防碰撞问题,通过双目相机 ...

  9. 【计算机视觉】相机标定原理(像素点与三维坐标点的转换)

    一.相机标定概述 相机标定目的 计算机视觉的任务之一:从相机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体. 相机标定内容 空间物体表面某点的三维几何位置与其在图像中对应点之间的 ...

最新文章

  1. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
  2. 常用javascript代码
  3. Windows10 环境下Jupyter Notebook的安装与使用
  4. 任正非:华为鸿蒙将比安卓快 60%;小米回应主题侵权;VS Code 1.36发布​ | 极客头条...
  5. 阿里云发布“码上公益”平台 打造更高效透明的“科技公益”
  6. 只能用光盘启动怎么办?
  7. JDBC:java数据库连接对象
  8. 数学分析-基本积分表
  9. 经典的同态滤波算法的优化及其应用参数配置
  10. CISSP考试复习经历分享2020年12月
  11. AD18如何设置过孔直连、焊盘十字
  12. 暴风影音5完整版(集成Real解码器) 增强去广告版
  13. 怎么用html制作3D页面,html – 如何使用CSS制作图像3D
  14. 量子纠缠计算机里的灵魂意识,量子纠缠理论告诉我们,灵魂真的存在于你我身体?...
  15. 捞王再度冲刺上市:盈利规模现腰斩,2021年下半年亏损749万元
  16. 达人评测 i7 12700H和R7 6800H选哪个好
  17. clr(clr a是什么指令)
  18. LPC2478(15)drv8711
  19. C#环境下GDAL / OGR环境配置与入门
  20. 斯坦福大学新课CS224W-2019-图网络机器学习算法-视频及ppt资源分享

热门文章

  1. 身份证号码含义及最后一位校验算法(ISO 7064:1983.MOD 11-2)
  2. 高等数学求导积分公式
  3. (wps)表格下拉选择多个选项
  4. 【微信小程序】开发入门篇(一)
  5. 【Linux】软件安装、仓库搭建、服务器配置
  6. LT-mapper,LT-SLAM代码运行与学习
  7. JavaScript手风琴实现
  8. display , visibility
  9. 联想笔记本进入pe_lenovo怎么进入pe系统?
  10. 少吃盐,一定要少吃盐!