双目视觉实战--单视图测量方法

目录

一.简介

二、2D变换

1. 等距变换(欧式变换)

2. 相似变换

3. 仿射变换

4. 射影变换(透视变换)

5. 结论

三、影消点与影消线

1. 平面上的线

2. 直线的交点

3. 2D无穷远点

4. 无穷远直线

5. 无穷远点的透视变换与仿射变换

6. 无穷远线的透视变换与仿射变换

7. 空间中的面和直线

8. 三维空间中的无穷远点(空间中平行线的交点)

9. 影消点

10. 影消线(视平线)

11. 无穷远平面

12. 两组平行线的夹角和影消点的关系

三、单视图重构

1. 单视图标定

2. 单视图重构


一.简介

双目视觉是利用两个摄像头或者图像传感器来模拟人类双眼之间的距离差异(即视差)而实现对物体深度信息的获取和三维立体重建。通过计算两个视角下的物体位置差异,可以得出物体相对于相机的距离,进而实现深度估计和三维重建。在机器视觉、机器人、虚拟现实、增强现实等领域有广泛应用。

单视图测量是指利用一张图像对其中物体的几何尺寸进行估计的方法。它常用于工程、制造、建筑等领域中对物体尺寸和形状进行快速测量和分析。

单视图测量通常涉及以下步骤:

  1. 选择测量对象和拍摄一张图像:从需要测量的物体中选择需要测量的特征,并拍摄一张包含这些特征的图像。

  2. 估计物体尺寸:使用现有的相机参数和基本几何知识(如三角测量、比例关系等)来推断图像中物体的几何尺寸。也可以使用相对高级的计算机视觉技术(如结构光、影像匹配等)来提高测量精度和效率。

  3. 验证测量结果:根据实际测量需求,对测量结果进行验证和校准,例如与现场实际测量值进行比较,或者使用多个视角的测量结果进行融合和校正。

单视图测量的优点在于其简单、直观,不需要额外的传感器和测量设备。但是,由于只利用一张图像进行估计,存在一定的误差和不确定性,尤其是物体形状和光照变化较大时。因此,在实际应用中,通常需要结合其他测量方法和技术来提高精度和可靠性。

二、2D变换

1. 等距变换(欧式变换)

等距变换(Isometric Transformation),也被称为刚体变换(Rigid Transformation),是指在二维或三维空间中保持物体的形状、大小和长度不变的变换。

等距变换包括平移(Translation)、旋转(Rotation)和镜像(Reflection)三种基本操作。平移是沿着某个方向将物体整体移动一定距离,旋转是围绕某个点进行旋转角度的变换,而镜像则是通过翻转物体使其对称。

在二维空间中,等距变换可以表示为:

平移变换:

[x']   [1 0 tx] [x]
[y'] = [0 1 ty] [y]

旋转变换:

[x']   [cosθ -sinθ] [x]
[y'] = [sinθ cosθ]  [y]

镜像变换:

  • 对x轴镜像:
[x']   [1  0] [x]
[y'] = [0 -1] [y]
  • 对y轴镜像:
[x']   [-1 0] [x]
[y'] = [0  1] [y]
  • 对原点镜像:
[x']   [-1  0] [x]
[y'] = [ 0 -1] [y]

在三维空间中,等距变换的表示方式类似,只是需要增加更多的维度和参数来描述物体的移动、旋转和镜像操作。

特点:

  • 不变量:长度、面积
  • 3个自由度
  • 适合描述刚性物体的运动

2. 相似变换

相似变换(Similarity Transformation)是指保持物体形状和比例关系的变换,包括平移、旋转和缩放这三种基本操作。

在二维空间中,相似变换可以表示为:

平移变换:

[x']   [1 0 tx] [x]
[y'] = [0 1 ty] [y]

旋转变换:

[x']   [cosθ -sinθ] [x]
[y'] = [sinθ cosθ]  [y]

缩放变换:

[x']   [s 0] [x]
[y'] = [0 s] [y]

其中,(x, y) 是原始点的坐标,(x', y') 是经过相似变换后得到的新点的坐标,(tx, ty) 是平移的向量,θ 是旋转角度,s 是缩放因子。

相似变换不改变物体的形状和比例关系,只是对物体进行位置的移动、旋转和缩放。它们都是线性变换,保持了直线的性质,但不一定保持角度、曲率等其他几何性质。

特点:

  • 不变量:长度的比值、角度
  • 4个自由度

3. 仿射变换

仿射变换(Affine Transformation)是指将一个点或物体通过线性变换和平移变换映射到另一个空间中的变换。它可以保持物体的平行性、直线性和比例关系,但不一定保持物体的角度和曲率。

仿射变换可以用线性代数的矩阵运算来表示,通常使用一个2x2矩阵表示旋转和缩放的部分,再加上一个2x1的平移向量。在二维平面上,仿射变换可以用如下矩阵形式表示:

[x']   [a b] [x]   [tx]
[y'] = [c d] [y] + [ty]

其中 (x, y) 是原始点的坐标,(x', y') 是经过仿射变换后得到的新点的坐标,(a, b, c, d) 是旋转和缩放的参数,(tx, ty) 是平移的向量。

仿射变换在计算机视觉和图像处理中有广泛的应用,例如图像的旋转、放缩、平移、翻转等操作都可以通过仿射变换实现。此外,仿射变换还可以用于图像配准、图像校正、特征对齐、人脸识别等任务中。

值得注意的是,仿射变换是一种线性变换,它保持直线的性质,但不能保持曲线。如果需要处理非线性变换,例如透视投影,就需要使用更为复杂的射影变换(Projective Transformation)了。

特点:

  • 不变量:平行线、面积的比值
  • 不能保持原有线之间的夹角关系
  • 6个自由度

4. 射影变换(透视变换)

射影变换(Projective Transformation)是指将一个空间中的点或物体经过投影摄像机(perspective camera)或透视图(perspective view)的映射投影到另一个平面或空间中的变换。它通常可以用矩阵来表示,因此也被称为齐次坐标变换(Homogeneous Coordinates Transformation)。

射影变换是一种非线性变换,它可以用一个3x3的矩阵表示,并且由于其具有旋转、平移、缩放和投影等变换效果,因此它可以完成更为复杂的几何变换任务。在计算机视觉中,最常用的射影变换是针孔相机模型(Pinhole Camera Model)下的投影变换,该模型假设相机与场景之间的关系是透视投影。而在图像处理中,射影变换可以被用来实现各种图像的校正和纠偏,例如透视失真纠正、倾斜校正等。

特点:

  • 不变量:共线性、四共线点的交比
  • 不能保持原有平行关系
  • 8个自由度

5. 结论

  • 欧式变换相似变换的特例
  • 相似变换仿射变换的特例
  • 仿射变换透视变换的特例

三、影消点与影消线

1. 平面上的线

2. 直线的交点

3. 2D无穷远点

4. 无穷远直线

无穷远线是无穷远点的几何,也是平面上线的“方向”的集合。

5. 无穷远点的透视变换与仿射变换

        无穷远点经透视变换不是无穷远点

        无穷远点经仿射变换仍是无穷远点

6. 无穷远线的透视变换与仿射变换

        无穷远线经透视变换不是无穷远线

        无穷远线经仿射变换仍是无穷远线

7. 空间中的面和直线

空间中的直线定义为两平面的交线。一般用来描述直线的方向。

8. 三维空间中的无穷远点(空间中平行线的交点)

        空间中平行线的交点

9. 影消点

定义:无穷远点在图像平面上的投影点

设空间中直线方向为

        则影消点和直线方向满足以下关系:

10. 影消线(视平线)

影消线是空间上同一平面的多个无穷远点经透视变换得到的影消点的集合,也是空间上无穷远线经透视变换得到的平面直线。

        影消线和无穷远直线的关系:

影消线和平面法向量之间的关系:

11. 无穷远平面

        平行平面在无穷远处相交于一条公共线,称为无穷远直线。

        两条或多条无穷远直线的集合定义为无穷远平面

12. 两组平行线的夹角和影消点的关系


        由影消点和直线方向的关系,

        可以得到空间中两组平行线的夹角和影消点, 的关系:

此外,有以下性质:

应用:

  • 估计相机参数(单视图标定)
  • 恢复三维场景结构

三、单视图重构

1. 单视图标定

选取三个互相垂直的平面,分别找出三个平面上的影消点。可以列出下面三个方程:
        有5个自由度,但只能列出三个方程。若假定零倾斜、正方形像素,则,即只剩下三个自由度。这样就可以根据三个影消点求解出相机内参数矩阵。


2. 单视图重构

可以由两个影消点画出这一平面的影消线,根据之前求出的内参数矩阵/(K/),即可得到这一平面的法向量:
        同理可以求出另外两个平面的法向量。根据三个平面的方程,即可重构出画面。

注意:

场景的实际比例无法恢复;
需要手动选择影消点和影消线;
需要场景的先验信息,如点对应的关系,线、面几何信息等等。
单幅视图2D到3D的映射具有多义性
 

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

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

相关文章

【01】LVGL-CodeBlock模拟器安装 | LVGL工程下载 | PC端模拟LVGL步骤

LVGL模拟器 1.LVGL模拟器介绍2.Windows环境搭建CodeBlock及获取LVGL工程3.PC端模拟LVGL4.总结 1.LVGL模拟器介绍 LVGL模拟器:使用PC端软件模拟LVGL运行,而不需要任何嵌入式硬件。优点:便于学习、跨平台协同开发 2.Windows环境搭建CodeBlock及…

【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能

[2023-10-19]代码已更新,完善了单元格宽度不足时省略号的显示问题。 [2023-10-18]代码已更新,追加单元格的文本对齐功能(使用成员函数QStandardItem.setTextAlignment设置单元格的Align。 主打一个 折磨 坑多 陪伴。代码为Python,C的就自己逐…

Python万圣节蝙蝠

目录 系列文章 前言 蝙蝠 程序设计 程序分析 运行结果 尾声 系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want5…

云务器迁移(腾讯云>华为云)

自己平时除了写些bug外还喜欢玩玩服务器,这不前几年买了一个域名,当时服务器买的是阿里云的,想着域名备案挺麻烦的就一直用着,只是在服务器到期后会重新购买其他运营商的(关键是续不起🤫) 这不最…

C/C++ 快速入门

参考:https://blog.csdn.net/gao_zhennan/article/details/128769439 1 下载Visual Studio Code并安装中文插件,此处不再叙述 2 插件安装C/C插件 3 使用快捷键【Ctr ~】打打开终端 验证并未安装编译器 4 我们即将使用【MinGW-64】做为编译器 https:…

程序环境和预处理

导言: 在编写代码的过程中,我们一般都是在一些图形化软件的编译器中实现,编译器帮我们实现了很多操作,这里就一些简单的过程进行说明。本文主要阐述了c语言程序的编译链接以及一些预处理知识,和宏定义的使用。 目录 …

IDEA提高工作效率的实用技巧

IDEA是一款备受开发者喜爱的集成开发环境,它提供了许多实用的功能,可以帮助我们更快速、更高效地编写代码。本文将介绍一些IDEA的使用技巧提高工作效率的实用技巧。 验证正则表达式 要验证编写的正则表达式是否正确,只需将光标放在要检查的…

MongoDB 未授权访问漏洞

简介 MongoDB是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,它的特点是高性能、易部署、易使用,存储数据非常方便,默认情况下是没有认证的这就导致不熟悉它的研发人员部署后没有做访问控制导致…

C++项目实战——基于多设计模式下的同步异步日志系统-⑩-异步缓冲区类与异步工作器类设计

文章目录 专栏导读异步缓冲区设计思想异步缓冲区类设计异步工作器类设计异步日志器设计异步缓冲区类整理异步工作器类整理 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿…

LeetCode算法栈—有效的括号

目录 有效的括号 用到的数据结构: 位运算、Map 和 Stack Stack 常用的函数: 题解: 代码: 运行结果; 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符…

模拟IIC通讯协议(stm32)(硬件iic后面在补)

一、IIC基础知识总结。 1、IIC通讯需要两条线就可以,SCL、SDA。 2、IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率. 3、IIC的延时函数可以使用延时函数,延时函数一般使用系统滴答时…

20款VS Code实用插件推荐

前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

Fast DDS之Subscriber

目录 SubscriberSubscriberQosSubscriberListener创建Subscriber DataReaderSampleInfo读取数据 Subscriber扮演容器的角色,里面可以有很多DataReaders,它们使用Subscriber的同一份SubscriberQos配置。Subscriber可以承载不同Topic和数据类型的DataReade…

【QT】QTreeWidget

新建项目 第一步:设置头标签 第二步:设置item 第三步:创建子item,挂载在顶层item下 完整代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::W…

C++项目——云备份-①-项目介绍环境搭建

文章目录 专栏导读1.什么是云备份2.实现目标3.服务端程序负责功能4.服务端功能模块划分5.客户端程序负责功能6.客户端功能模块划分开发环境环境搭建1. gcc 升级7.3版本2.安装 jsoncpp 库3.下载bundle数据压缩库4.下载 httplib 库 专栏导读 🌸作者简介:花…

babel6使用ES2020最新js语法

babel6使用ES2020最新js语法 Babel 6 原本是不支持 ES2020 语法,因为它是在 Babel 7 中引入的。如果您想使用 ES2020 语法,您需要将 Babel 6 升级到 Babel 7 或更高版本(推荐),当然也可以在bebel6中安装支持某个语法的plugin,比如你想使用 ES2020 中的可…

Linux程序调试器——gdb的使用

gdb的概述 GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的…

完美解决 在将最终稿件上传到 IEEE PDF eXpress进行格式检查是出现“font not embedded“的问题 (不会出现自动压缩图像的现象)

最近中了一篇IEEE的论文,在校稿阶段,final paper是需要通过IEEE PDF eXpress网站的格式检查,然后出现一下问题: Errors: Font TimesNewRomanPS-BoldMT, TimesNewRomanPS-ItalicMT, TimesNewRomanPSMT is not embedded 用人话说就…

模式植物GO背景基因集制作

一边学习,一边总结,一边分享! 写在前面 关于GO背景基因集文件的制作,我们在很早以前也发过。近两天,自己在分析时候,也是被搞了头疼。想重新制作一份GO背景基因集,进行富集分析。但是结果&…

JAVAEE初阶相关内容第十五弹--网络編程

写在前 简单描述一下关于路由器的三层转发和交换机的二层转发。 路由器是三层转发-->在网络层转发。【需要解析出IP协议中的源IP、目的IP来规划路径】 交换机是二层转发-->在数据链路层转发。【只需要关注下一步发展到哪个相邻的设备上,不需要IP地址&#…