一种基于图片的三维场景重建方法与流程

文档序号:16120897发布日期:2018-11-30 23:11阅读:311来源:国知局

本发明涉及图片的三维重建技术领域,特别是一种基于图片的三维场景重建方法。

背景技术

随着计算机图形学和计算机视觉技术的发展,三维重建技术广泛应用在医学、虚拟现实、三维测量、计算机动画、工业检测以及地质学等方面。基于图片的三维重建技术就是从已获得图像中提取所需要的二维信息,并通过相机定标、特征点提取、特征匹配和三维重建算法等相关技术将物体的三维信息恢复出来的过程。

现有国内外的大量机构都借助于kinect进行研究,用户需手持kinect设备,扫描需要重建的物品或者场景,有kinect相连的计算机会逐步重建出物品或者场景。

但是该方法需要操作人员购买kinect设备,同时需要性能较高的计算机处理kinect发送的数据。此外,使用kinect时需要将该设备与电脑连接,限制了重建操作的应用场景。正是由于上述的缺点,使用kinect重建三维模型技术只能重建物体或者小规模的场景模型。



技术实现要素:

本发明的目的是要解决现有技术中存在的不足,提供一种基于图片的三维场景重建方法。

为达到上述目的,本发明是按照以下技术方案实施的:

一种基于图片的三维场景重建方法,包括以下步骤:

步骤1、使用sift算法提取输入图片中包含的特征点信息,所述特征点信息包括特征点的位置、尺寸、旋转不变量,得到稀疏点云;

步骤2、使用bundler和pmvs算法密集化特征点,相对均匀的向三维空间扩散特征点,从而得到稠密点云;

步骤3、使用泊松区间重建算法将稠密点云中的信息点连接成曲面,再经空间中的所有曲面逐步连接在一起,最终得到重建的三维模型。

具体地,所述步骤1包括:

步骤101、尺度空间极值检测:由于在不同的尺度空间不能使用相同的窗口检测极值点。对小的角点要用小的窗口,对大的角点只能使用大的窗口。为了达到这个目的我们要使用尺度空间滤波器。(尺度空间滤波器可以使用一些列具有不同方差σ的高斯卷积核构成)。使用具有不同方差值σ的高斯拉普拉斯算子(log)对图像进行卷积,log由于具有不同的方差值σ所以可以用来检测不同大小的斑点(当log的方差σ与斑点直径相等时能够使斑点完全平滑)。简单来说方差σ就是一个尺度变换因子。例如,上图中使用一个小方差σ的高斯卷积核是可以很好的检测出小的角点,而使用大方差σ的高斯卷积核时可以很好的检测除大的角点。所以我们可以在尺度空间和二维平面中检测到局部最大值,如(x,y,σ),这表示在σ尺度中(x,y)点可能是一个关键点。(高斯方差的大小与窗口的大小存在一个倍数关系:窗口大小等于6倍方差加1,所以方差的大小也决定了窗口大小)但是这个log的计算量非常大,所以sift算法使用高斯差分算子(dog)来对log做近似。这里需要再解释一下图像金字塔,我们可以通过减少采样(如只取奇数行或奇数列)来构成一组图像尺寸(1,0.5,0.25等)不同的金字塔,然后对这一组图像中的每一张图像使用具有不同方差σ的高斯卷积核构建出具有不同分辨率的图像金字塔(不同的尺度空间)。dog就是这组具有不同分辨率的图像金字塔中相邻的两层之间的差值。如图2所示。

在dog完成之后,就可以在不同的尺度空间和2d平面中搜索局部最大值了。对于图像中的一个像素点而言,它需要与自己周围的8邻域,以及尺度空间中上下两层中的相邻的18(2x9)个点相比。如果是局部最大值,它就可能是一个关键点。基本上来说关键点是图像在相应尺度空间中的最好代表。如图3所示。

本方法使用ift参数的经验值:octaves=4(通过降低采样从而减小图像尺寸,构成尺寸减小的图像金字塔(4层)),尺度空间为5,也就是每个尺寸使用5个不同方差的高斯核进行卷积,初始方差是1.6,k等于根号2等。

步骤102、关键点(极值点)定位:

一旦找到关键点,我们就要对它们进行修正从而得到更准确的结果。本方法使用尺度空间的泰勒级数展开来获得极值的准确位置,如果极值点的灰度值小于阈值(0.03)就会被忽略掉。dog算法对边界非常敏感,所以我们必须要把边界去除。本方法使用2x2的hessian矩阵计算主曲率。从harris角点检测的算法中,我们知道当一个特征值远远大于另外一个特征值时,检测到的是边界。所以使用了一个简单的函数,如果比例高于阈值,这个关键点就会被忽略。本方法中给出的边界阈值为10。所以低对比度的关键点和边界关键点都会被去除掉,剩下的就是我们感兴趣的关键点了。

步骤103、为关键点(极值点)指定方向参数:现在我们要为每一个关键点赋予一个方向参数,这样它才会具有旋转不变性。获取关键点所在尺度空间的邻域,然后计算这个区域的梯度级和方向。根据计算得到的结果创建一个含有36个柱子(每10度一个柱子)的方向直方图。(使用当前尺度空间σ值的1.5倍为方差的圆形高斯窗口和梯度级做权重)。直方图中的峰值为主方向参数,如果其他的任何柱子的高度高于峰值的80%被认为是辅方向。这就会在相同的尺度空间相同的位置构建除具有不同方向的关键点。这对于匹配的稳定性会有所帮助。

步骤104、关键点描述符:新的关键点描述符被创建了。选取与关键点周围一个16x16的邻域,把它分成16个4x4的小方块,为每个小方块创建一个具有8个柱子的方向直方图。总共加起来有128个柱子。由此组成长为128的向量就构成了关键点描述符。除此之外还要进行几个测量以达到对光照变化,旋转等的稳定性。如图5所示

具体地,所述步骤2包括:

步骤201、关键点匹配:根据步骤1得到的特征点信息,采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取拍摄图片的第一个图的某个关键点,通过遍历找到第二幅图像中的距离最近的那个关键点。但有些情况下,第二个距离最近的关键点与第一个距离最近的关键点靠的太近。这可能是由于噪声等引起的。此时要计算最近距离与第二近距离的比值。如果比值大于0.8,就忽略掉。这会去除90%的错误匹配,同时只去除5%的正确匹配。重复步骤201可得到图片间的相对位置关系。

步骤202、根据步骤201获取的图片间的相对位置关系,首先把三维空间划分为等大网格,目标是每个网格中至少有一个特征点,利用现有的特征点向其网格的邻域扩散,若这个邻域中已经存在一个与特征点距离较近的特征点或者这个邻域中已经存在一个平均相关系数较大的特征点,则不向该邻域扩散,扩散是将现有特征点的特征值复制到需要扩散的区域;

步骤203、根据步骤201生成图片间的匹配关系,根据匹配关系生成track匹配链,生成track匹配链的步骤如下:对每一张图片的每一个特征作为种子点进行深度优先搜索,并且搜索的时候使用标记不重复访问同一张图片;使用不同图片的特征作为遍历起始点就可以获得双向匹配检验的信息,因此可以对最后的结果进行处理检测一致的track;因为查找的时候涉及的图片数可能会很多,对每一次查询都全部复位运算量太大,使用touched数据结构标记每一张被访问过的图片,使得可以保证生成track的过程中不会重复考虑同一张图片,并且可以根据此信息有选择的将标记数据结构复位;最后将生成的track信息分派到关联的图片,只要有一个track就标记相关图片为相邻的。

具体地,所述步骤3包括:

步骤301、定义八叉树:使用八叉树结构存储点集,根据采样点集的位置定义八叉树,然后细分八叉树使每个采样点都落在深度为d的叶节点;

步骤302、设置函数空间:对八叉树的每个节点设置空间函数f,所有节点函数f的线性和可以表示向量场v,基函数f采用了盒滤波的n维卷积;

步骤303、创建向量场:均匀采样的情况下,假设划分的块是常量,通过向量场v逼近指示函数的梯度,采用三次样条插值或三线插值;

步骤304、求解泊松方程:方程的解采用拉普拉斯矩阵迭代求出;

步骤305、提取等值面:为得到重构表面,需要选择阈值获得等值面;先估计采样点的位置,然后用其平均值进行等值面提取,然后用移动立方体算法得到等值面;

步骤306、逐步连接空间所有等值面,最终得到空间三维模型。

与现有技术相比,本发明可以使用手机或者相机拍摄需重建模型的图片精准还原出模型形态、颜色、表面纹理等真实的三维模型特征。与kinect等三维重建技术相比,该方法操作简单、对采集设备要求低,不需要对拍摄人员进行专业训练,人工成本低。无需高清相机、扫描仪等专业获取设备,拍摄者有只要具有使用手机的能力,即可完成重建模型数据的采集工作。

三维重建技术已经逐渐融入到众多应用领域中,并促进了一些新型领域的发展,如逆向工程、珍贵历史文物的保护修复、数字博物馆、虚拟游戏场景展示、虚拟教学场景的构造等等。

附图说明

图1为本发明的流程图。

图2为本发明实施例中的高斯差分金字塔的生成图。

图3为本发明实施例中的高斯差分函数空间极值检测图。

图4为本发明实施例中的离散空间与连续空间极值点的差别图。

图5为本发明实施例中的键点方向直方图。

具体实施方式

下面结合具体实施例对本发明作进一步描述,在此发明的示意性实施例以及说明用来解释本发明,但并不作为对本发明的限定。

如图1所示,本发明的技术方案具体说明如下:

步骤1:使用sift算法在不同的尺度空间上查找特征点,并提取出其位置、尺寸、旋转不变量等特征值,得到稀疏点云。

sift特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用sift特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的sift物体特征就足以计算出位置与方位。

sift算法分解为一下四步:

1.尺度空间极值点检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。

尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。

1.1.尺度空间的表示

一个图像的尺度空间,l(x,y,σ)定义为一个变化尺度的高斯函数g(x,y,σ)与原图像i(x,y)的卷积。l(x,y,σ)=g(x,y,σ)*i(x,y),其中,*表示卷积计算

m,n表示高斯模板的维度,(x,y)表示图像的像素位置。σ是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。

1.2.空间极值点(关键点)检测

关键点是由高斯差分函数空间的局部极值点组成的,关键点的初步探查是通过同一组内各高斯差分函数相邻两层图像之间比较完成的。为了寻找高斯差分函数的极值点,每一个像素点要和它通尺度的8个相邻点和上下相邻尺度对应的9*2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。具体地,空间极值点(关键点)检测包括以下步骤:

尺度空间极值检测:由于在不同的尺度空间不能使用相同的窗口检测极值点。对小的角点要用小的窗口,对大的角点只能使用大的窗口。为了达到这个目的我们要使用尺度空间滤波器。(尺度空间滤波器可以使用一些列具有不同方差σ的高斯卷积核构成)。使用具有不同方差值σ的高斯拉普拉斯算子(log)对图像进行卷积,log由于具有不同的方差值σ所以可以用来检测不同大小的斑点(当log的方差σ与斑点直径相等时能够使斑点完全平滑)。简单来说方差σ就是一个尺度变换因子。例如,上图中使用一个小方差σ的高斯卷积核是可以很好的检测出小的角点,而使用大方差σ的高斯卷积核时可以很好的检测除大的角点。所以我们可以在尺度空间和二维平面中检测到局部最大值,如(x,y,σ),这表示在σ尺度中(x,y)点可能是一个关键点。(高斯方差的大小与窗口的大小存在一个倍数关系:窗口大小等于6倍方差加1,所以方差的大小也决定了窗口大小)但是这个log的计算量非常大,所以sift算法使用高斯差分算子(dog)来对log做近似。这里需要再解释一下图像金字塔,我们可以通过减少采样(如只取奇数行或奇数列)来构成一组图像尺寸(1,0.5,0.25等)不同的金字塔,然后对这一组图像中的每一张图像使用具有不同方差σ的高斯卷积核构建出具有不同分辨率的图像金字塔(不同的尺度空间)。dog就是这组具有不同分辨率的图像金字塔中相邻的两层之间的差值。如图2所示。

在dog完成之后,就可以在不同的尺度空间和2d平面中搜索局部最大值了。对于图像中的一个像素点而言,它需要与自己周围的8邻域,以及尺度空间中上下两层中的相邻的18(2x9)个点相比。如果是局部最大值,它就可能是一个关键点。基本上来说关键点是图像在相应尺度空间中的最好代表。如图3所示。

本方法使用ift参数的经验值:octaves=4(通过降低采样从而减小图像尺寸,构成尺寸减小的图像金字塔(4层)),尺度空间为5,也就是每个尺寸使用5个不同方差的高斯核进行卷积,初始方差是1.6,k等于根号2等。

由于要在相邻尺度进行比较,如图2右侧每组含4层的高斯差分金字塔,只能在中间两层中进行两个尺度的极值点检测如图3所示,其它尺度则只能在不同组中进行。为了在每组中检测s个尺度的极值点,则高斯差分函数金字塔每组需s+2层图像,而高斯差分函数金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需s+3层图像,实际计算时s在3到5之间。

2.关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。

由步骤1方法检测到的极值点是空间离散的极值点,以下通过拟合三维二次函数来精确确定关键点的位置和尺度。

2.1关键点的精确定位

离散空间的极值点并不是真正的极值点,图4显示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值。

为了提高关键点的稳定性,需要对尺度空间高斯差分函数进行曲线拟合。利用高斯差分函数在尺度空间的泰勒展开式(拟合函数)为:

其中,x=(x,y,σ)t。求导并让方程等于零,可以得到极值点的偏移量为:

对应极值点,方程的值为:其中,代表相对插值中心的偏移量,当它在任一维度上的偏移量大于0.5时,意味着插值中心已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛。

关键点(极值点)定位:

一旦找到关键点,我们就要对它们进行修正从而得到更准确的结果。本方法使用尺度空间的泰勒级数展开来获得极值的准确位置,如果极值点的灰度值小于阈值(0.03)就会被忽略掉。dog算法对边界非常敏感,所以我们必须要把边界去除。本方法使用2x2的hessian矩阵计算主曲率。从harris角点检测的算法中,我们知道当一个特征值远远大于另外一个特征值时,检测到的是边界。所以使用了一个简单的函数,如果比例高于阈值,这个关键点就会被忽略。本方法中给出的边界阈值为10。所以低对比度的关键点和边界关键点都会被去除掉,剩下的就是我们感兴趣的关键点了。

3.关键点方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。

为关键点(极值点)指定方向参数:现在我们要为每一个关键点赋予一个方向参数,这样它才会具有旋转不变性。获取关键点所在尺度空间的邻域,然后计算这个区域的梯度级和方向。根据计算得到的结果创建一个含有36个柱子(每10度一个柱子)的方向直方图。(使用当前尺度空间σ值的1.5倍为方差的圆形高斯窗口和梯度级做权重)。直方图中的峰值为主方向参数,如果其他的任何柱子的高度高于峰值的80%被认为是辅方向。这就会在相同的尺度空间相同的位置构建除具有不同方向的关键点。这对于匹配的稳定性会有所帮助。

3.1关键点方向分配

为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。使用图像梯度的方法求取局部结构的稳定方向。对于在高斯差分函数中检测出来的关键点,采集其在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:

l为关键点所在的尺度空间值,梯度的模值m(x,y)按σ=1.5σ_oct的高斯分布加成,按尺寸采样的3σ原则,邻域窗口半径为3*1.5σ_oct。

在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱(bins),其中每柱10度。如图5所示,直方图的峰值方向代表了关键点的主方向,(为简化,图中只画了八个方向的直方图)。

方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。因此,对于同一梯度值的多个峰值的关键点位置,在相同位置和尺度将会有多个关键点被创建但方向不同。仅有15%的关键点被赋予多个方向,但可以明显的提高关键点匹配的稳定性。

4.关键点特征描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。新的关键点描述符被创建了。选取与关键点周围一个16x16的邻域,把它分成16个4x4的小方块,为每个小方块创建一个具有8个柱子的方向直方图。总共加起来有128个柱子。由此组成长为128的向量就构成了关键点描述符。除此之外还要进行几个测量以达到对光照变化,旋转等的稳定性,如图5所示。

4.1关键点特征描述

通过以上步骤,对于每一个关键点,拥有3个信息:位置、尺度以及方向接下来就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。

步骤2:使用bundler密集化特征点,具体包括:

步骤201、关键点匹配:根据步骤1得到的特征点信息,采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取拍摄图片的第一个图的某个关键点,通过遍历找到第二幅图像中的距离最近的那个关键点。但有些情况下,第二个距离最近的关键点与第一个距离最近的关键点靠的太近。这可能是由于噪声等引起的。此时要计算最近距离与第二近距离的比值。如果比值大于0.8,就忽略掉。这会去除90%的错误匹配,同时只去除5%的正确匹配。重复步骤201可得到图片间的相对位置关系。

步骤202、根据步骤201获取的图片间的相对位置关系,首先把三维空间划分为等大网格,目标是每个网格中至少有一个特征点,利用现有的特征点向其网格的邻域扩散,若这个邻域中已经存在一个与特征点距离较近的特征点或者这个邻域中已经存在一个平均相关系数较大的特征点,则不向该邻域扩散,扩散是将现有特征点的特征值复制到需要扩散的区域;

步骤203、根据步骤201生成图片间的匹配关系,根据匹配关系生成track匹配链,生成track匹配链的步骤如下:对每一张图片的每一个特征作为种子点进行深度优先搜索,并且搜索的时候使用标记不重复访问同一张图片;使用不同图片的特征作为遍历起始点就可以获得双向匹配检验的信息,因此可以对最后的结果进行处理检测一致的track;因为查找的时候涉及的图片数可能会很多,对每一次查询都全部复位运算量太大,使用touched数据结构标记每一张被访问过的图片,使得可以保证生成track的过程中不会重复考虑同一张图片,并且可以根据此信息有选择的将标记数据结构复位;最后将生成的track信息分派到关联的图片,只要有一个track就标记相关图片为相邻的。

步骤3:使用泊松区间重建算法将点云中的信息点连接成曲面,得到最终的三维模型。表面重建过程:

1)定义八叉树。使用八叉树结构存储点集,根据采样点集的位置定义八叉树,然后细分八叉树使每个采样点都落在深度为d的叶节点;

2)设置函数空间:对八叉树的每个节点设置空间函数f,所有节点函数f的线性和可以表示向量场v,基函数f采用了盒滤波的n维卷积;

3)创建向量场:均匀采样的情况下,假设划分的块是常量,通过向量场v逼近指示函数的梯度。采用三次条样插值(三线插值);

4)求解泊松方程:方程的解采用拉普拉斯矩阵迭代求出;

5)提取等值面:为得到重构表面,需要选择阈值获得等值面;先估计采样点的位置,然后用其平均值进行等值面提取,然后用移动立方体算法得到等值面;

6)逐步连接空间所有等值面,最终得到空间三维模型。

本发明的技术方案不限于上述具体实施例的限制,凡是根据本发明的技术方案做出的技术变形,均落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1