相机标定实验

相机标定

文章目录

  • 相机标定
  • 1 ROS标定
    • 1.1安装标定程序
    • 1.2 下载标定板
    • 1.3 标定
    • 1.4 标定结果
  • 2 Kalibr相机标定
    • 2.1 下载官方提供的标定板
    • 2.2 自定义标定板
    • 2.3 cam数据录制
    • 2.4 标定
    • 2.5 输出结果
  • 3 MATLAB标定
    • 3.1 打开工具
    • 3.2 添加标定板图片
    • 3.3 设置标定参数
    • 3.4 生成标定结果
    • 3.5 标定结果

1 ROS标定

​ 这里使用了OpenCV camera calibration

1.1安装标定程序

sudo apt install ros-$ROS_DISTRO-camera-calibration# https://github.com/ros-perception/image_pipeline/tree/melodic源码安装

​ 选择对应的ROS版本,新建一个工作空间,把camera-calibration拖进去编译即可。

在这里插入图片描述

1.2 下载标定板

​ 可以自己生成生成标定板网站,也可以直接用这个

1.3 标定

  • 打开相机标定节点并指定话题
rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.02 image:=/camera2/camera/color/image_raw

–size 9x6 表示棋盘格按照角点(两个黑色块相接的地方)为9列6行

–square 0.02 表示每个黑白块的边长为2cm

image:=/camera/rgb/image_raw 设置接收的rgb图像话题

更多参数参考:http://wiki.ros.org/camera_calibration

  • calibration file应该类似如下
image_width: 640
image_height: 480
# The camera name is fixed. The color camera is rgb_camera, the depth/IR camera name is ir_camera
camera_name: rgb_camera
camera_matrix:rows: 3cols: 3data: [517.301, 0, 326.785, 0, 519.291, 244.563, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:rows: 1cols: 5data: [-0.41527, 0.31874, -0.00197, 0.00071, 0]
rectification_matrix:rows: 3cols: 3data: [0.999973, 0.00612598, -0.00406652, -0.00610201, 0.999964, 0.00588094, 0.0041024, -0.00585596, 0.999974 ]
projection_matrix:rows: 3cols: 4data: [517.301, 0, 326.785, -25.3167, 0, 519.291, 244.563, 0.282065, 0, 0, 1, 0.0777703]

1.4 标定结果

​ 生成压缩包/tmp/calibrationdata.tar.gz',其中的 ost.yaml就是标定结果。

[image]width:800height:600[narrow_stereo]camera matrix
375.192406 0.000000 400.541492
0.000000 376.253860 317.513124
0.000000 0.000000 1.000000distortion
0.131676 -0.094047 0.004399 -0.004491 0.000000rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000projection
786.365845 0.000000 -8.585413 0.000000
0.000000 862.199036 -9.969647 0.000000
0.000000 0.000000 1.000000 0.000000

2 Kalibr相机标定

Kalibr安装参考官网,下载好依赖即可,安装过程可能会出现内存不足情况,且编译时间很久。

2.1 下载官方提供的标定板

标定板下载–Aprilgrid 6x6 0.8x0.8 m (A0 page)

标定前, 注意测量格子的尺寸信息填入yaml文件

在这里插入图片描述

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags---6列
tagRows: 6               #number of apriltags---6行
tagSize: 0.088           # size of apriltag, edge to edge [m]--a
tagSpacing: 0.3     #ratio of space between tags to tagSize--a/b
codeOffset: 0            #code offset for the first tag in the aprilboard

2.2 自定义标定板

可以使用下面命令自定义一个Aprilgrid标定板(前提安装好kalibr

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx [NUM_COLS] --ny [NUM_ROWS] --tsize [TAG_WIDTH_M] --tspace [TAG_SPACING_PERCENT]

报错:kalibr_create_target_pdf: command not found,因为执行ROS命令没有加rosrun kalibr

# 这样子实际大小在一张A4左右
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.025 --tspace 0.3

参考

2.3 cam数据录制

ros topic的频率降低到4hz左右进行采集

ROS 提供了改变 topic 发布频率的节点throttle, 指令如下

# 使用方法rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /leftrosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right

录制数据

rosbag record -O stereo_calibra.bag /left /right-

2.4 标定

官网给了这个示例,可以先跑下这个看看对不对

source ros_ws/kalibr/devel/setup.bash# 径向和切向畸变
rosrun kalibr kalibr_calibrate_cameras --bag stereo_calibra.bag --topics /left /right --models pinhole-radtan pinhole-radtan --target april_6x6_80x80cm_A0.yaml# 或者采用 pinhole-equi 模型,对畸变大的相机效果不错----全景畸变
rosrun kalibr kalibr_calibrate_cameras --bag stereo_calibra.bag --topics /left /right --models pinhole-equi pinhole-equi --target april_6x6_80x80cm_A0.yaml

该工具必须提供以下输入:

  • –bag filename.bag
    包含数据的 ROS 包
  • –topics TOPIC_0 … TOPIC_N
    包中所有相机主题的列表。匹配 --models 的顺序
  • –models MODEL_0 … MODEL_N
    要安装的相机/畸变模型列表。与 --topics 的顺序匹配(请参阅支持的型号)
  • –target target.yaml
    校准目标配置(请参阅校准目标)

关于支持的相机型号模型

Kalibr支持以下投影模型

  • pinhole camera model (pinhole)1-针孔相机模型
    (intrinsics vector: [fu fv pu pv])
  • omnidirectional camera model (omni)2-全向相机模型
    (intrinsics vector: [xi fu fv pu pv])
  • double sphere camera model (ds)3
    (intrinsics vector: [xi alpha fu fv pu pv])
  • extended unified camera model (eucm)4
    (intrinsics vector: [alpha beta fu fv pu pv])

The intrinsics vector contains all parameters for the model:

  • fu, fv: focal-length焦距
  • pu, pv: principal point主点
  • xi: mirror parameter (only omni)镜像参数
  • xi, alpha: double sphere model parameters (only ds)双球模型参数
  • alpha, beta: extended unified model parameters (only eucm)

Distortion models畸变模型

  • radial-tangential (radtan)*-径向切向畸变
    (distortion_coeffs: [k1 k2 r1 r2])
  • equidistant (equi)**
    (distortion_coeffs: [k1 k2 k3 k4])
  • fov (fov)5
    (distortion_coeffs: [w])
  • none (none)
    (distortion_coeffs: [])

请注意,主题 (–topics) 和相机/畸变模型 (–model) 的顺序必须匹配并确定输出中的内部相机编号。

可以使用以下方式运行校准:

kalibr_calibrate_cameras --bag [filename.bag] --topics [TOPIC_0 ... TOPIC_N] --models [MODEL_0 ... MODEL_N] --target [target.yaml]

由于对焦距的初始猜测错误,在处理前几张图像后,优化可能会出现偏差。在这种情况下,只需尝试重新启动校准,因为初始猜测是基于随机选择的图像。

使用 help 参数可以获得有关选项的更多信息:

kalibr_calibrate_cameras --h

示例包文件的示例命令(在此处下载):

# 就是要给出配置文件yaml和bag的路径!
rosrun kalibr kalibr_calibrate_cameras \--target april_6x6.yaml \--models pinhole-radtan pinhole-radtan \--topics /cam0/image_raw /cam1/image_raw \--bag cam_april.bag \--bag-freq 10.0

2.5 输出结果

大车没电了,下次补下

3 MATLAB标定

参考

3.1 打开工具

  • 命令行窗口输入 cameraCalibrator

  • 或在APP中找到图像处理和计算机视觉,点击Camera Calibrator

在这里插入图片描述

3.2 添加标定板图片

若标定图为棋盘格:

在这里插入图片描述

更改参数,因为这里是20mm的标定板

在这里插入图片描述

3.3 设置标定参数

CAMERA MODEL 栏中

  • Camera Model:选择 Standard

  • Options

    • 选择 2 Coefficients3 Coefficients 一般用于鱼眼相机,工业相机一般不选择此项

    • 勾选 Tangential Distortion,用以计算切向畸变

    • 不勾选 Skew,若勾选,标定相机内参结果将出现参数 s ,即内参的第一行是 [fx, s, u0] ,这将会与我们使用的 OpenCV 进行测距的参数不同

然后点击校准

在这里插入图片描述

3.4 生成标定结果

拖拽红线,让误差尽可能小,抛弃哪些大于红线的图像

在这里插入图片描述

最后输出标定结果

在这里插入图片描述

3.5 标定结果

   Camera Intrinsics	# 相机内参IntrinsicMatrix: [3×3 double]焦距 FocalLength: [fx、fy]	PrincipalPoint: [cx、cy]	Skew: 0	# 倾斜系数,描述了图像的x轴和y轴之间的角度偏差,一般情况下为0RadialDistortion: [k1、k2] #径向畸变参数TangentialDistortion: [p1、p2] # 切向畸变参数,ImageSize: [600 800]Camera Extrinsics	# 相机外参RotationMatrices: [3×3×52 double]TranslationVectors: [52×3 double]Accuracy of EstimationMeanReprojectionError: xxx	# 平均重投影误差

最终校准结果

   Camera IntrinsicsIntrinsicMatrix: [3×3 double]FocalLength: [371.4645 372.0877]PrincipalPoint: [402.1875 313.9287]Skew: 0RadialDistortion: [0.1160 -0.0816]TangentialDistortion: [0.0026 -0.0053]ImageSize: [600 800]Camera ExtrinsicsRotationMatrices: [3×3×19 double]TranslationVectors: [19×3 double]Accuracy of EstimationMeanReprojectionError: 0.1345ReprojectionErrors: [54×2×19 double]ReprojectedPoints: [54×2×19 double]Calibration SettingsNumPatterns: 19WorldPoints: [54×2 double]WorldUnits: 'millimeters'EstimateSkew: 0NumRadialDistortionCoefficients: 2EstimateTangentialDistortion: 1
estimationErrors = cameraCalibrationErrors - 属性:IntrinsicsErrors: [1×1 intrinsicsEstimationErrors]ExtrinsicsErrors: [1×1 extrinsicsEstimationErrors]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIT 卸载干净(图文详解)

一、控制面板卸载 右击卸载 等待卸载过程 二、在环境变量&#xff0c;把相关信息删除干净

微服务架构中实体类模块化设计与MyBatis-Plus注解浅析

引言 在微服务开发过程中&#xff0c;为了保证代码的整洁性和可维护性&#xff0c;我们通常会将VO&#xff08;视图值对象&#xff09;、DTO&#xff08;数据传输对象&#xff09;、DO&#xff08;领域对象&#xff09;等实体类独立组织成一个API模块。这样做的目的是实现代码…

官网:随便搞个?那不如不搞,搞不好就给公司减分了。

官网建设确实需要认真对待&#xff0c;不能随便搞。一个粗制滥造的官网可能会给公司带来负面影响&#xff0c;降低品牌形象和用户体验。以下是一些官网建设的重要原则&#xff1a; 专业性&#xff1a;官网应该展示公司的专业性和专业知识。它应该以专业的设计、内容和功能来展示…

【电路笔记】-NPN晶体管

NPN晶体管 文章目录 NPN晶体管1、概述2、双极NPN晶体管配置3、NPN晶体管中的α和β关系4、示例5、共发射极配置1、概述 NPN 晶体管是三端三层器件,可用作放大器或电子开关。 在前面的文章中,我们看到标准双极晶体管或 BJT 有两种基本形式。 NPN(负-正-负)配置和PNP(正-负…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…

spring-jpa

一、介绍 1.1ORM 1.2 Java Persistence API 放在javaee版本 优点 支持持久化复杂的Java对象&#xff0c;简化Java应用的对象持久化开发支持使用JPQL语言进行复杂的数据查询使用简单&#xff0c;支持使用注解定义对象关系表之间的映射规范标准化&#xff0c;由Java官 方统一规…

一个系列很多样式的wordpress外贸建站模板

菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…

如何将 ONLYOFFICE 协作空间部署到 Kubernetes / OpenShift 集群中

需要 ONLYOFFICE 协作空间的可扩展实例吗&#xff1f;使用 Helm 轻松将其安装到 Kubernetes 或 OpenShift 集群中。阅读本文了解详情。 ONLYOFFICE 协作空间是什么 ONLYOFFICE 协作空间是一个协同办公平台&#xff0c;能够帮助用户更好地与客户、业务合作伙伴、承包商及第三方…

响应式编程五股票订阅系统实现

响应式编程五 使用StepVerifier测试响应式流StepVerifier要点 使用StepVerifier进行高级测试股票订阅系统数据库表 使用StepVerifier测试响应式流 出于测试目的&#xff0c;Reactor 提供了额外的 reactor-test 模块&#xff0c;该模块提供了 StepVerifier。StepVerifier 提供了…

Easticsearch性能优化之索引优化

Easticsearch性能优化之索引优化 一、合理的索引设计二、合理的分片和副本三、合理的索引设置 对于性能优化&#xff0c;Elasticsearch&#xff08;以下简称ES&#xff09;的索引优化是提高性能的关键因素之一。合理的设计索引&#xff0c;合理的分片和副本以及合理的缓存设置等…

信号处理--卷积残差网络实现单通道脑电的睡眠分期监测

目录 背景 亮点 环境配置 数据 方法 结果 代码获取 参考文献 背景 人类大约花三分之一的时间睡觉&#xff0c;这使得监视睡眠成为幸福感的组成部分。 在本文中&#xff0c;提出了用于端到端睡眠阶段的34层深残留的Convnet架构 亮点 使用深度1D CNN残差架构&#xff0…

Python数据处理实战(4)-上万行log数据提取并作图进阶版

系列文章&#xff1a; 0、基本常用功能及其操作 1&#xff0c;20G文件&#xff0c;分类&#xff0c;放入不同文件&#xff0c;每个单独处理 2&#xff0c;数据的归类并处理 3&#xff0c;txt文件指定的数据处理并可视化作图 4&#xff0c;上万行log数据提取并作图进阶版&a…

一款非常适合老中医用的《书剑中医电子处方软件简明版》

上了年纪的老中医&#xff0c;虽然经验丰富&#xff0c;但是电脑的基础都比较差&#xff0c;而开处方的软件通常又设计的太复杂&#xff0c;想用电脑开处方就非常困难&#xff0c;所以只好坚持手写开处方。最近&#xff0c;小编找到了一款非常简单的《书剑中医电子处方软件简明…

【设计数据密集型应用】复制

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;阿里淘天Java开发工程师&#xff0c;CSDN博客专家&#x1f4d5;系列专栏&#xff1a;Spring源码、Netty源码、Kafka源码、JUC源码、dubbo源码系列&#x1f525;如果感觉博主的文章还不错的话…

Liinux——(网络)socket编程

预备知识 源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪个进程来处理;IP地址 端口号能…

tomcat搭建个人博客 实现动静分离

jar包相关 .war&#xff1a;WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar&#xff1a;EJB类文件的打包压缩类zip格式文件&#xff0c;,包括很多的class文件, 网景公司发明 .rar&#xff1a;资源适配器类打包文件&#xff0c;目前已不常…

[数据结构]OJ用队列实现栈

225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 官方题解&#xff1a;https://leetcode.cn/problems/implement-stack-using-queues/solutions/432204/yong-dui-lie-shi-xian-zhan-by-leetcode-solution/ 首先我们要知道 栈是一种后进先出的数据结构&#xff0c…

艺术与科技的结合,AI绘画图生图怎么样?

AI绘画图生图是指通过人工智能技术生成的具有艺术价值的图像。它可以根据用户提供的参考图像或描述&#xff0c;自动生成具有艺术风格的新图像。这些图像可以是风景、人物、抽象画等各种形式。那么ai绘画图生图到底怎么样&#xff1f; AI绘画图生图的优点在于它可以快速、高效地…

基于springboot+vue的高校教师电子名片系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

ANTLR4规则解析生成器(三):遍历语法分析树

文章目录 1 词法分析2 语法分析3 遍历语法分析树3.1 Listener3.2 Visitor 4 总结 1 词法分析 词法分析就是对给定的字符串进行分割&#xff0c;提取出其中的单词。 在antlr4中&#xff0c;词法规则的名称的首字母需要大写&#xff0c;右侧必须是终结符&#xff0c;通常将词法…