OpenCV相机标定与3D重建(48)对三台相机进行极线校正(rectification)函数rectify3Collinear()的使用

news2025/1/12 17:45:07
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算3头相机的极线校正变换,其中所有相机头都在同一条直线上。
cv::rectify3Collinear 是 OpenCV 库中的一个函数,用于对三台相机进行极线校正(rectification),假设这三台相机是共线排列的。该函数通常用于多视图几何和立体视觉应用中,以确保来自不同相机的图像可以在同一平面上匹配,从而简化了特征点的对应查找。

函数原型


float cv::rectify3Collinear	
(
	InputArray 	cameraMatrix1,
	InputArray 	distCoeffs1,
	InputArray 	cameraMatrix2,
	InputArray 	distCoeffs2,
	InputArray 	cameraMatrix3,
	InputArray 	distCoeffs3,
	InputArrayOfArrays 	imgpt1,
	InputArrayOfArrays 	imgpt3,
	Size 	imageSize,
	InputArray 	R12,
	InputArray 	T12,
	InputArray 	R13,
	InputArray 	T13,
	OutputArray 	R1,
	OutputArray 	R2,
	OutputArray 	R3,
	OutputArray 	P1,
	OutputArray 	P2,
	OutputArray 	P3,
	OutputArray 	Q,
	double 	alpha,
	Size 	newImgSize,
	Rect * 	roi1,
	Rect * 	roi2,
	int 	flags 
)		

参数

  • 参数cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, cameraMatrix3, distCoeffs3:分别是三台相机的内参矩阵和畸变系数。
  • 参数imgpt1, imgpt3:分别是第一台和第三台相机中的匹配点集。
  • 参数imageSize:输入图像的尺寸。
  • 参数R12, T12, R13, T13:分别是第一到第二台相机和第一到第三台相机之间的相对旋转和平移。
  • 参数R1, R2, R3:输出的三台相机的校正旋转矩阵。
  • 参数P1, P2, P3:输出的三台相机的投影矩阵。
  • 参数Q:输出的4x4 disparity-to-depth映射矩阵,用于从视差图生成深度图。
  • 参数alpha:自由缩放参数,用于控制重投影误差和有效像素数之间的权衡。
  • 参数newImgSize:校正后的图像尺寸。
  • 参数roi1, roi2:输出的感兴趣区域(ROI),分别对应于第一台和第二台相机的有效像素区域。
  • 参数flags:极线校正标志,定义了如何执行校正(例如是否使用零扭曲)。

代码示例

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 假设我们已经有了三台相机的内参矩阵、畸变系数、相对姿态等信息
    Mat cameraMatrix1 = (Mat_<double>(3, 3) << /* ... */);
    Mat distCoeffs1 = (Mat_<double>(5, 1) << /* ... */);
    Mat cameraMatrix2 = (Mat_<double>(3, 3) << /* ... */);
    Mat distCoeffs2 = (Mat_<double>(5, 1) << /* ... */);
    Mat cameraMatrix3 = (Mat_<double>(3, 3) << /* ... */);
    Mat distCoeffs3 = (Mat_<double>(5, 1) << /* ... */);

    vector<Point2f> imgpt1[] = {/* ... */}; // 匹配点集
    vector<Point2f> imgpt3[] = {/* ... */}; // 匹配点集

    Size imageSize(640, 480); // 图像尺寸
    Mat R12 = (Mat_<double>(3, 3) << /* ... */); // 相对旋转
    Mat T12 = (Mat_<double>(3, 1) << /* ... */); // 相对平移
    Mat R13 = (Mat_<double>(3, 3) << /* ... */); // 相对旋转
    Mat T13 = (Mat_<double>(3, 1) << /* ... */); // 相对平移

    Mat R1, R2, R3; // 输出的校正旋转矩阵
    Mat P1, P2, P3; // 输出的投影矩阵
    Mat Q;          // 输出的 disparity-to-depth 映射矩阵
    double alpha = -1; // 自由缩放参数
    Size newImgSize = imageSize; // 校正后的图像尺寸
    Rect roi1, roi2; // 输出的感兴趣区域

    float reprojErr = rectify3Collinear(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2,
                                        cameraMatrix3, distCoeffs3, imgpt1, imgpt3,
                                        imageSize, R12, T12, R13, T13,
                                        R1, R2, R3, P1, P2, P3, Q, alpha, newImgSize, &roi1, &roi2,
                                        CALIB_ZERO_DISPARITY);

    cout << "Reprojection error: " << reprojErr << endl;

    return 0;
}

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

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

相关文章

PHP进阶-在Ubuntu上搭建LAMP环境教程

本文将为您提供一个在Ubuntu服务器上搭建LAMP&#xff08;Linux, Apache, MySQL, PHP&#xff09;环境的完整指南。通过本文&#xff0c;您将学习如何安装和配置Apache、MySQL、PHP&#xff0c;并将您的PHP项目部署到服务器上。本文适用于Ubuntu 20.04及更高版本。 一、系统更新…

【算法】一阶低通滤波

目录 1.背景 2.推导 2.1基础知识 2.2 公式推导 3.截止频率 3.怎么做 4.效果 1.背景 在电机的闭环过程中&#xff0c;无法避开的一点就是电流环&#xff0c;电流环需要采集电流数据&#xff0c;然后闭环输出。在电流环采集的过程中&#xff0c;数据会有很多高频噪声&#xf…

excel VBA 基础教程

这里写目录标题 快捷键选择所有有内容的地方 调试VBA录制宏&#xff0c;打开VBA开发工具录制宏,相当于excel自动写代码&#xff08;两个表格内容完全一致才可以&#xff09; 查看宏代码保持含有宏程序的文件xlsm后缀&#xff08;注意很容易有病毒&#xff09;宏文件安全设置 使…

获取IP地区

包 https://packagist.org/packages/geoip2/geoip2#v3.1.0 用composer加载包 composer require geoip2/geoip2 mmdb下载 https://github.com/P3TERX/GeoLite.mmdb?tabreadme-ov-file

嵌入式系统Linux实时化(二)Xenomai技术框架分析

Xenomai 是 Linux 内核的一个实时开发框架。它希望通过无缝地集成到Linux 环境中来给用户空间应用程序提供全面的、与接口无关的硬实时性能。Xenomai 项目始于2001年8月&#xff0c;作为一个自由软件项目&#xff0c;完全遵守GNU/Linux自由软件协议。2003 年它和RTAI项目合并推…

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像&#xff0c;前几天我使用Docker Desktop环境重新构建了一个…

【LeetCode】:删除回文子数组【困难】

class Solution { public:// 思考:能否用滚动数组进行优化int minimumMoves(vector<int>& arr) {// 定义状态dp[i][j]为i-j的最小步数int n arr.size();vector<vector<int>> dp(n, vector<int>(n, 1e9 7));// 可以把这 1 次理解为一种 最小操作单…

如何理解机器学习中的线性模型 ?

在机器学习中&#xff0c;线性模型是一类重要且基础的模型&#xff0c;它假设目标变量&#xff08;输出&#xff09;是输入变量&#xff08;特征&#xff09;的线性组合。线性模型的核心思想是通过优化模型的参数&#xff0c;使模型能够捕捉输入与输出之间的线性关系。以下是线…

golang常用标准库

输入与输出-fmt包时间与日期-time包命令行参数解析-flag包日志-log包IO操作-os包IO操作-bufio包与ioutil包strconv包模板-template包http包contextjson/xmlreflect反射官方标准库 输入与输出-fmt包 输入与输出 常用输出函数 Print、Printf、Println&#xff1a;直接输出内容 Sp…

STM32 I2C硬件配置库函数

单片机学习&#xff01; 目录 前言 一、I2C_DeInit函数 二、I2C_Init函数 三、I2C_StructInit函数 四、I2C_Cmd函数 五、I2C_GenerateSTART函数 六、I2C_GenerateSTOP函数 七、I2C_AcknowledgeConfig函数 八、I2C_SendData函数 九、I2C_ReceiveData函数 十、I2C_Sen…

sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的详细信息(客户端ip)

文章目录 引言I 基于dm_exec_connections查询客户端ip权限物理联接时间范围dm_exec_connections表see also: 监视SQL Server 内存使用量资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)引言 查询历史数据库客户端ip应用场景: 安全分析缺乏…

plane开源的自托管项目

Plane 是一个开源的自托管项目规划解决方案&#xff0c;专注于问题管理、里程碑跟踪以及产品路线图的设计。作为一款开源软件&#xff0c;Plane 的代码托管在 GitHub 平台上&#xff0c;允许任何人查看和贡献代码。它为用户提供了便捷的项目创建与管理手段&#xff0c;并配备了…

高光谱相机的特点

光谱特性 高光谱分辨率&#xff1a;能将光谱范围分割成极窄的波段&#xff0c;光谱分辨率通常达到纳米级甚至亚纳米级&#xff0c;可精确捕捉到不同物质在细微光谱差异上的特征&#xff0c;比如可以区分不同种类的植被因叶绿素含量等差异而在光谱上的细微变化。 多波段探测&a…

1.两数之和--力扣

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…

yolov5+colab跑起来

教程1.先上传网盘再run 教程2.直接上传解压run 本人过程

el-tree拖拽光标错位问题

背景&#xff1a;el-tree实现的分类树增加拖拽功能后&#xff0c;当分类树由于数量较多产生滚动条&#xff0c;如果分类树已滚动&#xff0c;进行拖拽时会造成光标错位的问题: 原因&#xff1a;el-tree拖拽光标定位的高度并未加上滚动的高度解决&#xff1a;将滚动的样式属性放…

Copula算法原理和R语言股市收益率相依性可视化分析

阅读全文&#xff1a;http://tecdat.cn/?p6193 copula是将多变量分布函数与其边缘分布函数耦合的函数&#xff0c;通常称为边缘。在本视频中&#xff0c;我们通过可视化的方式直观地介绍了Copula函数&#xff0c;并通过R软件应用于金融时间序列数据来理解它&#xff08;点击文…

OpenCV计算机视觉 07 图像的模块匹配

在做目标检测、图像识别时&#xff0c;我们经常用到模板匹配&#xff0c;以确定模板在输入图像中的可能位置 API函数 cv2.matchTemplate(image, templ, method, resultNone, maskNone) 参数含义&#xff1a; image&#xff1a;待搜索图像 templ&#xff1a;模板图像 method&…

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

深入解析 Flink 与 Spark 的性能差异

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…