Calibration相机内参数标定

1.环境依赖

本算法采用张正友相机标定法进行实现,内部对其进行了封装。

环境依赖为 ubuntu20.04 + opencv4.2.0 + yaml-cpp

yaml-cpp安装方式:

(1)git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地

(2)进入下载目录中,mkdir build && cd build #构建build文档

(3)cmake .. #使用cmake构建

(4)sudo make install #安装yaml-cpp

仓库下载:

git clone https://gitee.com/BingbingSuperEffort/calibration.git

2.使用方式

使用cmake构建执行文件

mkdir build && cd build && cmake.. && make

编译的可执行文件为Calibration,使用时运行该文件并配备图片文件夹路径作为参数,该文件夹内部为相机拍摄的不同角度与不同高度的棋盘照片。

使用示例:./Calibration ./test-jpg

3.配置文件

配置文件为config.yaml 内部包含如下配置:

(1)chess_row,chess_col 棋盘格行列个数:该参数表示相机标定使用的黑白棋盘格的行和列上的方格个数,请确保行列正确

(2)square_size 棋盘方格大小:该参数表示每个黑白方格的长度数值

(3)image_path 读取文件路径记录名:该参数为读取的含有棋盘的具体图片的路径名称记录,可以查阅本次标定具体使用了哪些图片,参数以弃用,不在输出路径记录文档。

(4)image_suffix 图片名称后缀:该参数表面在文件夹中查找哪种类型的图片参数,支持jpg与png格式,参数以弃用。内部将直接搜索文件夹中.jpg.png格式的所有图片

(5)camera_matrix_file 输出文件名:该参数指定了yaml格式的输出文件,文件内部包含测定后的内参数的具体数值

(6)output_detail 是否输出更详细的数据参数:默认为false,不输出更详细的参数,设置为true将输出每张图片的像素误差,以及整体误差等详细的参数,会将结果保存到camera_result_detail.txt 文件中

(7)camera_type标定相机的具体类型,CV为普通相机,FISHEYE为鱼眼相机

(8)downsample是否降采样采取角点,处理像素高的照片速度快,像素低可能会检测不到角点,导致评定失败,默认为true

(9)show_draw是否显示角点绘制过程,默认为false,在处理大文件时应当关闭,避免卡死

(10)undistort是否对图像实现畸变矫正,并显示矫正后的效果,默认为false

(11)test_image_path实现畸变矫正的测试图片路径,仅在undistort为true时有效

4.输出文件

image_path.txt 测定的具体图片的名称路径

camera_matrix.yaml 相机内参数fx,fy,cx,cy,畸变系数k1,k2,p1,p2,p3(或者k1,k2,u1,u2),图片长宽。

camera_result_detail.txt 相机测定具体的数值,包含每幅图片的标定误差,总体平均误差,每幅图像的畸变系数。只有在配置文件中设置才会输出该文件。

5.标定流程

6.文件介绍

各个文件简要说明:

main.cpp:主要为接口函数,以及一些接口参数的设置。编译成为可执行文件后,在使用时传入测定图片的文件夹路径

CCalibration类实现摄像机标定功能,calibration.run()执行读取标定板图片、角点检测、亚像素精确化、摄像机标定、计算重投影误差、保存标定参数功能;

CUndistort类实现畸变校正功能,undistort.run()执行读取内部参数、读取畸变图像、畸变校正、显示校正结果功能。执行时默认不进行畸变校正,如需打开请在config.yaml中将undistort参数设置为true。

calibration.h, calibration.cpp:实现摄像机标定,包含CV模型和Fisheye模型。默认为CV模型,如需更换为Fisheye模型,请在config.yaml中将camera_type参数设置为FISHEYE。

undistort.h, undistort.cpp:实现畸变校正,包含CV模型和Fisheye模型。如需更换为Fisheye模型,请在config.yaml中将camera_type参数设置为FISHEYE。

7.使用函数

1.findChessboardCorners()角点提取函数。

函数功能:

该函数的功能就是判断图像内是否包含完整的棋盘图,如果能够检测完全,就把他们的角点坐标按 顺序(逐行,从左到右)记录下来,并返回非0数,否则返回0。 这里对size参数要求非常严格,函数必须检测到相同的size才会返回非0,否则返回0。

函数原型:

bool cv::findChessboardCorners ( InputArray image,
Size patternSize,
OutputArray corners,
int flags = CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE
);

参数介绍:

image输入的棋盘格原图。必须是8位灰度图或者彩色图像

patternSize棋盘格图片的每一行每一列的内角点数

corners输出检测到的角点阵列

flags标志位,默认为0

2.find4QuadCornerSubpix()亚像素角点提取函数

函数功能:

该函数的目的是提高角点检测的精度,特别是当使用亚像素精度进行定位时。在图像中,四角形的角点可能因为各种因素(如图像噪声、模糊等)而不完全清晰。find4QuadCornerSubpix() 函数通过在角点附近进行更细致的搜索,来提高角点的定位精度。

函数原型:

bool cv::find4QuadCornerSubpix(InputArray image, 
InputOutputArray corners, 
Size region_size);

参数介绍:

img输入图片矩阵

corners初始的角点坐标

region_size角点搜索窗口大小

3.drawChessboardCorners()角点绘制函数

函数功能:

该函数的主要作用是帮助用户直观地展示检测到的棋盘格角点位置,以便于调试和验证。

函数原型:

void cv::drawChessboardCorners(InputOutputArray image, 
Size patternSize, 
const Mat& corners, 
bool patternWasFound);

参数介绍:

imagecv::Mat& 类型,这是要在其上绘制角点的输出图像。函数执行后,图像上会显示棋盘格的角点。

patternSizecv::Size& 类型,这是一个 cv::Size 结构,表示棋盘格的内部角点数。

corners const std::vector<cv::Point2f>& 类型,这是一个包含棋盘格角点坐标的向量。这些坐标通过角点检测算法(如 findChessboardCorners())获得。

patternWasFoundbool 类型,一个布尔值,指示棋盘格模式是否被成功检测。如果 true,角点将被绘制;如果 false,角点将不会被绘制。

4.calibrateCamera()相机标定函数

函数功能:

该函数用于相机标定,即确定相机的内参和(可选)外参。相机内参包括焦距、主点坐标和畸变系数,而外参则包括相机相对于某一特定坐标系的位置和旋转

函数原型:

double cv::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)
);

参数介绍:

objectPoints一系列角点的三维坐标。

imagesPoints角点投影到标定图案平面上的二维坐标点。

imageSize图片的尺寸大小,用以初始化相机内参。

cameraMatrix相机的内参矩阵。

distCoeffs相机的畸变参数矩阵,有5个畸变参数:k1,k2,p1,p2,k3

rvecs旋转向量

tvecs平移向量

flags表示标定时采用的算法,默认为0
criteria迭代的终止条件,通常忽略

5.projectPoints()重投影函数

函数功能:

根据相机的内参(焦距和主点坐标)和畸变系数,将三维点转换为图像上的二维点。对计算结果进行评定。

函数原型:

void cv::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray K,
InputArray D,
double alpha = 0,
OutputArray jacobian = noArray()
);

参数介绍:

objectPoints对象点的数组

imagesPoints若干张图片对应的若干的内角点的坐标

rvecs旋转向量

tvecs平移向量

K内参矩阵

D畸变矩阵

alpha偏斜系数

jacobian是否计算雅可比矩阵

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

15- 微分方程

对三角函数不敏感

模块化沙箱:解锁数据防泄密的终极密码

在这个数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;数据泄露的威胁如同暗夜中的幽灵&#xff0c;随时可能侵袭企业的信息安全防线。面对日益复杂的内外部风险&#xff0c;企业亟需一种既高效又灵活的安全解决方案&#xff0c;来保护其核心数据不…

专业PDF编辑工具:Acrobat Pro DC 2024.002.20933绿色版,提升你的工作效率!

软件介绍 Adobe Acrobat Pro DC 2024绿色便携版是一款功能强大的PDF编辑和转换软件&#xff0c;由Adobe公司推出。它是Acrobat XI系列的后续产品&#xff0c;提供了全新的用户界面和增强功能。用户可以借助这款软件将纸质文件转换为可编辑的电子文件&#xff0c;便于传输、签署…

透视矫正插值

https://www.cnblogs.com/straywriter/articles/15889273.html https://www.comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf https://8.136.115.103/perspective-correct-interpolation%E9%80%8F%E8%A7%86%E6%A0%A1%E6%AD%A3%E6%8F%92%E5%80%BC/ 透视矫正…

Postfix+Dovecot+Roundcube开源邮件系统搭建系列4:Dovecot安装配置

1. Dovecot安装 安装Dovecot&#xff1a; yum -y install dovecot dovecot-mysql 启动服务并设置开机自启动&#xff1a; systemctl start dovecot systemctl enable dovecot 2. Dovecot配置 Dovecot配置文件目录&#xff1a;/etc/dovecot&#xff0c;在该目录中dovecot.…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案

LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特&#xff0c;能够同时接入并处理多路设备的视频流&#xff0c;支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样&#xff0c;涵盖了视频直播监控、…

基于STM32的全栈嵌入式解决方案:LoRa、MQTT和阿里云IoT平台构建的智慧农业监控系统(附代码示例)

摘要&#xff1a; 随着科技的进步&#xff0c;物联网技术在农业领域的应用越来越广泛。本文介绍一个基于物联网的智慧农业监控系统&#xff0c;该系统可以实时监测农田的环境数据&#xff0c;并根据数据自动控制灌溉、施肥等操作&#xff0c;提高农业生产效率。 关键词&#x…

微分段Microsegmentation简介

目录 微分段Microsegmentation简介什么是微分段&#xff1f;微分段的防范措施微分段的防护层级 基于网络的微分段微分段基本工作机制微分段的角色VxLAN的额外字段 业务链分组与传输策略场景1&#xff1a;三层报文本地转发场景场景2&#xff1a;三层报文跨设备转发场景 微分段的…

【深度学习】PyTorch框架(5):Transformer和多注意力机制

1、引言 在本文中&#xff0c;我们将探讨近两年来最具影响力的模型架构之一——Transformer模型。自从2017年Vaswani等人发表的论文《注意力是你所需要的全部》以来&#xff0c;Transformer架构在多个领域持续刷新着性能记录&#xff0c;尤其是在自然语言处理&#xff08;NLP&…

python入门课程Pro(1)--数据结构及判断

数据结构及判断 第1课 复杂的多向选择1.if-elif-else2.if嵌套3.练习题&#xff08;1&#xff09;大招来了&#xff08;2&#xff09;奇数还是偶数&#xff08;3&#xff09;简洁代码 第2课 数据与判断小结1.变量2.格式化输出3.逻辑运算-或与非4.判断条件5.练习题&#xff08;1&…

LNK1342中文报错乱码

如图所示&#xff0c;因编译中存在中文而报错“常量中有换行符”或者直接报错LNK1342且中文报错乱码 无论是使用UTF-8还是GBK编译都会报错&#xff0c;并且修改控制台的格式936或65001也无法解决 解决办法&#xff1a;检查你的注册表编辑器 以下位置&#xff0c;如果安装了VS…

Java无模版导出Excel 0基础教程

0 写在前面 经常写数据导出到EXCEL&#xff0c;没有模板的情况下使用POI技术。以此作为记录&#xff0c;以后方便使用。 1 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</v…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进&#xff0c;不再需要default&#xff08;T&#xff09;了 //变量赋值C#7.0 var s "字符串"; s default(s…

鸿蒙基本工程目录

工程级目录 AppScope 中存放应用全局所需要的资源文件。entry 是应用的主模块&#xff0c;存放 HarmonyOS 应用的代码、资源等。oh_modules 是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5 是工程级配置信息&#xff0c;包括签名、产品配置等。hvigorf…

一文带你了解 GB 18030-2022 字符集

GB18030 全称《‌信息技术 中文编码字符集》‌&#xff0c;‌是我国信息技术领域的强制性国家标准之一&#xff0c;是中华人民共和国国家标准所规定的变长多字节字符集&#xff0c;字符以单字节、双字节或四字节编码。 当前执行标准为 GB 18030-2022&#xff0c;于 2023 年 8 月…

Linux·权限与工具(上)

1. shell命令以及运行原理 Linux严格意义上来说是一个操作系统&#xff0c;我们称之为 "核心(kernel)" &#xff0c;但我们一般的用户不呢个直接使用到核心&#xff0c;因为不会用。所以开发者在核心外面封装了一层 "外壳(shell)" 程序&#xff0c;来与核心…

24暑假算法刷题 | Day15 | LeetCode 110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和,222. 完全二叉树的节点个数

目录 110. 平衡二叉树题目描述题解 257. 二叉树的所有路径题目描述题解 404. 左叶子之和题目描述题解 222. 完全二叉树的节点个数题目描述题解 110. 平衡二叉树 点此跳转题目链接 题目描述 给定一个二叉树&#xff0c;判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的…

VMware Vsphere创建虚拟机

作者&#xff1a;红米 一、上传系统镜像 1、打开数据中心 2、新建文件夹&#xff0c;存放镜像 3、点击上传文件按钮 4、找到本地镜像上传 二、安装虚拟机 1、创建虚拟机 2、选择创建类型 3、为虚拟机命名并选择虚拟机安装的所在位置 4、选择计算资源 5、选择存储 6、选择兼容…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…