位置: IT常识 - 正文

三维重建(知识点详细解读、主要流程)(三维重建是啥意思)

编辑:rootadmin
三维重建(知识点详细解读、主要流程) 基于本人大创项目所学习三维建模过程的笔记。

推荐整理分享三维重建(知识点详细解读、主要流程)(三维重建是啥意思),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:三维重建技术 各种方法简介,三维重建的四种方法,三维重建的主要步骤,三维重建的主要步骤,三维重建是什么?,三维重建的四种常用方法,三维重建知识总结,三维重建的四种方法,内容如对您有帮助,希望把文章链接给更多的朋友!

1.概念:三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。

2.三维重建的分类: 根据采集设备是否主动发射测量信号,分为两类:基于主动视觉理论和基于被动视觉的三维重建方法。 主动视觉三维重建方法:主要包括结构光法和激光扫描法。 被动视觉三维重建方法:被动视觉只使用摄像机采集三维场景得到其投影的二维图像,根据图像的纹理分布等信息恢复深度信息,进而实现三维重建。

3.常见的三维重建表达方式 常规的3D shape representation有以下四种:深度图(depth)、点云(point cloud)、体素(voxel)、网格(mesh)。 深度图 深度图其每个像素值代表的是物体到相机xy平面的距离,单位为 mm。

体素 体素是三维空间中的一个有大小的点,一个小方块,相当于是三维空间种的像素。

点云 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。在我看来点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。万物皆点云,获取方式可通过三维激光扫描等。

用三角网格重建 三角网格就是全部由三角形组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。任意多边形网格都能转换成三角网格。 三角网格需要存储三类信息:

顶点:每个三角形都有三个顶点,各顶点都有可能和其他三角形共享。 .

边:连接两个顶点的边,每个三角形有三条边。

面:每个三角形对应一个面,我们可以用顶点或边列表表示面。

三角网格

4.主要内容:在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。

三维重建(知识点详细解读、主要流程)(三维重建是啥意思)

5.主要步骤: (1) 图像获取:在进行图像处理之前,先要用摄像机获取三维物体的二维图像。光照条件、相机的几何特性等对后续的图像处理造成很大的影响。 (2)摄像机标定:利用摄像机所拍摄到的图像来还原空间中的物体。在这里,不妨假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系:[像]=M[物],这里,矩阵M可以看成是摄像机成像的几何模型。 M中的参数就是摄像机参数。通常,这些参数是要通过实验与计算来得到的。这个求解参数的过程就称为摄像机标定。 (3)特征提取:特征主要包括特征点、特征线和区域。大多数情况下都是以特征点为匹配基元,特征点以何种形式提取与用何种匹配策略紧密联系。因此在进行特征点的提取时需要先确定用哪种匹配方法。特征点提取算法可以总结为:基于方向导数的方法,基于图像亮度对比关系的方法,基于数学形态学的方法三种。 (4)立体匹配:立体匹配是指根据所提取的特征来建立图像对之间的一种对应关系,也就是将同一物理空间点在两幅不同图像中的成像点进行一一对应起来。在进行匹配时要注意场景中一些因素的干扰,比如光照条件、噪声干扰、景物几何形状畸变、表面物理特性以及摄像机机特性等诸多变化因素。 (5)三维重建:有了比较精确的匹配结果,结合摄像机标定的内外参数,就可以恢复出三维场景信息。由于三维重建精度受匹配精度,摄像机的内外参数误差等因素的影响,因此首先需要做好前面几个步骤的工作,使得各个环节的精度高,误差小,这样才能设计出一个比较精确的立体视觉系统。

6.具体操作(对应上述步骤) 首先在上述几种常见表达方式中,我们选择点云,所以以下具体操作步骤是以点云为基本表达方式来展开细说。 (1)图像获取:工业相机与民用相机相比,采集的图像更加清晰、数据传输更加迅速以及稳定、可以适应更多的非常规条件。因此本设计选择海康威视公司型号为MV-CA013-20GC的CMOS工业相机。

表2.2 MV-CA013-20GC的主要参数

参数类型参数规格分辨率1280×1024最大帧率90 fps数据接口GigE外形尺寸29 mm × 29 mm × 42 mmIP防护等级IP30传感器类型CMOS工作温度0℃~ 50℃湿度20% ~ 80%RH 无冷凝

使用三台相机,以待测物为中心,每台间隔 120°放置,即可以采集到环待测物的3张图片。便于对待测物的下一步研究,但是图片需要同时采集,因此本设计对于同步的要求极高。 图3.1 整体系统构建图

(2)摄像机标定:相机标定即根据标定板,拍摄相应的图像,建立图像中像素位置与场景点位置之间的函数关系,根据相机成像模型,由匹配点在图像中的坐标与场景中的坐标的对应关系,求解相机的内部参数和外部参数。 黑白格标定板 首先我们先打印一张黑白格标定板固定于平面上,由于我们使用多个相机,因此需要对各个相机都进行标定。以各个相机从不同的角度拍摄若干张标定板的图像,将标定图像导入到程序中,检测标定图像中的特征点,然后求解理想无畸变情况下的相机的内部参数和外部参数,并用极大似然估计来提升精度。 这之后需要应用最小二乘法来求出实际的径向畸变系数,接着再次用极大似然估计法,综合内部参数,外部参数及畸变参数,来优化估计精度,最后得出相机的内部参数、外部参数及畸变参数。

(3)特征提取:对比ORB、SURF、SIFT三种算法 计算速度: ORB>>SURF>>SIFT(各差一个量级) 旋转鲁棒性: SURF>ORB~SIFT(表示差不多) 模糊鲁棒性: SURF>ORB~SIFT 尺度变换鲁棒性: SURF>SIFT>ORB(ORB并不具备尺度变换性) 较SIFT计算量小,耗时短,具有旋转不变性、尺度不变性,鲁棒性较好。我们选择SURF算法。

Python SURF算法实现: 下面展示一些 内联代码片。

// An highlighted blockdef surf(filename): img = cv2.imread(filename) # 读取文件 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转化为灰度图 sift = cv2.xfeatures2d_SURF.create() keyPoint, descriptor = sift.detectAndCompute(img, None) # 特征提取得到关键点以及对应的描述符(特征向量) return img, keyPoint, descriptor

(4)特征匹配 特征匹配主要是计算两幅图像中特征描述子的匹配关系。需要计算两个描述符之间的距离,这样他们的差异就被转换成一个单一的数字,我们可以用它作为一个简单的相似度量,如下图:

匹配策略

a.蛮力匹配(Brute Force Matching) 对于第一张图像中给定的关键点,它将获取第二张图像中的每个关键点并计算距离。距离最小的关键点将被视为一对、

b.快速最近邻(FLANN) 2014年,David Lowe和Marius Muja发布了"快速最近邻(fast library for approximate nearest neighbors(FLANN)“)。FLANN训练了一种索引结构,用于遍历使用机器学习概念创建的潜在匹配候选对象。该库构建了非常有效的数据结构(KD树)来搜索匹配对,并避免了穷举法的穷举搜索。因此,速度更快,结果也非常好,但是仍然需要调试匹配参数。 BFMatching和FLANN都接受描述符距离阈值T,该距离阈值T用于将匹配项的数量限制为“好”,并在匹配不对应的情况下丢弃匹配项。相应的“好”对称为"正阳性(TP)”,而错对称为"假阳性(FP)",为T选择合适的值的任务是允许尽可能多的TP匹配,而应尽可能避免FP匹配。尽管在大多数情况下都无法避免FP,但我们可以尽可能的降低FP次数。

有效降低FP的两种策略

a.BFMatching-crossCheck 只要不超过所选阈值T,即使第二图像中不存在关键点,蛮力匹配也将始终返回与关键点的匹配。这不可避免地导致许多错误的匹配。抵消这种情况的一种策略称为交叉检查匹配,它通过两个方向上应用匹配过程并仅保留那些在一个方向上的与在另一个方向上的最佳匹配相同的匹配来工作。交叉检查方法的步骤为: ①对于源图像中的每个描述符,请在参考图像中找到一个或多个最佳匹配。 ②切换源图像和参考图像的顺序。 ③重复步骤1中源图像和参考图像之间的匹配过程。 ④选择其描述符在两个方向上最匹配的那些关键点。 尽管交叉检查匹配会增加处理时间,但通常会消除大量的错误匹配,因此,当精度优于速度时,应始终执行交叉匹配。交叉匹配一般仅仅用于BFMatching。

b.Nearest neighbor distance ratio (NN)/K-nearest-neighbor(KNN) 减少FP数量的另一种非常有效的方法是为每个关键点计算最近邻距离比(nearest neighbor distance ratio)。 KNN与NN的区别在与NN每个特征点只保留一个最好的匹配,而KNN每个特征点保留k个最佳匹配,k一般为2。 主要思想是不要将阈值直接应用于SSD,相反,对于源图像中的每个关键点,两个最佳匹配位于参考图像中,并计算描述符距离之间的比率。然后,将阈值应用于比率,以筛选出模糊匹配。如下图所示:

(5)三维重建:

利用surf算法获得深度图,采用python opencv库完成三维重建点云的重建。

本文链接地址:https://www.jiuchutong.com/zhishi/298510.html 转载请保留说明!

上一篇:文心一格,百度AI作画产品(文心一格百度)

下一篇:基于 IMU 的位姿解算(imu定位)

  • 新浪微博活动需知注意事项(微博搞活动是真的吗)

    新浪微博活动需知注意事项(微博搞活动是真的吗)

  • 不是资源不够就是没创意?Hi现场教你如何做好活动运营(资源不在于多少)

    不是资源不够就是没创意?Hi现场教你如何做好活动运营(资源不在于多少)

  • 荣耀x10max支持nfc功能吗(荣耀x10max支持广电卡吗)

    荣耀x10max支持nfc功能吗(荣耀x10max支持广电卡吗)

  • 苹果7怎样判断音频坏了(苹果7怎样判断是新机)

    苹果7怎样判断音频坏了(苹果7怎样判断是新机)

  • 安卓怎么恢复微信聊天记录(安卓怎么恢复微信聊天记录的内容免费)

    安卓怎么恢复微信聊天记录(安卓怎么恢复微信聊天记录的内容免费)

  • 充电宝鼓起来怎么处理(充电宝鼓起来怎么扔)

    充电宝鼓起来怎么处理(充电宝鼓起来怎么扔)

  • 计算机键盘上的shift键称为(计算机键盘上的[Shit]键称为)

    计算机键盘上的shift键称为(计算机键盘上的[Shit]键称为)

  • win10笔记本声音忽大忽小(win10笔记本声音太小怎么办)

    win10笔记本声音忽大忽小(win10笔记本声音太小怎么办)

  • 重装win7卡在正在启动(重装win7卡在正在启动windows界面很久)

    重装win7卡在正在启动(重装win7卡在正在启动windows界面很久)

  • opporeno长多少厘米(opporeno机长多少厘米)

    opporeno长多少厘米(opporeno机长多少厘米)

  • shift+ctrl是什么

    shift+ctrl是什么

  • vivo手机没电了怎么启用备用电池(vivo手机没电了怎么办瞬间补电)

    vivo手机没电了怎么启用备用电池(vivo手机没电了怎么办瞬间补电)

  • ipad ios9.0什么意思(ipad9.0版本)

    ipad ios9.0什么意思(ipad9.0版本)

  • 苹果定位显示离线是怎么回事(苹果定位显示离线有办法吗)

    苹果定位显示离线是怎么回事(苹果定位显示离线有办法吗)

  • 怎么关闭软件自动更新(怎么关闭软件自启动)

    怎么关闭软件自动更新(怎么关闭软件自启动)

  • 手机卡停机多久会被注销(手机卡停机多久自动注销)

    手机卡停机多久会被注销(手机卡停机多久自动注销)

  • 京东评价为啥京豆收回(京东评价为啥京豆不能用)

    京东评价为啥京豆收回(京东评价为啥京豆不能用)

  • 抖音小店和橱窗的区别(抖音小店和橱窗带货哪个好做)

    抖音小店和橱窗的区别(抖音小店和橱窗带货哪个好做)

  • applewatch能放音乐吗(apple watch 放音乐)

    applewatch能放音乐吗(apple watch 放音乐)

  • 模拟示波器怎么调正弦波(模拟示波器怎么读数)

    模拟示波器怎么调正弦波(模拟示波器怎么读数)

  • 打印机碳粉盒怎么打开(打印机碳粉盒怎么安装)

    打印机碳粉盒怎么打开(打印机碳粉盒怎么安装)

  • 酷猫vip怎么取消连续包月(开通了酷猫vip会员怎么取消?)

    酷猫vip怎么取消连续包月(开通了酷猫vip会员怎么取消?)

  • rx580配什么主板(rx580配什么主板和cpu发挥最大性能)

    rx580配什么主板(rx580配什么主板和cpu发挥最大性能)

  • 360浏览器如何卸载(360浏览器如何卸载插件)

    360浏览器如何卸载(360浏览器如何卸载插件)

  • efi bios设置u盘启动图文教程(efi bios u盘启动)

    efi bios设置u盘启动图文教程(efi bios u盘启动)

  • uni-app 自定义下拉框(uniapp自定义下拉刷新上拉加载)

    uni-app 自定义下拉框(uniapp自定义下拉刷新上拉加载)

  • Vue实战【后端返回文件流时,前端如何处理并成功下载流文件】(vue的后端)

    Vue实战【后端返回文件流时,前端如何处理并成功下载流文件】(vue的后端)

  • Vue3 + Pinia 持久化存储

    Vue3 + Pinia 持久化存储

  • JS 异步编程方法:6种方案(js异步解决方案)

    JS 异步编程方法:6种方案(js异步解决方案)

  • 设备检验检测
  • 个体户申报重复申报怎么办
  • 销售商品收到的银行本票
  • 补提上一年度的年终奖
  • 员工工作服怎么做分录
  • 增值税税差怎么算
  • 递延所得税转回的会计分录
  • 所得税汇算清缴捐赠支出扣除标准
  • 增值税报表填写说明
  • 没有收入的小规模纳税人可以无票入费用吗?
  • 职工福利费会计核算
  • 建筑企业异地预交税款如何处理
  • 超市购物卡发票可以报销吗
  • 汇兑损益需要缴税吗
  • 小企业无形资产有
  • 计提坏账准备确认的信用减值损失累计金额
  • 应交税费附加税期末有余额吗
  • 年度所得税汇算清缴报告在哪打印
  • 企业自用房要交契税吗
  • 税报错了可以更改吗
  • 医院行业类别怎样填写
  • 红字信息表没有编号
  • 财产保险费计入什么科目
  • 盘盈对应的入账科目
  • 年报弥补以前年度亏损了还需要填107040表吗
  • 个人社保费需要交多少年
  • 审计查出假发票怎么补救
  • 一个网页账号在多个电脑登录
  • 没有开工没有收入用书面语言表达
  • 个人出售普通住房个人所得税
  • 怎么实现增删改查
  • 全额拨款事业单位工资待遇
  • 外包社保会计分录
  • 应收账款转账
  • 在建工程完工后转入哪里
  • PHP:pcntl_getpriority()的用法_PCNTL函数
  • php zmq
  • java deep learning
  • php获取目录所有文件
  • 帮别人开增值税专用发票
  • Smarty实现页面静态化(生成HTML)的方法
  • 企业所得税按季还是按年
  • 金融资产或金融负债满足下列条件之一
  • 进项税额转出会计分录
  • 小企业会计制度和企业会计制度的区别
  • java线程的执行体
  • 以土地使用权投资入股
  • 母公司子公司下面的子公司怎么称呼
  • 销售代销货物会计处理
  • 两个公司发工资公司会发现吗
  • 以红字冲回
  • 法人章和财务章尺寸
  • 实务操作中如何快速记忆
  • 参加会议正常应该交多少钱
  • 怎么建立起来的
  • mysql随机选择
  • windows找不到文件请确定文件名是否正确
  • windows任务管理器打不开
  • win7怎么设置麦克风权限
  • win7连接宽带
  • explorer.exe进程出错
  • win1021年更新
  • 硬盘版win10
  • win10的uwp在哪
  • 批处理有何限制
  • 用python写多线性模型
  • nginx与php
  • javascript的数据类型有哪些?
  • JavaScript中setUTCMilliseconds()方法的使用详解
  • unitytest
  • 简述javascript
  • python tonny
  • 深圳国税电子税务局网上办税服务厅
  • 工商与税务合并了吗
  • 发票怎样上传?
  • 如果快递没有按时发货东西变质怎么办
  • 电子税务局密码能随便告诉别人吗
  • 属于资源税类的税种有哪些
  • 如何代扣个人所得税
  • 车辆报废补贴怎么拿
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设