智能汽车实验二(视觉传感器标定)

这篇具有很好参考价值的文章主要介绍了智能汽车实验二(视觉传感器标定)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验二 视觉传感器标定(实验报告)

【实验目的】

       1、了解开源图像处理库OpenCV的结构,掌握OpenCV的基本使用方法。

       2、了解开源图像处理库OpenCV的基本模块功能,掌握常用图像处理方法。

       3、掌握摄像机标定算法,学会使用OpenCV进行摄像机标定。

【实验性质】

验证性实验。

【实验要求】

       1、C++集成开发环境(QT5或VS2015及以上)

       2、OpenCV 4.x

       3、单/双目摄像机

【实验内容】

       1、掌握OpenCV开源图像库的基本使用方法

       2、使用OpenCV进行单目摄像机标定

       3、使用OpenCV进行双目摄像机标定

【实验步骤】

       1、下载、安装、OpenCV 4.x

       官网下载:https://opencv.org/opencv-4-6-0/

      

       2、摄像机标定原理

摄像机标定的目标,是要建立三维世界坐标系与二维图像坐标系之间的对应关系。在单目视觉中,这种对应关系是一对多的,即二维图像中的一个像素点对应着三维空间中的一条直线;在双目视觉中,可以通过两幅二维图像上的对应像素点计算得到三维世界坐标系与二维图像坐标系的一一对应关系。由此便可以得到物体的三维坐标值。

摄像机安装位置参数为外部参数,摄像机镜头畸变参数为非线性模型内部参数。标定过程即是求出摄像机的内部参数和外部参数,从而得到上述坐标转换的旋转矩阵和平移向量。

智能汽车实验二(视觉传感器标定)

图2-1 摄像机成像模型

图中,摄像机坐标系为OXcYcZc,而计算机图像坐标系O0uv与图像平面坐标系O1xy的转换关系为:

u = sux + u0

v = svy + v0

写成矩阵形式为:

uv1=su0u00svv0001xy1智能汽车实验二(视觉传感器标定)

其中,su、sv分别为x、y轴方向单位长度对应的像素点数;u0、v0为镜头光学中心位置,单位为mm。

请用矩阵形式写出计算机图像平面坐标系O0uv与世界坐标系的转换关系:

其中,Xw智能汽车实验二(视觉传感器标定)Yw智能汽车实验二(视觉传感器标定)Zw智能汽车实验二(视觉传感器标定)为世界坐标系,R为3X3阶方阵;T为3X1维平移向量矩阵。

Zcuv1=su0u00svv0001xy1=su0u00svv0001f0000f000010XcYcZc1=su0u00svv0001f0000f000010RT01XwYwZw1智能汽车实验二(视觉传感器标定)

实际上,摄像机镜头成像并不是理想的透视成像,而是存在径向变形、偏心变形、薄棱镜变形等因素影响下产生不同程度的畸变。由于畸变因素作用,使空间点成像并不在线性模型描述的位置x,y智能汽车实验二(视觉传感器标定),而是在受到镜头失真影响而偏移的平面坐标x',y'智能汽车实验二(视觉传感器标定)

x=x'+ ∆xy=y'+ ∆y智能汽车实验二(视觉传感器标定)

其中,∆x智能汽车实验二(视觉传感器标定)∆y智能汽车实验二(视觉传感器标定)为非线性畸变值,与像点在图像中的位置有关。一般镜头畸变同时存在径向畸变和切向畸变,切向畸变是由于透镜与摄像头传感器平面或图像平面不平行而产生的,多是由于透镜安装到镜头模组上的偏差导致,通常较小。实际应用中多只考虑径向畸变,径向畸变常用距图像中心径向距离的泰勒级数展开的前几项来表示:

∆x=x'-u0k1r2+k2r4+…∆y=y'-v0k1r2+k2r4+…智能汽车实验二(视觉传感器标定)

k1智能汽车实验二(视觉传感器标定)k2智能汽车实验二(视觉传感器标定)为非线性畸变参数,r2=x'-u02+y'-v02智能汽车实验二(视觉传感器标定)

摄像机的标定方法很多,大致可分为传统标定技术和自标定技术。

传统标定技术:     需要在摄像机前放置一个特定的标定物,并人为地提供一组已知坐标的特征基元,摄像机通过寻找这些已知特征的基元来实现标定                                              

自标定技术:      比较灵活,不需要特定的参照物,它利用环境的刚体性,通过对比多幅图像中的对应点来计算摄像机模型                      

OpenCV采用介于传统标定方法和自标定方法之间的一种方法,由张正友提出。这种方法不需要知道摄像机运动的具体信息,比传统标定方法更灵活,同时仍需要一个特定的标定物以及一组已知的特征基元的坐标,这一点不如自标定灵活。它通过在至少3个不同的位置获取标定物的图像,计算出摄像机所有的内外参数。

标定算法描述参考知乎:https://zhuanlan.zhihu.com/p/36371959

OpenCV源码在其sample/data目录下面一个自带的棋盘图(chessboard.png),显示如下:

智能汽车实验二(视觉传感器标定)

    在标定的时候,算法要求提供的棋盘格的宽度与高度,还有他们的间隔距离。需要特别注意是这里的宽高是指他们的内部交叉点的个数,以上图为例,它的大小为7x7而不是8x8。间隔是指棋盘格之间的距离,可以用像素距离表示,也可以用实际毫米为单位表示。

       3、标定常用函数

(1)findChessboardCorners()

bool findChessboardCorners( InputArray image, Size patternSize, OutputArray corners,

            int flags = CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE );

       函数功能:  确定输入图像是否是棋盘模式,并确定角点的位置。如果所有角点都被检测到且它们都被以一定顺序排布(一行一行地,每行从左到右),函数返回非零值,否则在函数不能发现所有角点或者记录它们地情况下,函数返回0                             

(2)cv::drawChessboardCorners()

drawChessboardCorners( InputOutputArray image, Size patternSize,

                           InputArray corners, bool patternWasFound );

       函数功能:    用于标定摄像机时绘制被成功标定的角点                                       

   

(3)find4QuadCornerSubpix()

       find4QuadCornerSubpix(InputArray img, InputOutputArray corners, Size region_size );

       函数功能:   查找棋盘角的亚像素精确位置。尝试近似分隔棋盘格字段(“四边形”)的线并返回这些线的交叉点。                                                     

(4)cornerSubPix()

       void cornerSubPix( InputArray image, InputOutputArray corners, Size winSize,

                       Size zeroZone, TermCriteria criteria );

       函数功能:      优化角点位置,获得棋盘格上的亚像素角点。                                                    

(5)calibrateCamera()

       double calibrateCamera( InputArrayOfArrays objectPoints,

                            InputArrayOfArrays imagePoints,

                            Size imageSize,

                            InputOutputArray cameraMatrix,

                            InputOutputArray distCoeffs,

                            OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,

                            int flags = 0,

                            TermCriteria criteria = TermCriteria(TermCriteria::COUNT +

                            TermCriteria::EPS, 30, DBL_EPSILON) );

       函数功能:   通过多个视角的2D/3D对应,求解出该相机的内参数和每一个视角的外参数                                                      

(6)initUndistortRectifyMap()

       void initUndistortRectifyMap(InputArray cameraMatrix,

                                InputArray distCoeffs,

                                InputArray R,

                                InputArray newCameraMatrix,

                                Size size,

                                int m1type,

                                OutputArray map1,

                                OutputArray map2)

       函数功能:    这个函数使用于计算无畸变和修正转换关系。                                                       

       4、单目摄像机标定

(1)打开标定配置参数文件default.xml,设置参数:

  1. 棋盘格的宽度和高度(两个方向的角点数量),根据实际情况设置。

      <!-- Number of inner corners per a item row and column. (square, circle) -->

      <BoardSize_Width>9</BoardSize_Width>

     <BoardSize_Height>6</BoardSize_Height>

  1. 每格的宽度

单元格的宽度应设置为实际的毫米数。

  <!-- The size of a square in some user defined metric system (pixel, millimeter)-->

  <Square_Size>50</Square_Size>

  1. 选择输入方式

程序提供了3种输入方式。如果摄像机已连接电脑,可以使用input_camera方式。该方式只需要设置视频输入设备号,对于笔记本而言,通常0表示笔记本内置摄像头,1表示外置摄像头。

  1. 编译OpenCV标定程序

(2)标定程序将实现以下功能

  • 确定失真矩阵
  • 确定摄像机矩阵
  • 摄像机、视频和图像文件列表的输入
  • 从XML/YAML文件进行配置
  • 将结果保存到XML/YAML文件中
  • 计算重投影误差

程序只有一个参数。其配置文件的名称。如果没有,它将尝试打开一个名为“default.xml”。

(3)运行标定程序,摄像机将拍摄25幅图片并识别角点,如下图

智能汽车实验二(视觉传感器标定)

(4)标定结果保存在程序中指定的结果文件中

    请在实验报告中说明结果文件中各项数据的意义(阅读代码,并在网上查阅相关资料)

<nr_of_frames>25</nr_of_frames>

图像的宽和高度

<image_width>640</image_width>

<image_height>480</image_height>

棋盘格的宽度11和高度8

<board_width>11</board_width>

<board_height>8</board_height>

单元格的尺寸

<square_size>50.</square_size>

相机类型

<fisheye_model>0</fisheye_model>

尺寸自适应

<fix_aspect_ratio>1.</fix_aspect_ratio>

相机内部参数矩阵data为值

Rows 和 cols为行和列

Dt表示数据类新

<camera_matrix type_id="opencv-matrix"><rows>3</rows><cols>3</cols>

<dt>d</dt>

<data> 7.0111172389870558e+02 0. 3.1950000000000000e+02 0. 7.0111172389870558e+02 2.3950000000000000e+02 0. 0. 1.

</data></camera_matrix>

畸变系数

Row和cols为维度

Data包含畸变系数实际的值

<avg_reprojection_error>

为平均投影误差值

<distortion_coefficients type_id="opencv-matrix"><rows>5</rows><cols>1</cols>

<dt>d</dt>

<data> 7.2399710954221264e-02 4.5114674802590399e-01 0. 0. -3.8163393536623835e+00</data></distortion_coefficients><avg_reprojection_error>4.1946356118960665e-01</avg_reprojection_error>

<extrinsic_parameters type_id="opencv-matrix"><rows>25</rows><cols>6</cols>

数据类型为double

<dt>d</dt>

<data>

数据太长这里省略

</data>

<image_points type_id="opencv-matrix">

<rows>25</rows><cols>88</cols>

数据类型为浮点

<dt>"2f"</dt>

<data>1.96974991e+02 3.05226959e+02 2.15540726e+02 3.04309814e+02 2.34028198e+02 3.03369354e+02 2.52492340e+02 3.02424805e+02 2.70655762e+02 3.01588440e+02 2.88653290e+02 3.00733093e+02 3.06717133e+02 2.99980408e+02 3.24438385e+02 2.99227295e+02 3.42079742e+02 2.98437469e</data>

这里也是数据太长省略

<grid_points> 0. 0. 0. 50. 0. 0. 100. 0. 0. 150. 0. 0. 200. 0. 0. 250. 0. 0. 300. 0. 0. 350. 0. 0. 400. 0. 0. 450. 0. 0. 500. 0. 0. 0. 50. 0. 50. 50. 0. 100. 50. 0. 150. 50. 0. 200. 50. 0. 250. 50. 0. 300. 50. 0. 350. 50. 0. 400. 50. 0. 450. 50. 0. 500. 50. 0. 0. 100. 0. 50. 100. 0. 100. 100. 0. 150. 100. 0. 200. 100. 0. 250. 100. 0. 300. 100. 0. 350. 100. 0. 400. 100. 0. 450. 100. 0. 500. 100. 0. 0. 150. 0. 50. 150. 0. 100. 150. 0. 150. 150. 0. 200. 150. 0. 250. 150. 0. 300. 150. 0. 350. 150. 0. 400. 150. 0. 450. 150. 0. 500. 150. 0. 0. 200. 0. 50. 200. 0. 100. 200. 0. 150. 200. 0. 200. 200. 0. 250. 200. 0. 300. 200. 0. 350. 200. 0. 400. 200. 0. 450. 200. 0. 500. 200. 0. 0. 250. 0. 50. 250. 0. 100. 250. 0. 150. 250. 0. 200. 250. 0. 250. 250. 0. 300. 250. 0. 350. 250. 0. 400. 250. 0. 450. 250. 0. 500. 250. 0. 0. 300. 0. 50. 300. 0. 100. 300. 0. 150. 300. 0. 200. 300. 0. 250. 300. 0. 300. 300. 0. 350. 300. 0. 400. 300. 0. 450. 300. 0. 500. 300. 0. 0. 350. 0. 50. 350. 0. 100. 350. 0. 150. 350. 0. 200. 350. 0. 250. 350. 0. 300. 350. 0. 350. 350. 0. 400. 350. 0. 450. 350. 0. 500. 350. 0.</grid_points></opencv_storage>

<grid_points>

这里面是相片的标定,坐标为像素点文章来源地址https://www.toymoban.com/news/detail-443980.html

到了这里,关于智能汽车实验二(视觉传感器标定)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 智能传感器阅读笔记-物联网用智能传感器技术的发展重点

    物联网用智能传感器技术的发展重点 包含 边缘计算算法优化 、 身份认证算法优化 和 能量采集技术 。 图1  物联网用智能传感器技术的发展重点 边缘计算算法优化 边缘计算是指在靠近物或数据源头的一侧(传感器侧),采用集检测、计算、存储、通信功能于一体的平台,

    2024年02月20日
    浏览(51)
  • STM32-光敏传感器实验

    光敏传感器的主要是光敏二极管,核心是PN结,利用了光电效应,对光强很敏感,有单向导电性,工作时需要加反向电压。光照越强,等效电阻越小。 实验要求通过ADC3通道6(PF8)采集光敏二极管的电压,然后转换为0~100的光纤强度值并显示在液晶屏上。 由下图可知对于的通

    2024年02月05日
    浏览(40)
  • 2022最新!视觉SLAM综述(多传感器/姿态估计/动态环境/视觉里程计)

    目录 摘要 视觉SLAM算法的发展 相关综述 VSLAM 设置标准 传感器和数据采集 目标环境 视觉特征处理 系统评估 语义等级 基于主要目标的VSLAM方法 目标一:多传感器处理 目标二:姿态估计 目标三:现实世界可行性 目标四:资源限制 目标五:弹性化(Versatility) 目标六:视觉里

    2023年04月20日
    浏览(58)
  • STM32——内部温度传感器实验

    内部温度传感器框图 具体介绍: 1、STM32F40X有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。 2、该温度传感器在内部和ADCx_IN16(F40xx/F41xx)或者ADCx_IN18(F42xx/F43xx)输入通道相连接,此通道把传感器输出的电压转换成数字值。 3、温度传感器模拟输入推荐采样时间是

    2024年02月13日
    浏览(49)
  • 从零实战SLAM-第四课(相机成像及常用视觉传感器)

      在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 ------------------------------------------------------------------------------------------------------------------------------- 相机的最基础模型就是针孔相机模型 针孔相机的

    2024年02月13日
    浏览(45)
  • 【Arduino28】LM35温度传感器实验

    LM35温度传感器:1 个 面包板:1个 杜邦线:3根 VCC引脚接 5V 电源 OUT引脚接 A0接口 GND引脚接 GND 接口 通过本次实验,我学会了 LM35 传感器的使用。

    2024年02月09日
    浏览(42)
  • 鉴源实验室 | 自动驾驶传感器攻击研究

    作者 |  付海涛 上海控安可信软件创新研究院汽车网络安全组 来源 |  鉴源实验室 社群 |  添加微信号“ TICPShanghai ”加入“上海控安51fusa安全社区” 01 自动驾驶汽车的脆弱性 自2015年以来,汽车的信息安全问题受到国内外的广泛关注。而随着汽车的智能化与网联化的进程,

    2024年02月05日
    浏览(54)
  • 智能井盖传感器,物联网智能井盖系统

    随着城市人口的不断增加和城市化进程的不断推进,城市基础设施的安全和可靠性变得愈发重要,城市窨井盖作为城市基础设施重要组成部分之一,其安全性事关城市安全有序运行和居民生产生活安全保障。 近年来,各地都在加强城市窨井盖治理,在窨井盖管理方面也存在一

    2024年02月11日
    浏览(43)
  • 氢气传感器报警值:守护实验室安全的隐形卫士

                    随着科技的发展,我们的生活变得越来越便捷,但是与此同时,安全问题也日益凸显。其中,氢气作为一种清洁能源,被广泛应用于各个领域,但是如果不加以控制,氢气泄漏也可能带来严重的安全隐患。因此,了解氢气传感器的报警值,确保实验室

    2024年04月28日
    浏览(42)
  • 智能井盖传感器:高效守护城市道路安全

    近年来,井盖出问题导致事故的报道时有发生,但却容易被公众所忽视。井盖作为城市基础设施的一部分,主要用于保护下方的供水管道、下水道以及电信线缆等。然而,由于长时间使用、缺乏维护、设计不合理等原因,井盖出现问题成为了安全隐患。 井盖出现问题会导致哪

    2024年02月09日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包