700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【计算机视觉】全景相机标定(MATLAB/opencv)

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

时间:2021-05-12 13:37:11

相关推荐

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

全景相机标定

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 ”文件。

分析错误

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

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

"Analyse error"“这将给你 reprojection错误,每一种颜色 关联到一个图像。 这将帮助你识别的点 被错误地提取。

然后,您可以使用reextract角落 ”Recomp。 角落”。

”画三维“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

旧的工具箱

旧的工具箱,不再维护。

常见问题解答

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

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

2 openccv 标定

原文来源 opencv/master/dd/d12/tutorial_omnidir_calib_main.html

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

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

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

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

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

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

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

本教程将介绍以下的部分全景相机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:MatCV_32FC2

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

立体校准

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

图像Rectificaiton

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

图像

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

RECTIFY_PERSPECTIVE:纠正透视图像,这将失去一些提出的观点。RECTIFY_CYLINDRICAL:纠正柱面图像保存所有视图。RECTIFY_STEREOGRAPHIC:纠正立体图像可能会失去一些观点。RECTIFY_LONGLATI:纠正longitude-latitude地图像地球的世界地图。 整流可用于立体重建但可能不是友好的观点。 这张地图是论文中描述:李双目球面立体[J]。 智能交通系统、IEEE 、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视角图像失去太多的视野,浪费全景相机的优势,即大的视野。

立。

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

图像

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

图像

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

图像

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。