技术领域
[0001] 本
发明涉及
三维重建技术领域,具体为一种Volume重建范围的扩展方法及系统。
背景技术
[0002] Kinect可以实时获得距离
传感器、彩色摄影机的原始数据流,并提供较高
精度的深度数据和较高清晰度的彩色图像数据,因此在三维场景重建及
增强现实等领域有广泛应用。
[0003] 目前有较多在三维场景重建的
算法和方案,例如:
[0004] 微软研究院开发的KinectFusion项目,利用kinect获得实时
深度图,将TSDF和权重数据存储在Volume中,并存储于GPU显存中,但是,该算法的Volume
位置是固定的,位于第一
帧相机所在位置的正前方,且重建的空间区域有限,如果要扩大重建区域,需降低Volume的
分辨率或者增大
体素所代表的长度,但会导致重建的点
云稀疏,重建
质量下降;
[0005] Henry Roth等人提出一种Moving Volume的算法,其过程为:重新映射两个Volume重合的区域使得新的Volume在开始阶段就拥有了部分TSDF值,让后续帧能够快速匹配上,因此GPU显存中保存了两倍的Volume空间,Volume的位置跟随相机位置发生移动,扩大了重建区域,但是,Volume之间的数据重新影射需要较多时间;
[0006] Zeng M等人在使用了八叉树(Octree)数据结构来节省显存空间的使用,仅用一个Voxel来表示一整片连续的空的区域,此方法与Voxel Hashing一样,都设计了巧妙的数据结构,希望充分利用有限的显存空间,从而扩展重建范围。
[0007] 综上可知,上述各个方法算法在扩展重建范围和提高重建精度与速度的能
力仍然是有限的。
发明内容
[0008] 为了克服上述所指出的
现有技术的
缺陷,本
发明人对此进行了深入研究,在付出了大量创造性劳动后,从而完成了本发明。
[0009] 具体而言,本发明所要解决的技术问题是:提供一种Volume重建范围的扩展方法,以解决上述现有的重建范围的扩展算法在扩展重建范围和提高重建精度与速度的能力仍然是有限的的技术问题。
[0010] 为解决上述技术问题,本发明的技术方案是:
[0011] 一种Volume重建范围的扩展方法,所述方法包括下述步骤:
[0012] 在GPU显存中
申请一个空的Volume,控制Volume计数器加一,并对空的Volume进行初始化操作;
[0013] 对相机的移动进行
跟踪,获取相机当前的
位姿参数,并判断相机当前的位姿参数是否在当前Volume所对应的位姿
阈值参数范围内;
[0014] 当相机当前的位姿参数在当前Volume所对应的位姿阈值参数范围内时,则执行场景重建的动作;
[0015] 当相机当前的位姿参数不在当前Volume所对应的位姿阈值参数范围内时,则判断相机当前的位姿参数是否在其他已申请的Volume所对应的位姿阈值范围内;
[0016] 当相机当前的位姿参数在其他已申请的所对应的位姿阈值范围内时,则切换到对应的Volume上,并执行所述场景重建的动作的步骤;
[0017] 当相机当前的位姿参数不在其他已申请的所对应的位姿阈值范围内时,则根据Volume计数器的累加结果判断当前已申请的Volume的数量是否大于预设值;
[0018] 当当前已申请的Volume的数量大于等于预设值时,则结束Volume重建范围的扩展;
[0019] 当当前已申请的Volume的数量小于预设值时,则返
回执行所述在GPU显存中申请一个空的Volume的步骤。
[0020] 作为一种改进的方案,所述对空的Volume进行初始化操作的步骤具体包括下述步骤:
[0021] 在GPU显存中申请512M的显存空间,将512M的显存空间划分为512×512×512个体素;
[0022] 对重建区域内的每一个体素进行扫描操作,所述第一个Volume位于所述相机第一帧的正前方。
[0023] 作为一种改进的方案,所述对相机的移动进行跟踪,获取相机当前的位姿参数的步骤具体包括下述步骤:
[0024] 当所述相机每集成一帧新的深度图,计算相机移动的增量;
[0025] 则根据所述相机第一帧对应的位姿参数以及计算得到的相机移动的增量,计算相机当前的位姿参数。
[0026] 作为一种改进的方案,所述位姿参数包括相机的旋转
角度和平移分量。
[0027] 作为一种改进的方案,所述Volume的数量的预设值为四个。
[0028] 本发明的另一目的在于提供一种Volume重建范围的扩展系统,所述系统包括:
[0029] Volume申请模
块,用于在GPU显存中申请一个空的Volume;
[0030] 计数模块,用于在所述Volume申请模块执行申请动作时,控制Volume计数器加一;
[0031] 初始化模块,用于对所述Volume申请模块申请的空的Volume进行初始化操作;
[0032] 相机跟踪模块,用于对相机的移动进行跟踪,获取相机当前的位姿参数;
[0033] 第一判断模块,用于判断相机当前的位姿参数是否在当前Volume所对应的位姿阈值参数范围内;
[0034] 场景重建模块,用于当相机当前的位姿参数在当前Volume所对应的位姿阈值参数范围内时,则执行场景重建的动作;
[0035] 第二判断模块,用于当相机当前的位姿参数不在当前Volume所对应的位姿阈值参数范围内时,则判断相机当前的位姿参数是否在其他已申请的Volume所对应的位姿阈值范围内;
[0036] Volume切换模块,用于当相机当前的位姿参数在其他已申请的所对应的位姿阈值范围内时,则切换到对应的Volume上,所述场景重建模块执行所述场景重建的动作的步骤;
[0037] 第三判断模块,用于当相机当前的位姿参数不在其他已申请的所对应的位姿阈值范围内时,则根据Volume计数器的累加结果判断当前已申请的Volume的数量是否大于预设值;
[0038] 结束模块,用于当当前已申请的Volume的数量大于等于预设值时,则结束Volume重建范围的扩展;
[0039] 当当前已申请的Volume的数量小于预设值时,则返回Volume申请模块执行所述在GPU显存中申请一个空的Volume的步骤。
[0040] 作为一种改进的方案,所述初始化模块具体包括:
[0041] 显存空间申请模块,用于在GPU显存中申请512M的显存空间,将512M的显存空间划分为512×512×512个体素;
[0042] 体素扫描模块,用于对重建区域内的每一个体素进行扫描操作,所述第一个Volume位于所述相机第一帧的正前方。
[0043] 作为一种改进的方案,所述相机跟踪模块具体包括:
[0044] 移动增量计算模块,用于当所述相机每集成一帧新的深度图,计算相机移动的增量;
[0045] 位姿计算模块,用于则根据所述相机第一帧对应的位姿参数以及计算得到的相机移动的增量,计算相机当前的位姿参数。
[0046] 作为一种改进的方案,所述位姿参数包括相机的旋转角度和平移分量。
[0047] 作为一种改进的方案,所述Volume的数量的预设值为四个。
[0048] 采用了上述技术方案后,本发明的有益效果是:
[0049] 在GPU显存中申请一个空的Volume,控制Volume计数器加一,并对空的Volume进行初始化操作;对相机的移动进行跟踪,获取相机当前的位姿参数,根据相机的位姿参数判断相机的移动,以此判定执行切换Volume或重建Volume的动作,从而实现在保持重建速度和重建精度的前提下,有效对重建范围进行扩展,而且在来回切换场景时,无需Volume重建,提高了系统的
稳定性。
附图说明
[0050] 图1是本发明提供的Volume重建范围的扩展方法的实现
流程图;
[0051] 图2是本发明提供的Volume重建范围的扩展系统的结构
框图。
具体实施方式
[0052] 下面结合具体的
实施例对本发明进一步说明。但这些例举性实施方式的用途和目的仅用来例举本发明,并非对本发明的实际保护范围构成任何形式的任何限定,更非将本发明的保护范围局限于此。
[0053] 图1示出了本发明提供的Volume重建范围的扩展方法的实现流程图,其具体包括下述步骤:
[0054] 在步骤S101中,在GPU显存中申请一个空的Volume,控制Volume计数器加一,并对空的Volume进行初始化操作。
[0055] 在该步骤中,Volume的虚拟立方体存储在GPU显存中,将重建范围限制在Volume当中;
[0056] 申请的Volume的位置由第一帧Kinect摄像头的位置决定,并且在第一帧相机所在的位置的正前方,利用Volume算法对申请的Volume进行初始化,即:
[0057] 记录Volume所对应的相机位姿,并且使Volume立方体重建区域位于当前相机正前方大概0.4米的区域,即相机位于重建区域所在的立方体的正后方0.4米处,距离重建区域立方体中心的距离为重建区域立方体的半径1.5米+0.4米。将此立方体划分为512×512×512个体素,每个体素实际代表空间中3mm×3mm×3mm的小立方体,重建范围约1.5米,重建精度约3mm,此时,每个体素的值并不表示三维点,而是保存体素到最近表面的距离TDSF以及它的权重Weight,并且,将这两组数据分别存储为short类型,共占四个字节,其中初始化的具体实现如下实施例所记载,在此不再赘述。
[0058] 在步骤S102中,对相机的移动进行跟踪,获取相机当前的位姿参数。
[0059] 在该步骤中,计算世界
坐标系下的相机位姿,包括其位置与旋转角度,利用ICP算法跟踪相机每一帧,并计算得到当前相机位姿相对于第一帧相机位姿之间的差别。
[0060] 在步骤S103中,判断相机当前的位姿参数是否在当前Volume所对应的位姿阈值参数范围内,是则执行步骤S104,否则执行S105。
[0061] 在该步骤中,给相机设置一个位姿阈值参数范围,该位姿阈值参数范围包括平移阈值和旋转角度阈值,检测相机移动的每一帧,将相机位姿矩阵转换成直角坐标系的平移分量和旋转角度分量,比较当前相机的位姿和第一帧相机位姿,如果平移分量或旋转角度分量超过设定的位姿阈值参数范围,则判断相机当前位姿超出该位姿阈值参数范围。
[0062] 在步骤S104中,当相机当前的位姿参数在当前Volume所对应的位姿阈值参数范围内时,则执行场景重建的动作。
[0063] 在该步骤中,在相机位于当前的Volume时,在当前的Volume进行场景重建。
[0064] 在步骤S105中,当相机当前的位姿参数不在当前Volume所对应的位姿阈值参数范围内时,则判断相机当前的位姿参数是否在其他已申请的Volume所对应的位姿阈值范围内,是则执行步骤S106,否则执行步骤S107。
[0065] 当相机当前的位置不处于当前的Volume内时,即当前Volume已不在相机的
视野范围内,则判断相机视野是否在已经申请的其他Volume内,若是则直接切换Volume,否则以及已经申请的Volume的数量判断是否继续申请Volume。
[0066] 在步骤S106中,当相机当前的位姿参数在其他已申请的所对应的位姿阈值范围内时,则切换到对应的Volume上,并返回执行步骤S104。
[0067] 当进行Volume的切换后,在切换后的Volume内继续进行场景重建。
[0068] 在步骤S107中,当相机当前的位姿参数不在其他已申请的所对应的位姿阈值范围内时,则根据Volume计数器的累加结果判断当前已申请的Volume的数量是否大于预设值,是则执行步骤S108,否则返回执行步骤Sl01。
[0069] 在该步骤中,需要预先设置Volume的申请数量,该Volume的数量的预设值为四个,当然也可以采用其他数量,在此不再赘述。
[0070] 当超过该预设值时,则结束重建范围的扩展,当少于四个时,则可以继续申请Volume。
[0071] 在步骤S108中,当当前已申请的Volume的数量大于等于预设值时,则结束Volume重建范围的扩展。
[0072] 即:当当前已申请的Volume的数量小于预设值时,则返回执行所述在GPU显存中申请一个空的Volume的步骤。
[0073] 在本发明实施例中,对空的Volume进行初始化操作的步骤具体包括下述步骤:
[0074] 1)、在GPU显存中申请512M的显存空间,将512M的显存空间划分为512×512×512个体素;
[0075] 2)、对重建区域内的每一个体素进行扫描操作,所述第一个Volume位于所述相机第一帧的正前方。
[0076] 其中,该对重建区域内的每一个体素进行扫描的过程,即具体的初始化的过程为:
[0077] (1)在Volume内,并行从前往后扫描每个体素;
[0078] (2)将体素的网格坐标转换为世界坐标系;
[0079] (3)对相机第一帧进行矩阵求逆,用其将体素转换到当前相机坐标系下;
[0080] (4)将相机坐标系的点投影到图像坐标点,从三维转换到二维;
[0081] (5)如果
像素点在相机视野范围内,则求该相机坐标系点到本次相机原点的距离与本次观测深度的差值;
[0082] (6)如果上述计算得到的差值>0,TDSF数据则取值min(1,差值/max_truncation),且赋值在[0,1]之间;
[0083] 否则取值max(-1,差值/min_truncation),赋值在[-1,0]之间,其中,max_truncation表示选取的截断范围,并对最后重建结果的精细程度有影响;
[0084] 计算得到的差值>0时,表示体素在场景表面后方,越大表示体素距离场景表面越远;
[0085] 计算得到的差值<0时,表示体素在场景表面前方,越小表示体素距离场景表面越远;越靠近观测面的地方,越接近0;
[0086] (7)选取本次计算值的权重值,取值min(max_weight,0),这个权值的选取影响图片的适应性,以及抗噪声的能力,权重为0的地方表示是空的,每次权值+1的操作能照顾到迅速变化的或很少扫描到的面的变化,因此,只有在相机拍摄范围内的点才会进入加权的操作,每次的权值在原先的
基础上增加1能照顾到迅速变化的或很少扫描到的面的变化;
[0087] (8)加权平均求和;
[0088] (9)将步骤(8)中求取的和作为两个short类型数据存储到对应的体素中,进行下一个体素的扫描操作,此时每个体素占4个字节,划分为512×512×512个体素时,将占512M显存空间,并利用GPU并行计算的能力更新Volume数据,完成Volume的初始化。
[0089] 在本发明实施例中,在一台配备E3-1245V5
中央处理器,NVIDIA GeForce GTX1050Ti显卡的工作站上实现了上述记载的技术方案,在工作站电脑上保持使用与Kinect传感器一样的30fps的
帧速率以保证相机跟踪的稳定性。
[0090] 在扫描了面积约为30m2的多个房间,结果表明,在目前的
硬件配置上,本发明实施例可以在较短的时间内将整个房间扫描完成,在保证精度为3mm的条件下,重建范围从1.5米扩展到6米,并且可以有效地解决扫描大场景时遇到的精度较差,累积误差严重等问题。
[0091] 图2示出了本发明提供的Volume重建范围的扩展系统的结构框图,为了便于说明,图中仅给出了与本发明实施例相关的部分。
[0092] Volume申请模块11,用于在GPU显存中申请一个空的Volume;
[0093] 计数模块12,用于在所述Volume申请模块执行申请动作时,控制Volume计数器加一;
[0094] 初始化模块13,用于对所述Volume申请模块申请的空的Volume进行初始化操作;
[0095] 相机跟踪模块14,用于对相机的移动进行跟踪,获取相机当前的位姿参数;
[0096] 第一判断模块15,用于判断相机当前的位姿参数是否在当前Volume所对应的位姿阈值参数范围内;
[0097] 场景重建模块16,用于当相机当前的位姿参数在当前Volume所对应的位姿阈值参数范围内时,则执行场景重建的动作;
[0098] 第二判断模块17,用于当相机当前的位姿参数不在当前Volume所对应的位姿阈值参数范围内时,则判断相机当前的位姿参数是否在其他已申请的Volume所对应的位姿阈值范围内;
[0099] Volume切换模块18,用于当相机当前的位姿参数在其他已申请的所对应的位姿阈值范围内时,则切换到对应的Volume上,所述场景重建模块16执行所述场景重建的动作的步骤;
[0100] 第三判断模块19,用于当相机当前的位姿参数不在其他已申请的所对应的位姿阈值范围内时,则根据Volume计数器的累加结果判断当前已申请的Volume的数量是否大于预设值;
[0101] 结束模块20,用于当当前已申请的Volume的数量大于等于预设值时,则结束Volume重建范围的扩展;
[0102] 当当前已申请的Volume的数量小于预设值时,则返回Volume申请模块执行所述在GPU显存中申请一个空的Volume的步骤。
[0103] 其中,初始化模块13具体包括:
[0104] 显存空间申请模块21,用于在GPU显存中申请512M的显存空间,将512M的显存空间划分为512×512×512个体素;
[0105] 体素扫描模块22,用于对重建区域内的每一个体素进行扫描操作,所述第一个Volume位于所述相机第一帧的正前方。
[0106] 相机跟踪模块14具体包括:
[0107] 移动增量计算模块23,用于当所述相机每集成一帧新的深度图,计算相机移动的增量;
[0108] 位姿计算模块24,用于则根据所述相机第一帧对应的位姿参数以及计算得到的相机移动的增量,计算相机当前的位姿参数。
[0109] 其中,上述各个模块的功能如上述方法实施例所记载,在此不再赘述。
[0110] 在本发明实施例中,在GPU显存中申请一个空的Volume,控制Volume计数器加一,并对空的Volume进行初始化操作;对相机的移动进行跟踪,获取相机当前的位姿参数,根据相机的位姿参数判断相机的移动,以此判定执行切换Volume或重建Volume的动作,从而实现在保持重建速度和重建精度的前提下,有效对重建范围进行扩展,而且在来回切换场景时,无需Volume重建,提高了系统的稳定性。
[0111] 应当理解,这些实施例的用途仅用于说明本发明而非意欲限制本发明的保护范围。此外,也应理解,在阅读了本发明的技术内容之后,本领域技术人员可以对本发明作各种改动、
修改和/或变型,所有的这些等价形式同样落于本申请所附
权利要求书所限定的保护范围之内。