三维重建 订阅
三维重建的英文术语名称是3D Reconstruction.三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。 展开全文
三维重建的英文术语名称是3D Reconstruction.三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。
信息
领    域
计算机
类    型
数学模型
中文名
三维重建
外文名
3D Reconstruction
三维重建简介
三维重建的英文术语名称是3D Reconstruction.三维重建是指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对其进行处理、操作和分析其性质的基础,也是在计算机中建立表达客观世界的虚拟现实的关键技术。在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。物体三维重建是计算机辅助几何设计(CAGD)、计算机图形学(CG)、计算机动画、计算机视觉、医学图像处理、科学计算和虚拟现实、数字媒体创作等领域的共性科学问题和核心技术。在计算机内生成物体三维表示主要有两类方法。一类是使用几何建模软件通过人机交互生成人为控制下的物体三维几何模型,另一类是通过一定的手段获取真实物体的几何形状。前者实现技术已经十分成熟,现有若干软件支持,比如:3DMAX、Maya、AutoCAD、UG等等,它们一般使用具有数学表达式的曲线曲面表示几何形状。后者一般称为三维重建过程,三维重建是指利用二维投影恢复物体三维信息(形状等)的数学过程和计算机技术,包括数据获取、预处理、点云拼接和特征分析等步骤。
收起全文
精华内容
下载资源
问答
  • 三维重建

    热门讨论 2013-04-27 08:41:04
    三维重建资料收集 VC的许多程序 C++代码 Matlab代码 文章等资料
  • OpenCV实现SfM(二):双目三维重建

    万次阅读 多人点赞 2015-09-02 14:33:18
    使用OpenCV3.0实现双目三维重建,原理清晰,实践有效。

    注意:本文中的代码必须使用OpenCV3.0或以上版本进行编译,因为很多函数是3.0以后才加入的。
    目录:

    文章目录


    #极线约束与本征矩阵

    在三维重建前,我们先研究一下同一点在两个相机中的像的关系。假设在世界坐标系中有一点pp,坐标为XX,它在1相机中的像为x1x_1,在2相机中的像为x2x_2(注意x1x_1x2x_2为齐次坐标,最后一个元素是1),如下图。
    这里写图片描述
    XX到两个相机像面的垂直距离分别为s1s_1s2s_2,且这两个相机具有相同的内参矩阵KK,与世界坐标系之间的变换关系分别为[R1  T1][R_1\ \ T_1][R2  T2][R_2\ \ T_2],那么我们可以得到下面两个等式
    s1x1=K(R1X+T1)s2x2=K(R2X+T2) s_1x_1 = K(R_1X + T_1) \\ s_2x_2 = K(R_2X + T_2)
    由于K是可逆矩阵,两式坐乘K的逆,有
    s1K1x1=R1X+T1s2K1x2=R2X+T2 s_1K^{-1}x_1 = R_1X + T_1 \\ s_2K^{-1}x_2 = R_2X + T_2
    K1x1=x1K^{-1}x_1 = x_1^{'}K1x2=x2K^{-1}x_2 = x_2^{'},则有
    s1x1=R1X+T1s2x2=R2X+T2 s_1x_1^{'} = R_1X + T_1 \\ s_2x_2^{'} = R_2X + T_2
    我们一般称x1x_1^{'}x2x_2^{'}为归一化后的像坐标,它们和图像的大小没有关系,且原点位于图像中心。
    由于世界坐标系可以任意选择,我们将世界坐标系选为第一个相机的相机坐标系,这时R1=I, T1=0R_1 = I,\ T_1 = 0。上式则变为
    s1x1=Xs2x2=R2X+T2 s_1x_1^{'} = X \\ s_2x_2^{'} = R_2X + T_2
    将第一式带入第二式,有
    s2x2=s1R2x1+T2 s_2x_2^{'} = s_1R_2x_1^{'} + T_2
    x2x_2^{'}T2T_2都是三维向量,它们做外积(叉积)之后得到另外一个三维向量T2^x2\widehat{T_2}x_2^{'}(其中T2^\widehat{T_2}为外积的矩阵形式,T2^x2\widehat{T_2}x_2^{'}代表T2×x2T_2\times x_2^{'}),且该向量垂直于x2x_2^{'}T2T_2,再用该向量对等式两边做内积,有
    0=s1(T2^x2)TR2x1 0 = s_1(\widehat{T_2}x_2^{'})^TR_2x_1^{'}

    x2T2^R2x1=0 x_2^{'}\widehat{T_2}R_2x_1^{'} = 0
    E=T2^R2E = \widehat{T_2}R_2
    x2Ex1=0 x_2^{'}Ex_1^{'} = 0
    可以看出,上式是同一点在两个相机中的像所满足的关系,它和点的空间坐标、点到相机的距离均没有关系,我们称之为极线约束,而矩阵EE则称为关于这两个相机的本征矩阵。如果我们知道两幅图像中的多个对应点(至少5对),则可以通过上式解出矩阵EE,又由于EE是由T2T_2R2R_2构成的,可以从E中分解出T2T_2R2R_2
    如何从EE中分解出两个相机的相对变换关系(即T2T_2R2R_2),背后的数学原理比较复杂,好在OpenCV为我们提供了这样的方法,在此就不谈原理了。

    #特征点提取与匹配
    从上面的分析可知,要求取两个相机的相对关系,需要两幅图像中的对应点,这就变成的特征点的提取和匹配问题。对于图像差别较大的情况,推荐使用SIFT特征,因为SIFT对旋转、尺度、透视都有较好的鲁棒性。如果差别不大,可以考虑其他更快速的特征,比如SURF、ORB等。
    本文中使用SIFT特征,由于OpenCV3.0将SIFT包含在了扩展部分中,所以官网上下载的版本是没有SIFT的,为此需要到这里下载扩展包,并按照里面的说明重新编译OpenCV(哎~真麻烦,-_-!)。如果你使用其他特征,就不必为此辛劳了。
    下面的代码负责提取图像特征,并进行匹配。

    void extract_features(
    	vector<string>& image_names,
    	vector<vector<KeyPoint>>& key_points_for_all,
    	vector<Mat>& descriptor_for_all,
    	vector<vector<Vec3b>>& colors_for_all
    	)
    {
    	key_points_for_all.clear();
    	descriptor_for_all.clear();
    	Mat image;
    
    	//读取图像,获取图像特征点,并保存
    	Ptr<Feature2D> sift = xfeatures2d::SIFT::create(0, 3, 0.04, 10);
    	for (auto it = image_names.begin(); it != image_names.end(); ++it)
    	{
    		image = imread(*it);
    		if (image.empty()) continue;
    
    		vector<KeyPoint> key_points;
    		Mat descriptor;
    		//偶尔出现内存分配失败的错误
    		sift->detectAndCompute(image, noArray(), key_points, descriptor);
    
    		//特征点过少,则排除该图像
    		if (key_points.size() <= 10) continue;
    
    		key_points_for_all.push_back(key_points);
    		descriptor_for_all.push_back(descriptor);
    
    		vector<Vec3b> colors(key_points.size());
    		for (int i = 0; i < key_points.size(); ++i)
    		{
    			Point2f& p = key_points[i].pt;
    			colors[i] = image.at<Vec3b>(p.y, p.x);
    		}
    		colors_for_all.push_back(colors);
    	}
    }
    
    void match_features(Mat& query, Mat& train, vector<DMatch>& matches)
    {
    	vector<vector<DMatch>> knn_matches;
    	BFMatcher matcher(NORM_L2);
    	matcher.knnMatch(query, train, knn_matches, 2);
    
    	//获取满足Ratio Test的最小匹配的距离
    	float min_dist = FLT_MAX;
    	for (int r = 0; r < knn_matches.size(); ++r)
    	{
    		//Ratio Test
    		if (knn_matches[r][0].distance > 0.6*knn_matches[r][1].distance)
    			continue;
    
    		float dist = knn_matches[r][0].distance;
    		if (dist < min_dist) min_dist = dist;
    	}
    
    	matches.clear();
    	for (size_t r = 0; r < knn_matches.size(); ++r)
    	{
    		//排除不满足Ratio Test的点和匹配距离过大的点
    		if (
    			knn_matches[r][0].distance > 0.6*knn_matches[r][1].distance ||
    			knn_matches[r][0].distance > 5 * max(min_dist, 10.0f)
    			)
    			continue;
    
    		//保存匹配点
    		matches.push_back(knn_matches[r][0]);
    	}
    }
    

    需要重点说明的是,匹配结果往往有很多误匹配,为了排除这些错误,这里使用了Ratio Test方法,即使用KNN算法寻找与该特征最匹配的2个特征,若第一个特征的匹配距离与第二个特征的匹配距离之比小于某一阈值,就接受该匹配,否则视为误匹配。当然,也可以使用Cross Test(交叉验证)方法来排除错误。

    得到匹配点后,就可以使用OpenCV3.0中新加入的函数findEssentialMat()来求取本征矩阵了。得到本征矩阵后,再使用另一个函数对本征矩阵进行分解,并返回两相机之间的相对变换R和T。注意这里的T是在第二个相机的坐标系下表示的,也就是说,其方向从第二个相机指向第一个相机(即世界坐标系所在的相机),且它的长度等于1。

    bool find_transform(Mat& K, vector<Point2f>& p1, vector<Point2f>& p2, Mat& R, Mat& T, Mat& mask)
    {
    	//根据内参矩阵获取相机的焦距和光心坐标(主点坐标)
    	double focal_length = 0.5*(K.at<double>(0) + K.at<double>(4));
    	Point2d principle_point(K.at<double>(2), K.at<double>(5));
    
    	//根据匹配点求取本征矩阵,使用RANSAC,进一步排除失配点
    	Mat E = findEssentialMat(p1, p2, focal_length, principle_point, RANSAC, 0.999, 1.0, mask);
    	if (E.empty()) return false;
    
    	double feasible_count = countNonZero(mask);
    	cout << (int)feasible_count << " -in- " << p1.size() << endl;
    	//对于RANSAC而言,outlier数量大于50%时,结果是不可靠的
    	if (feasible_count <= 15 || (feasible_count / p1.size()) < 0.6)
    		return false;
    
    	//分解本征矩阵,获取相对变换
    	int pass_count = recoverPose(E, p1, p2, R, T, focal_length, principle_point, mask);
    
    	//同时位于两个相机前方的点的数量要足够大
    	if (((double)pass_count) / feasible_count < 0.7)
    		return false;
    
    	return true;
    }
    

    #三维重建
    现在已经知道了两个相机之间的变换矩阵,还有每一对匹配点的坐标。三维重建就是通过这些已知信息还原匹配点在空间当中的坐标。在前面的推导中,我们有
    s2x2=K(R2X+T2)s_2x_2 = K(R_2X + T_2)
    这个等式中有两个未知量,分别是s2s_2XX。用x2x_2对等式两边做外积,可以消去s2s_2,得
    0=x2^K(R2X+T2) 0 = \widehat{x_2}K(R_2X+T_2)
    整理一下可以得到一个关于空间坐标X的线性方程
    x2^KR2X=x2^KT2 \widehat{x_2}KR_2X = -\widehat{x_2}KT_2
    上面的方程不能直接取逆求解,因此化为其次方程
    x2^K(R2  T)(X1)=0 \widehat{x_2}K(R_2\ \ T)\left(\begin{matrix}X \\ 1\end{matrix}\right) = 0
    用SVD求X左边矩阵的零空间,再将最后一个元素归一化到1,即可求得X。其几何意义相当于分别从两个相机的光心作过x1x_1x2x_2的延长线,延长线的焦点即为方程的解,如文章最上方的图所示。由于这种方法和三角测距类似,因此这种重建方式也被称为三角化(triangulate)。OpenCV提供了该方法,可以直接使用。

    void reconstruct(Mat& K, Mat& R, Mat& T, vector<Point2f>& p1, vector<Point2f>& p2, Mat& structure)
    {
    	//两个相机的投影矩阵[R T],triangulatePoints只支持float型
    	Mat proj1(3, 4, CV_32FC1);
    	Mat proj2(3, 4, CV_32FC1);
    
    	proj1(Range(0, 3), Range(0, 3)) = Mat::eye(3, 3, CV_32FC1);
    	proj1.col(3) = Mat::zeros(3, 1, CV_32FC1);
    
    	R.convertTo(proj2(Range(0, 3), Range(0, 3)), CV_32FC1);
    	T.convertTo(proj2.col(3), CV_32FC1);
    
    	Mat fK;
    	K.convertTo(fK, CV_32FC1);
    	proj1 = fK*proj1;
    	proj2 = fK*proj2;
    
    	//三角化重建
    	triangulatePoints(proj1, proj2, p1, p2, structure);
    }
    

    #测试
    我用了下面两幅图像进行测试
    这里写图片描述

    得到了着色后的稀疏点云,是否能看出一点轮廓呢?!

    这里写图片描述
    这里写图片描述

    图片中的两个彩色坐标系分别代表两个相机的位置。
    在接下来的文章中,会将相机的个数推广到任意多个,成为一个真正的SfM系统。

    关于源代码的使用
    代码是用VS2013写的,OpenCV版本为3.0且包含扩展部分,如果不使用SIFT特征,可以修改源代码,然后使用官方未包含扩展部分的库。软件运行后会将三维重建的结果写入Viewer目录下的structure.yml文件中,在Viewer目录下有一个SfMViewer程序,直接运行即可读取yml文件并显示三维结构。

    代码下载

    展开全文
  • (1)传统的三维重建技术 (2)基于深度学习的三维重建算法研究主要有三种: 在传统三维重建算法中引入深度学习方法进行改进; 深度学习重建算法和传统三维重建算法进行融合,优势互补; 模仿动物视觉,直接利用...

    reference: https://zhuanlan.zhihu.com/p/114047559
    (1)传统的三维重建技术
    在这里插入图片描述
    (2)基于深度学习的三维重建算法研究主要有三种:

    1. 在传统三维重建算法中引入深度学习方法进行改进;
    2. 深度学习重建算法和传统三维重建算法进行融合,优势互补;
    3. 模仿动物视觉,直接利用深度学习算法进行三维重建,包括基于体素、基于点云和基于网格。
    展开全文
  • 三维重建综述

    2015-08-14 20:45:02
    三维重建综述三维重建综述三维重建综述三维重建综述三维重建综述
  • 三维重建软件 医三维

    2016-12-10 19:46:13
    免费的三维重建影像软件,DICOM软件,三维影像工作站
  • 三维重建对疾病的治疗有着重要的意义,本文概要阐述了在医学诊断治疗领域三维重建的一些常用方法。
  • 作者:庞巧遇来源:公众号 @3D视觉工坊 链接:一分钟详解三维重建学习路线 三维重建在计算机视觉中是十分重要的,其中涉及很多的技术内容,为了后来人能少走弯路,也为了对自己的知识框架系统总结,特记录自己的学习...

    a2506a500de73d10f71af477b1a63bf5.png

    作者:庞巧遇

    来源:公众号 @3D视觉工坊

    链接:一分钟详解三维重建学习路线

    三维重建在计算机视觉中是十分重要的,其中涉及很多的技术内容,为了后来人能少走弯路,也为了对自己的知识框架系统总结,特记录自己的学习路线。

    1、什么是三维重建

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

    2、三维重建有什么用

    随着2010年阿凡达在全球热映以来,三维计算机视觉的应用从传统工业领域逐渐走向生活、娱乐、服务等,比如AR/VR,SLAM,自动驾驶等都离不开三维视觉的技术。三维视觉最近几年再度火热,一方面归功于三维传感器(如Kinect)的快速发展和价格方面的调整,另一方面由于深度学习在计算机视觉方向的应用,智能移动机器人、无人驾驶、无人机、AR等发展迅速。

    3、三维重建学习路线

    1) 对初学者:

    书籍:

    视觉SLAM十四讲-从理论到实践,高翔计算机视觉-算法与应用(Richard Szeliski 艾海舟<译> 清华大学出版社)Computer Vision Algorithms and ApplicationsComputer Vision for Visual Effects

    视频课程:

    ·视觉SLAM十四讲-从理论到实践:

    https://www.bilibili.com/video/BV1eJ411H7mG/?spm_id_from=333.788.videocard.3

    ·极简三维视觉六小时课程视频:浙大谭平教授 :

    https://www.bilibili.com/video/BV124411W775?p=1对于初学者的建议是学习好多视几何基础,先利用仿真数据跑通上面说的主线流程,再结合具体的开源项目去理解算法,再结合实际传感器和问题去改善或者提出新的算法,在这个过程中要善用一些可视化工具比如Meshlab, cloudcompare, matplotlib.pyplot等,可以节约大量时间。

    2) 针对具备一定基础后:

    三维重建的每个基础模块挑选了 1-2 篇代表性文献,强烈建议阅读以下相关的原著文献, 这些文献是经过时间检验非常经典的文献,这将大大提升你们的科研和工程能力。

    大家可以加入我们的QQ讨论群(群号:574432628),提前获得本场直播的pdf课件。

    书籍:

    《计算机视觉中的多视几何》(Muiltiple View Geometry,简称MVG) (Richard Hartley 韦穗<译>)

    文献:

    ·Sift 特征点检测

    [1] Distinctive Image Features from Scale-Invariant Keypoints

    ·增量 SFM

    [2] Photo Tourism Exploring Photo Collections in 3D[3] Structure-from-Motion Revisited

    ·稠密匹配&&多视角立体视觉

    [4] Multi-View Stereo for Community Photo Collections

    ·表面重建

    [5] Reconstruction and Representation of 3D Objects with Radial Basis

    ·纹理贴图

    [6] Let it be color! Large-Scale Texturing of 3D Reconstructions

    3) 下面是比较著名的开源系统:

    ·MVE:

    https://www.gcc.tu-darmstadt.de/home/proj/mve/index.en.jsp

    ·Bundler:

    http://www.cs.cornell.edu/~snavely/bundler/

    ·VisualSFM:

    http://ccwu.me/vsfm/

    ·openMVG:

    https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/

    ·ColMap:

    https://demuc.de/colmap/

    Source and Executable Download:

    http://www.cs.jhu.edu/~misha/Code/

    4) 相关开源代码

    COLMAP - Structure-from-Motion and Multi-View Stereo:

    https://github.com/colmap/colmap

    Multi-View Environment:

    https://github.com/simonfuhrmann/mve

    Algorithm to texture 3D reconstructions from multi-view stereo images:

    https://github.com/nmoehrle/mvs-texturing

    SFMedu: A Matlab-based Structure-from-Motion System for Education:

    https://github.com/jianxiongxiao/SFMedu

    参考:

    1.https://blog.csdn.net/qq_33294094/article/details/51759246?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-

    2~all~first_rank_v2~rank_v25-3-51759246.nonecase&utm_term=%E4%B8%89%E7%BB%B4%E9%87%8D%E5%BB%BA%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF2.https://blog.csdn.net/shyjhyp11/article/details/103890479

    本文仅做学术分享,如有侵权,请联系删文。

    往期干货资源:

    汇总 | 国内最全的3D视觉学习资源,涉及计算机视觉、SLAM、三维重建、点云处理、姿态估计、深度估计、3D检测、自动驾驶、深度学习(3D+2D)、图像处理、立体视觉、结构光等方向!

    汇总 | 3D目标检测(基于点云、双目、单目)

    汇总 | 6D姿态估计算法(基于点云、单目、投票方式)

    汇总 | 三维重建算法实战(单目重建、立体视觉、多视图几何)

    汇总 | 3D点云后处理算法(匹配、检索、滤波、识别)

    汇总 | SLAM算法(视觉里程计、后端优化、回环检测)

    汇总 | 深度学习&自动驾驶前沿算法研究(检测、分割、多传感器融合)

    汇总 | 相机标定算法

    汇总 | 事件相机原理

    汇总 | 结构光经典算法

    汇总 | 缺陷检测常用算法与实战技巧

    展开全文
  • 三维重建三维重建基础

    千次阅读 2019-04-10 13:55:24
    三维重建技术通过深度数据获取、预处理、点云配准与融合、生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型。这种模型可以对如文物保护、游戏开发、建筑设计、临床医学等研究起到辅助的作用。 1.1 ...

    前言

           三维重建技术通过深度数据获取、预处理、点云配准与融合、生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型。这种模型可以对如文物保护、游戏开发、建筑设计、临床医学等研究起到辅助的作用。

    1.1 研究背景及意义

    人类通过双眼来探索与发现世界。人类接收外部信息的方式中,有不到三成来自于听觉、触觉、嗅觉等感受器官,而超过七成、最丰富、最复杂的信息则通过视觉[1]进行感知的。计算机视觉便是一种探索给计算机装备眼睛(摄像头)与大脑(算法)的技术,以使计算机能够自主独立的控制行为、解决问题,同时感知、理解、分析外部环境。20世纪60年代,计算机视觉得到了最初的发展。该阶段的研究重心主要体现在如何从二维图像中恢复出如立方体、圆柱体等立体化的三维形状,解释各个物体的空间位置关系。1982年,David Marr[2]从信息处理的角度对数学、神经生理学、计算机图形学等学科的研究成果进行了归纳总结,并在此基础上提出了一系列计算机视觉理论。得益于这个完整明确的理论体系,计算机视觉得到了蓬勃的发展。它的核心思想是从二维图像恢复三维结构。图1-1展示的是经典Marr视觉信息处理过程。 

    这里写图片描述
    图1-1 Marr视觉信息处理过程 

     
    Fig.1-1 Process of Marr visual information 
    随着科学技术的日新月异,计算机视觉的应用日益受到各行业的关注和重视,如设备检测与监视、医学图像处理、文物保护[3]、机器人视觉、自动导航、工业产品外观设计与生产等领域。计算机视觉技术为人们带来了机遇,也带来了挑战。三维重建作为计算机视觉技术中最为最为热门的研究方向之一,涉及到包括图像处理、立体视觉、模式识别等多个学科体系。利用计算机建立表达现实客观景物的三维模型,并以此来满足生产和生活的需要。随着工业化进程的不断发展,多种技术的实现均有赖于目标物体三维信息的获取。三维重建现已被广发的应用于生活和科研工作中,特别是在医学治疗、文物保护、游戏开发、工业设计、航天航海等方面,展现出了极强的生命力和影响力。

    1.2 三维重建技术简介

    三维重建技术的重点在于如何获取目标场景或物体的深度信息。在景物深度信息已知的条件下,只需要经过点云数据[4]的配准及融合,即可实现景物的三维重建。基于三维重建模型的深层次应用研究也可以随即展开。人们按照被动式测量与主动式测量[5]对目标物体深度信息的获取方法进行了分类,下面对这两种方式进行相应的介绍。

    1.2.1 被动式三维重建技术

    被动式一般利用周围环境如自然光的反射,使用相机获取图像,然后通过特定算法计算得到物体的立体空间信息。主要有以下三种方法:

    1.纹理恢复形状法

    各种物体表面具有不同的纹理信息,这种信息由纹理元组成,根据纹理元可以确定表面方向,从而恢复出相应的三维表面。这种方法称为纹理恢复形状法[6] (Shape From Texture,SFT)。 
    纹理法的基本理论为:作为图像视野中不断重复的视觉基元,纹理元覆盖在各个位置和方向上。当某个布满纹理元的物体被投射在平面上时,其相应的纹理元也会发生弯折与变化。例如透视收缩变形使与图像平面夹角越小的纹理元越长,投影变形会使离图像平面越近的纹理元越大。通过对图像的测量来获取变形,进而根据变形后的纹理元,逆向计算出深度数据。SFT对物体表面纹理信息的要求严苛,需要了解成像投影中纹理元的畸变信息,应用范围较窄,只适合纹理特性确定等某些特殊情形。所有在实际使用中较为少见。

    2.阴影恢复形状法

    SFS[7] (Shape From Shading,从阴影恢复形状)法也是一种较为常用的方法。考虑到图像的阴影边界包含了图像的轮廓特征信息,因此能够利用不同光照条件下的图像的明暗程度与阴影来计算物体表面的深度信息,并以反射光照模型进行三维重建。需要注意的是,像素点的亮度受到包括光源指标、摄像机参数、目标表面材质等的制约。 
    阴影恢复形状法的应用范围比较广泛,可以恢复除镜面外的各种物体的三维模型。缺点体现在过程多为数学计算、重建结果不够精细,另外不能忽视的是,SFS法需要准确的光源参数,包括位置与方向信息。这就导致其无法应用于诸如露天场景等具有复杂光线的情形中。

    3.立体视觉法

    立体视觉法[8](Multi-View Stereo,MVS)是另外一种常用的三维重建方法。主要包括直接利用测距器获取程距信息、通过一幅图像推测三维信息和利用不同视点上的两幅或多幅图像恢复三维信息等三种方式。通过模拟人类视觉系统,基于视差原理获取图像对应点之间的位置偏差,恢复出三维信息。S.T.Barnard[9]等人对20世纪70年代到80年代之间出现的三维重建的算法和评价体系做了概述。到了80年代中后期,出现了更多、更深层次的视觉原理,包括立体测量方法和深度传感器等,极大的促进了相关学科的发展。新兴方法可以直接获取景物的三维信息,极大的节省了物力与人力成本。U.R.Dhond[10]等人提出了基于层次处理的三目立体约束方法。二十世纪90年代末,涌现出诸如图像匹配的前沿算法、遮挡处理算法等。M.Z.Brown[11]等人总结了2000年到2010年间的三维视觉发展的总体概况,包括遮挡、配准和效率等的相关分析。 
    双目立体视觉重建,在实际应用情况优于其他基于视觉的三维重建方法,也逐渐出现在一部分商业化产品上; 不足的是运算量仍然偏大,而且在基线距离较大的情况下重建效果明显降低 。 
    代表文章:AKIMOIO T Automatic creation of 3D facial models 1993 
    CHEN C L Visual binocular vison systems to solid model reconstruction2007 
    作为计算机视觉的关键技术之一,立体视觉法也其弊端。例如,立体视觉需要假设空间的平面是正平面,而实际情况却与此相差甚远。除此之外,匹配还存在歧义性:对于一幅图像上的某些特征点,另外的图像可能存在若干个与之相似的特征点。那么如何选取最适配的匹配点,显得较为棘手。如图1-2所示,展示了Middlebury[16]数据集中Teddy和Cones场景的基准彩色图像、标准视差以及通过Graph Cuts[17]算法获取的立体匹配视差估计结果。虽然视差结果体现出了景物的三维位置关系,但是某些像素点的视差与标准值仍有细微的差距。除此之外,对于如相机运动参数的确定、大型场景重建需要获取多帧图像等问题,也极大的影响了立体视觉的深层次应用。 

    这里写图片描述
    图1-2(a) 基准彩色图像

     
     

    这里写图片描述
    图1-2(b) 标准视差

     
     
    参考:立体匹配导论

    1.2.2 主动式三维重建技术

    主动式是指利用如激光、声波、电磁波等光源或能量源发射至目标物体,通过接收返回的光波来获取物体的深度信息。主动测距有莫尔条纹法、飞行时间法、结构光法和三角测距法等四种方法。

    1.莫尔条纹法

    莫尔条纹在生活中比较常见,如两层薄薄的丝绸重叠在一起,即可以看到不规则的莫尔(Morie)条纹;微风的吹动窗纱时,条纹亦随之运动。莫尔条纹法[18]起源于18世纪的法国,是一项古老又现代的测量方法。基本原理是将两块等间隔排列的直线簇或曲线簇图案重叠起来,以非常小的角度进行相对运动来形成莫尔条纹。如图1-3所示,在主光栅与指示光栅的交叉重合处,因光线的透射与遮挡而产生不同的明暗带,即莫尔条纹。莫尔条纹随着光栅的左右平移而发生垂直位移,此时产生的条纹相位信息体现了待测物体表面的深度信息,再通过逆向的解调函数,实现深度信息的恢复。这种方法具有精度高、实时性强的优点,但是其对光照较为敏感,抗干扰能力弱。 

    这里写图片描述
    图1-3 双光栅莫尔条纹法

     

    提出:WIKTIN recovering surface shape and orientation from texture (1987)(被引用454 次)。 
    发展:Warren 2010 对 wiktin 方法进行改进使用了透视投影; 
    Liboy 2006 给出了在纹理单元结构发生改变的情况下的重建方法。 
    优点:精度高,对光照和噪声不敏感。 
    缺点:只应用于具有规则纹理的物体。

    2.飞行时间法

    飞行时间法[19] (Time of Flight,ToF)指的是在光速及声速一定的前提下,通过测量发射信号与接收信号的飞行时间间隔来获得距离的方法。这种信号可以是超声波,也可以是红外线等。飞行时间法相较于立体视觉法而言,具有不受基线长度限制、与纹理无关、成像速度快等特点。但是其也有一定的缺点。首先,ToF相机的分辨率非常低。例如图1-4所示,当今分辨率最高的PMD Camcube 2.0 相机,也仅为204×204像素;其次,ToF相机容易受到环境因素的影响,如混合像素、外界光源等,导致景物深度不准确;最后,系统误差与随机误差对测量结果的影响很大,需要进行后期数据处理,主要体现在场景像素点的位置重合上。值得注意的是,ToF相机的售价达到了数万美元,受众较窄。 

    这里写图片描述
    图1-4 SR4000 ToF相机

     
     
    Fig.1-4 SR4000 ToF camera

    3.结构光法

    结构光法[20](Structured Light)通过向表面光滑无特征的物体发射具有特征点的光线,依据光源中的立体信息辅助提取物体的深度信息。具体的过程包括两个步骤,首先利用激光投影仪向目标物体投射可编码的光束,生成特征点;然后根据投射模式与投射光的几何图案,通过三角测量原理计算摄像机光心与特征点之间的距离,由此便可获取生成特征点的深度信息,实现模型重建。这种可编码的光束就是结构光,包括各种特定样式的点、线、面等图案。结构光法解决了物体表面平坦、纹理单一、灰度变化缓慢等问题。因为实现简单且精度较高,所以结构光法的应用非常广泛,目前已有多家公司生产了以结构光技术为基础的硬件设备,如PrimeSense公司的Prime Sensor、微软公司的Kinect和华硕公司的Xtion PRO LIVE等产品[21]。图1-5展示了利用结构光技术采集文物三维信息的场景。 
    提出:Woodham 对 SFS 进行改进(1980 年):photometric method for determining surface orientation from multiple images (该文章被引用了 891 次) 
    发展:Noakes :非线性与噪声减除 2003 年; 
    Horocitz :梯度场合控制点 2004 年; 
    Tang : 可信度传递与马尔科夫随机场 2005 年; 
    Basri : 光源条件未知情况下的三维重建 2007 年; 
    Sun :非朗伯特 2007 年; 
    Hernandez : 彩色光线进行重建方法 2007 年; 
    Shi : 自标定的光度立体视觉法 2010 年。 

    这里写图片描述
    图1-5 结构光法原理图

     

    4.三角测距法

    三角测距法[22]是一种非接触式的测距方法,以三角测量原理为基础。红外设备以一定的角度向物体投射红外线,光遇到物体后发生反射并被CCD(Charge-coupled Device,电荷耦合元件)图像传感器所检测。随着目标物体的移动,此时获取的反射光线也会产生相应的偏移值。根据发射角度、偏移距离、中心矩值和位置关系,便能计算出发射器到物体之间的距离。三角测距法在军工测量、地形勘探等领域中应用广泛。

    参考文献

    [1] Szeliski R. Computer vision: algorithms and applications[M]. Berlin: Springer, 2010. 
    [2] D. Marr, et al. A Computational Theory of Human Stereo Vision. Proc.R.Soc.Lond. 1979, B.204:301-328. 
    [3] Levoy, M. Pulli, et al. The Digital Michelangelo Project:3D Scanning of Large Statues. Proc.SIGGRAPH,2000. 
    [4] Anand A, Koppula H S, Joachims T, et al. Contextually guided semantic labeling and search for three-dimensional point clouds[J]. The International Journal of Robotics Research, 2013, 32(1):19-34. 
    [5] Mada S K, Smith M L, Smith L N, et al. Overview of passive and active vision techniques for hand-held 3D data acquisition [C]//Opto Ireland. International Society for Optics and Photonics, 2003: 16-27. 
    [6] D. A. Forsyth, J. Ponce, Computer Vision: A Modern Approach. Prentice Hall 2001 
    [7] Horn B. K. P. Shape from shading: a method for obtaining the shape of a smooth opaque object from one view. PhD thesis, Department of Electrical Engineering, MIT, Cambridge. 1970. 
    [8] Ikeuchi K. Determining surface orientations of specular surfaces by using the photometric stereo method [J]. Pattern Analysis and Machine Intelligence, IEEE Transactions, 1981, (6): 661-669. 
    [9] S. T. Barnard, M. A. Fisehler. Computational Stereo[J].ACM Computing Surveys. 1982, Vol.14:553-572. 
    [10] U. R. Dhond, J. K. Aggarval. Struct from Stereo—A Review [J]. IEEE Trans. Systems, Man, and Cybemeties.1989, Vol.19: 1489-1510.

    展开全文
  • 实时三维重建算法的实现 基于Kinect与单目视觉SLAM的三维重建实时三维重建算法的实现——基于Kinect与单目视觉SLAM的三维重建夏文玲1,顾照鹏2,杨唐胜2XIAWenling1,GUZhaopeng2,YANGTangsheng21.湖南大学电气与信息...
  • 基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。 1. 相关概念 (1)彩色图像与深度图像 彩色图像也叫作RGB图像,R...
  • 三维重建sfm

    2018-11-05 20:00:49
    一套关于sfm三维重建的代码,是基于matlab的,亲测能运行,无需进行相机标定,能实现三维稠密重建,有注释。
  • 作者:CJBDate:2020-02-21来源:基于深度学习的三维重建算法综述 00 前言目前,三维重建技术已在游戏、电影、测绘、定位、导航、自动驾驶、VR/AR、工业制造以及消费品领域等方面得到了广泛的应用。方法同样也...
  • 多频外差法三维重建 结构光三维重建

    万次阅读 多人点赞 2016-12-13 22:28:52
    结构光三维重建--多频外差 结构光三维重建主要的原理就是从投影仪中投射一定频率的结构光,这种光跟以前采用的格雷码方式不同,它具有一定的正玄性。而多频外差的方式说的就是采用几种不同频率的正玄光,为什么...
  • 牙模三维重建 牙齿三维重建

    千次阅读 2018-03-28 19:57:45
    今天从朋友那里搞了个牙模来测试了一下,效果还可以。牙模三维重建的作用我就懒得介绍了,相信大家都知道,不过用的人基本上都是医院、整形之类的机构。 微信: ...
  • 文章转自:http://blog.csdn.net/zhubaohua_bupt/article/details/74172831利用相机进行三维重建已经不是一个新鲜的话题,重建的三维环境用途很广泛,比如检测识别目标,作为深度学习的输入,视觉SLAM。目前,比较...
  • 双目视觉的三维重建

    2018-06-11 21:13:55
    双目视觉的三维重建 双目视觉的三维重建 双目视觉的三维重建

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,236
精华内容 2,094
关键字:

三维重建