三维重建学习之旅(一)

2024-03-26 18:20
文章标签 学习 之旅 三维重建

本文主要是介绍三维重建学习之旅(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

          笔者本身对三维比较感兴趣,无意中在学校中接触到了三维重建,因此在师姐和师兄的指导下,从0开始学习三维重建,越往里面学越感觉到里面的东西很多,在这里我只介绍我自己在三维重建过程中用到的方法、工具和一些算法、参考的博客、论文,其中的很多东西并不是重建中最佳的选择(但每一件我都亲身试验和深入了解过),我在学习中得到的每一点进步都是在前人无私的分享中获得的,因此写此博客的目的也是想将这种分享的精神延续下去。

        我都被自己高大上的言语打动了,不过读者也不要期望太多微笑,本人只是一个不知名大学的在校大学生,水平很有限,接触的东西很有限,阐述过程中也一定会有错误,请大家指正,共同进步。。。。。废话太多了。



1、什么是三维重建?

三维重建 ,英文术语名称是3D Reconstruction.

         顾名思义,三维重建是将三维的物体在虚拟世界中重建出来,通俗点说,我们做的就是照相机的逆操作(照相机是将现实中的物体呈现在二维图片中,而三维重建是将二维图片中的信息在三维虚拟空间中显现)

         如今二维的东西已经不能满足于人们对事物的感知,什么AR、VR炒得很火热,我们不能断定以后的世界将会充满虚拟现实,但我们能肯定的是人类对三维的好奇是不会减少的。

2、三维重建的步骤?

在学习三维重建前,我们可以先大体上了解一下我们在此过程中需要做些什么。所以了解三维重建的一般步骤必不可少,这样我们在做的时候才知道我们为什么要做这个?


(1) 图像获取:
           在进行图像处理之前,先要用摄像机获取三维物体的二维图像。光照条件、相机的几何特性等对后续的图像处理造成很大的影响。

(2)摄像机标定:
          通过摄像机标定来建立有效的成像模型, 求解出摄像机的内外参数,这样就可以结合图像的匹配结果得到空间中的三维点坐标,从而达到进行三维重建的目的。

(3)特征提取:
          特征主要包括特征点、特征线和区域。大多数情况下都是以特征点为匹配基元,特征点以何种形式提取与用何种匹配策略紧密联系。因此在进行特征点的提取时需要先确定用哪种匹配方法。

特征点提取算法可以总结为:
           基于方向导数的方法,基于图像亮度对比关系的方法,基于数学形态学的方法三种。
(4)立体匹配:
          立体匹配是指根据所提取的特征来建立图像对之间的一种对应关系,也就是将同一物理空间点在两幅不同图像中的成像点进行一一对应起来。在进行匹配时要注意场景中一些因素的干扰,比如光照条件、噪声干扰、景物几何形状畸变、表面物理特性以及摄像机机特性等诸多变化因素。

(5)三维重建:
          有了比较精确的匹配结果,结合摄像机标定的内外参数,就可以恢复出三维场景信息。由于三维重建精度受匹配精度,摄像机的内外参数误差等因素的影响,因此首先需要做好前面几个步骤的工作,使得各个环节的精度高,误差小,这样才能设计出一个比较精确的立体视觉系统。

上述三维重建的步骤是从百度百科中copy过来的,比较详细地介绍了三维重建的一般过程,笔者也是这样一步步学习的。


3、笔者用到的平台和工具

vs2013+opencv2.4.9

因为opencv 3.0后很多函数发生了一些变化,现在网上的很多资料都是基于opencv3.0以前的版本,所以安装2.0以后的版本便于参考和学习。

4、vs2013+opencv.4.9环境配置

具体参考:http://jingyan.baidu.com/article/75ab0bcbee4b47d6864db2fc.html

按照上述步骤将环境配置完成以后,可以运行以下代码验证是否配置成功:

       

#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(){Mat srcImage1= imread("1.jpg",1);//该图片必须在工程目录下//如果读入图像失败if(!srcImage1.data){printf("error");return false;}//显示图像,在哪个个窗口显示namedWindow("image", CV_NORMAL);//此函数以后会很有用,CV_NORMAL保证输出的图片可拉伸imshow("image", srcImage1); //void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE)//用来创建窗口的函数//此函数等待按键,按键盘任意键就返回waitKey();return 0;}

5、学习工程中经常访问的网站和参考书籍

作为开源的计算机视觉库,opencv提供了很多对图像处理的函数,因此对opencv的操作必不可少(相关资料):

《learning opencv》是很经典的一本书

  opencv中文论坛

http://blog.csdn.net/chenyusiyuan/article/details/5072597    邹老师的opencv学习笔记,对学习opencv很有帮助

http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/calib3d/doc/calib3d.html  opencv相关函数的帮助文档

另外国内现在以三维重建为题材的论文很多,可以到中国知网等搜索阅读。


路漫漫其修远兮。。。共勉



       




          

这篇关于三维重建学习之旅(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849416

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件