CN116324880A - 使用平面分割的对象扫描 - Google Patents
使用平面分割的对象扫描 Download PDFInfo
- Publication number
- CN116324880A CN116324880A CN202180055267.9A CN202180055267A CN116324880A CN 116324880 A CN116324880 A CN 116324880A CN 202180055267 A CN202180055267 A CN 202180055267A CN 116324880 A CN116324880 A CN 116324880A
- Authority
- CN
- China
- Prior art keywords
- frame
- plane
- mesh
- model
- tracking
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000011218 segmentation Effects 0.000 title claims description 132
- 238000000034 method Methods 0.000 claims abstract description 218
- 238000001514 detection method Methods 0.000 claims description 93
- 230000008569 process Effects 0.000 description 128
- 238000010586 diagram Methods 0.000 description 25
- 238000012545 processing Methods 0.000 description 19
- 230000011664 signaling Effects 0.000 description 19
- 238000004891 communication Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 239000003795 chemical substances by application Substances 0.000 description 11
- 230000003287 optical effect Effects 0.000 description 10
- 238000000638 solvent extraction Methods 0.000 description 7
- 230000002093 peripheral effect Effects 0.000 description 6
- 230000003190 augmentative effect Effects 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 239000011521 glass Substances 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 3
- 238000000354 decomposition reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000005484 gravity Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 239000013598 vector Substances 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004807 localization Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 208000013057 hereditary mucoepithelial dysplasia Diseases 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000005022 packaging material Substances 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 238000011524 similarity measure Methods 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/215—Motion-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
- G06T17/205—Re-meshing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/006—Mixed reality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/12—Edge-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
- G06T7/55—Depth or shape recovery from multiple images
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10028—Range image; Depth image; 3D point clouds
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/56—Particle system, point based geometry or rendering
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Geometry (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Image Analysis (AREA)
- Processing Or Creating Images (AREA)
Abstract
提供用于从一个或多个图像或帧来产生三维模型的技术。例如,可以获得场景中对象的至少一个帧。对象的部分在至少一个帧中位于平面上。可以在至少一个帧中检测到平面,并且基于检测到的平面,可以在至少一个帧中从平面分割对象。可以基于从平面分割对象来产生该对象的三维(3D)模型。可以产生与位于平面上的对象的该部分的3D模型的部分对应的细化网格。
Description
技术领域
本公开大体上涉及图像处理,并且更具体地涉及使用平面分割来执行对象扫描的技术和系统。
背景技术
许多设备和系统允许通过产生场景的帧(还称作图像)和/或视频数据(包括多个帧)来捕捉场景。例如,相机或包括相机的计算设备(例如,诸如包括一个或多个相机的移动电话或智能电话的移动设备)可以捕捉场景的帧序列。图像和/或视频数据可以由此类设备和系统(例如,移动设备、IP相机等)捕捉和处理,并且可以被输出以供消耗(例如,显示在设备和/或其他设备上)。在一些情况下,图像和/或视频数据可以由此类设备和系统捕捉,并输出以供其他设备处理和/或消耗。
可以对帧或图像进行处理(例如,使用对象检测、辨识、分割等)以确定帧中存在的任何对象,这对于许多应用是有用的。例如,模型可以被确定用于表示帧中的对象,并且可以被用于促进各种系统的有效操作。此类应用和系统的示例包括增强现实(AR)、机器人、汽车和航空、三维场景理解、对象抓取、对象跟踪,以及许多其他应用和系统。
发明内容
在一些示例中,描述了用于处理一个或多个帧(或图像)并使用平面分割对(一个或多个)帧中的一个或多个对象执行对象扫描的技术和系统。例如,可以获得包括平面表面上的对象的帧(或多个帧)。使用平面分割的对象扫描技术可以应用于帧(或多个帧)以产生该帧(或多个帧)中的平面表面上的对象的三维模型。
根据至少一个说明性示例,提供一种产生一个或多个三维模型的方法。该方法包括:获得场景中对象的至少一个帧,其中对象的部分在至少一个帧中位于平面上;在至少一个帧中检测平面;基于检测到的平面在至少一个帧中从平面分割该对象;基于从平面分割对象来产生该对象的三维(3D)模型;以及产生与位于平面上的对象的该部分对应的3D模型的部分的细化网格。
在另一示例中,提供一种用于产生一个或多个三维模型的装置,其包括被配置成存储一个或多个帧的存储器和耦合到该存储器的一个或多个处理器(例如,用电路实现)。该一个或多个处理器被配置成并且可以:获得场景中对象的至少一个帧,其中对象的部分在至少一个帧中位于平面上;在至少一个帧中检测平面;基于检测到的平面在至少一个帧中从平面分割该对象;基于从平面分割对象来产生该对象的三维(3D)模型;以及产生对应于位于平面上的对象的该部分的3D模型的部分的细化网格。
在另一示例中,提供一种非暂时性计算机可读介质,其上存储有指令这些指令在由一个或多个处理器执行时,使得一个或多个处理器:获得场景中对象的至少一个帧,其中对象的部分在至少一个帧中位于平面上;在至少一个帧中检测平面;基于检测到的平面在至少一个帧中从平面分割该对象;基于从平面分割对象来产生该对象的三维(3D)模型;以及产生与位于平面上的对象的该部分对应的3D模型的部分的细化网格。
在另一示例中,提供一种用于产生一个或多个三维模型的装置。该装置包括:用于获得场景中对象的至少一个帧的部件,其中对象的部分在至少一个帧中位于平面上;用于在至少一个帧中检测平面的部件;用于基于检测到的平面在至少一个帧中从平面分割该对象的部件;用于基于从平面分割对象来产生该对象的三维(3D)模型的部件;以及用于产生与位于平面上的对象的该部分对应的3D模型的部分的细化网格的部件。
在一些方面,至少一个帧包括场景中与至少一个帧的像素的深度对应的深度信息。
在一些方面,至少一个帧包括第一帧。在此类方面,上文所描述的方法、装置和计算机可读介质还包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;从第一帧到第二帧跟踪该平面;基于跟踪该平面,在第二帧中从平面分割该对象;以及基于在第一帧和第二帧中从平面分割该对象来产生对象的3D模型。
在一些方面,从第一帧到第二帧跟踪平面包括跟踪该平面的姿态,并且其中基于第二帧中平面的跟踪的姿态来从该平面分割对象。
在一些方面,上文所描述的方法、装置和计算机可读介质还包含:确定从第二帧分割的对象的像素数量;确定该像素数量是在从第一帧分割的对象的阈值像素数量内;以及基于该像素数量是在从第一帧分割的对象的阈值像素数量内,确定在第二帧中从平面分割该对象是成功的。
在一些方面,至少一个帧包括第一帧。在此类方面,上文所描述的方法、装置和计算机可读介质还包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定平面已被跟踪的帧的数量;以及基于平面已被跟踪的帧的数量来确定是对第二帧执行平面检测还是对象跟踪。
在一些方面,上文所描述的方法、装置和计算机可读介质还包含:基于确定平面已被跟踪的帧的数量满足跟踪阈值,基于第二帧中的平面检测来检测该平面。
在一些方面,上文所描述的方法、装置和计算机可读介质还包含:基于确定平面已被跟踪的帧的数量小于跟踪阈值,基于从第一帧到第二帧的对象跟踪来跟踪该平面。
在一些方面,至少一个帧包括第一帧。在此类方面,上文所描述的方法、装置和计算机可读介质还包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定对象的平面分割失败的数量,当没有在帧中从平面分割对象时发生平面分割失败;以及基于确定对象的平面分割失败的数量满足失败阈值来在第二帧中检测平面。
在一些方面,产生用于对象的3D模型的部分的细化网格包括:产生用于对象的3D模型的该部分的初始网格;确定包括属于初始网格的单个三角形的初始网格的边的边界集;以及使用该边界集产生用于对象的3D模型的该部分的细化网格。
在一些方面,产生对象的3D模型包括:获得场景中对象的第一帧;在第一帧中从平面分割对象;产生第一帧中与对象相关联的点的第一3D网格;获得场景中对象的第二帧;在第二帧中从平面分割对象;产生第一帧中与对象相关联的点的第二3D网格;以及组合点的第一3D网格和点的第二3D网格。
在一些方面,该装置包含相机(例如,IP相机)、移动设备(例如,移动电话或所谓的“智能电话”或其他移动设备)、可穿戴设备、扩展现实设备(例如,虚拟现实(VR)设备、增强现实(AR)设备或混合现实(MR)设备)、个人计算机、膝上型计算机、服务器计算机或其他设备。在一些方面,该装置包括用于捕捉一个或多个帧或图像的相机或多个相机。在一些方面,该装置还包括用于显示一个或多个帧或图像、通知和/或其他可显示数据的显示器。
此发明内容并不意图标识所要求保护主题的关键或基本特征,也不意图单独用于确定所要求保护主题的范围。应该通过参考本专利的整个说明书的适当部分、任何或所有附图以及每一权利要求来理解主题。
参考以下说明书、权利要求和附图,前述内容以及其他特征和实施例将变得更加明显。
附图说明
下面参考以下附图详细描述本申请的说明性实施例:
图1A、图1B和图1C是示出根据一些示例的来自两个不同视角的对象的三维(3D)扫描结果的示例的概念图;
图2A和图2B是示出根据一些示例的来自两个不同视角的重建结果(展示为3D模型)的示例的概念图;
图3是示出根据一些示例的模型产生系统的示例的框图;
图4是示出根据一些示例的捕捉输入帧的图像捕捉设备的示例性操作的图;
图5A和图5B是示出根据一些示例的使用平面检测的对象分割的结果的概念图;
图6是示出根据一些示例的用于基于分割一致性度量来执行平面检测的示例性过程的流程图;
图7是示出根据一些示例的示例性基于跟踪的对象分割过程的流程图;
图8A是根据一些示例的深度图图像的图示;
图8B是根据一些示例的包括使用平面信息获得的分割结果的图像的图示;
图8C是根据一些示例的包括使用目标对象定位信息获得的分割结果的图像的图示;
图9A是示出根据一些示例的单种子方法的结果的图像;
图9B是示出根据一些示例的多个种子方法的结果的图像;
图10是示出根据一些示例的用于产生包括重新网格化的底部部分的3D模型的示例性过程的流程图;
图11A、图11B和图11C是示出根据一些示例的边界重新网格化过程的示例性操作的图;
图12是示出根据一些示例的用于产生一个或多个3D模型的示例性过程的流程图;以及
图13是示出用于实现本文描述的某些方面的示例性系统的图。
具体实施方式
下文提供本公开的某些方面和实施例。这些方面和实施例中的一些可以独立应用,并且其中一些可以组合应用,这对本领域技术人员来说是显而易见的。在以下描述中,出于解释的目的,阐述了具体细节,以便提供对本申请的实施例的透彻理解。然而,将显而易见,可以在没有这些具体细节的情况下实践各种实施例。附图和描述并不意图是限制性的。
随后的描述仅提供例示性实施例,并不意图限制本公开的范围、适用性或配置。相反,例示性实施例的随后描述将为本领域技术人员提供用于实现例示性实施例的使能描述。应理解,在不脱离所附权利要求中阐述的本申请的精神和范围的情况下,可以对元件的功能和布置进行各种改变。
物理对象的三维(3D)模型的产生可以用于许多系统和应用,诸如扩展现实(XR)(例如,包括增强现实(AR)、虚拟现实(VR)、混合现实(MR)等)、机器人、汽车、航空、3D场景理解、对象抓取、对象跟踪,以及许多其他系统和应用。例如,在AR环境中,用户可以查看包括人工或虚拟图形与用户自然环境的集成的帧或图像。如本文所使用,术语“帧”和“图像”可以互换使用。例如,帧或图像可以由设备的相机捕捉,并且可以包括定义由图像捕捉的场景中的对象、背景和/或其他信息的像素数据。AR应用允许对帧进行处理,以将虚拟对象添加到帧中,并在多个维度上将虚拟对象与帧对齐或配准。例如,现实中存在的真实世界对象可以使用类似于真实世界对象或者是真实世界对象的精确匹配的模型来表示。在一个示例中,可以在AR设备(例如,移动设备、AR眼镜、AR头戴式显示器(HMD)或其他设备)的视野中呈现表示位于跑道上或在跑道上移动的真实飞机的虚拟飞机模型,同时用户继续在AR环境中查看他或她的自然环境。观看者可以能够在观看真实世界场景的同时操纵模型。在另一示例中,位于桌子上或在桌子上移动的实际对象可以被识别,并在AR环境中使用具有不同颜色或不同物理属性的模型来渲染。在一些情况下,现实中不存在的人工虚拟对象或计算机产生的实际对象或用户自然环境结构的副本也可以添加到AR环境中。
3D对象扫描应用可用于允许用户在短处理时间内构建高质量的3D模型。3D模型可以包括具有不同深度的点的3D网格。各种设备能够执行3D对象扫描功能。通过并入具有切割边缘跟踪算法的新型传感器,设备制造商(例如,原始装备制造商或OEM)能够为消费级设备(例如,诸如智能电话的移动电话、诸如AR眼镜和VR HMD的XR设备以及其他设备)提供3D对象扫描能力。通过为消费级设备提供3D对象扫描功能性,更多不同技能的用户能够产生用于虚拟世界的新颖内容。
为了对目标对象执行3D对象扫描,设备可以从不同视角(例如,从不同位置和角度)捕捉目标对象的帧序列(例如,一系列帧或视频)。然后,可以使用帧序列为目标对象产生3D模型(也称作3D重建)。目标对象可以放置在包括平面表面的支撑平面上或者可以在其上移动,这在执行3D扫描并产生对象的3D模型时会导致问题。例如,可能很难或不可能在不包括支撑平面的情况下扫描对象。此外,不能透过平面表面来捕捉帧以提供具有来自对象底部的视角(称为从下到上视角)的帧。因为支撑平面被包括在帧序列中,并且因为对象的位于平面上的部分被该平面遮挡(在此情况下,不能透过该平面捕捉帧),所以当在重建期间移除该平面时,3D模型在位于该平面上或该平面附近的对象的部分(例如,对象的底部)将不完整。在此类情况下,当显示3D模型的该部分时,使用帧序列产生的对象的3D模型将是不完整的和/或包括中空的伪影。
图1A和图1B是示出来自两个不同视角的对象110的3D扫描结果的示例的概念图。图1A示出了3D模型102(由3D重建产生),其具有来自对象顶部的视角(称作从上到下视角)。图1B示出来自从下到上视角的3D模型103(由3D重建产生)。从图1B可见,支撑对象的支撑平面111可能导致质量差的3D模型,其可能不适合于特定应用(例如,用于使用AR或VR应用或其他XR应用的显示)。支撑平面111遮挡了对象110的底部。图1C示出由于图1A和图1B所示的遮挡支撑平面111而具有中空底部的重建对象110。
本文描述了系统、装置、过程(也称作方法)和计算机可读介质(统称为“系统和技术”),用于通过从3D模型中移除平面并修补位于该平面表面上的对象的中空部分来解决上述问题。可以执行的两个高级过程包括基于跟踪的对象分割和网格完成处理。对象分割可以包括将平面检测特征集成到跟踪系统中,这可以允许重建没有平面并且具有封闭部分的对象,其中该对象的位于平面上(没有中空伪影)。例如,该系统和技术可以检测帧序列的每一帧中的平面,并且可以在跟踪帧序列中的对象的同时执行对象分割。可以执行对象分割以分割出帧序列的每一帧中的目标对象。与对象的位于平面上的部分(被平面表面遮挡的部分)相关联的信息可以被获得并用于产生对象的3D模型的底部的网格。对象的位于该平面上的部分在本文将被称为对象的“底部”部分。然而,普通技术人员将会理解,对象位于平面上的部分可以包括对象的任何部分。
在一些实现方式中,可以“在线”(或“实时”或接近实时)执行对象分割,意味着可以在接收和处理帧以基于处理帧来产生3D模型时执行对象分割。在一些示例中,底部网格产生可以在已经产生3D模型之后作为后处理过程来执行。在一些实现方式中,当接收和处理帧以产生具有完整底部网格的3D模型时,可以在线执行对象分割和底部网格产生。
图2A和图2B是示出来自两个不同视角的重建结果(展示为3D模型)的示例的概念图。例如,图2A从透视图示出了3D模型202(由重建产生),并且图2B从从下到上的视角示出了3D模型203(由重建产生)。如图2B所示,本文描述的系统和技术允许产生对象210的3D模型,其中移除了表面平面并且具有完全完整的底部(基于中空底部的网格的产生)。
图3是示出示例性模型产生系统300的框图。模型产生系统300提供用于封闭对象扫描的流水线。模型产生系统300可以用作独立的解决方案,或者可以集成到现有的3D扫描解决方案中。如图3所示,模型产生系统300包括平面检测引擎304、对象跟踪引擎306、分割引擎308、模型产生引擎310和网格细化引擎312。如下文更详细描述,模型产生系统300的各种组件可以用于通过处理位于平面表面上的对象的帧(例如,输入帧302)并产生具有封闭底部的对象的一个或多个3D模型来执行对象扫描。
例如,平面检测引擎304、对象跟踪引擎306和分割引擎308可以执行基于跟踪的对象分割过程。分割引擎308从平面分割对象,允许模型产生引擎310产生对象的3D模型,而不需要与该平面表面相关联的平面。使用下文描述的技术,模型产生系统300可以检测不规则的分割结果,对于可能在跟踪期间发生的漂移是鲁棒的,并且可以从分割失败中恢复。
由模型产生引擎310产生的3D模型对于该对象被平面表面遮挡的一部分(对应于对象的位于该平面表面上或附近的部分)可以具有中空的底部。网格细化引擎312可以执行边界重新网格化过程来产生3D模型的底部部分的细化网格,使得将被输出的3D模型(例如,3D模型314)具有封闭的底部。边界重新网格化过程在不同的复杂底部几何形状上稳健地工作。使用边界重新网格化过程,可以在模糊的几何条件下(例如,一个顶点由边界上的n(n>2)条边共享,如下文更详细描述)检测和处理多个封闭边界(例如,包括连续边的闭环)。在下文描述关于模型产生系统300的各种组件的操作的进一步细节。
模型产生系统300可以是单个计算设备或多个计算设备的一部分,或者由单个计算设备或多个计算设备实现。在一些示例中,模型产生系统300可以包括以下各项或者是以下各项的部分:单个电子设备(诸如移动或电话手机(例如,智能电话、蜂窝式电话等))、诸如HMD或AR眼镜的XR设备、相机系统(例如,数码相机、IP相机、摄像机、安全相机等)、台式计算机、膝上型或笔记型计算机、平板计算机、物联网(IoT)设备、机顶盒、电视(例如,网络或因特网连接的电视)或其他显示设备、数字媒体播放器、游戏控制台、视频流设备、无人机或无人驾驶飞行器或任何其他合适的电子设备。在一些示例中,模型产生系统300可以包括用于无线通信的一个或多个无线收发器,诸如蜂窝式网络通信、802.11wi-fi通信、无线局域网(WLAN)通信或其一些组合。在一些实现方式中,模型产生系统300可以被实现为图13中所示的计算系统1300的部分。
虽然模型产生系统300被示为包括某些组件,但是普通技术人员将了解,模型产生系统300可以包括比图3中所示更多的组件。模型产生系统300的组件可以包括软件、硬件或者软件和硬件的一个或多个组合。例如,在一些实现方式中,模型产生系统300的组件可以包括和/或可以使用电子电路或其他电子硬件来实现,其可以包括一个或多个可编程电子电路(例如,微处理器、GPU、DSP、CPU和/或其他合适的电子电路),和/或可以包括和/或使用计算机软件、固件或其任何组合来实现,从而执行本文描述的各种操作。软件和/或固件可以包括一个或多个指令,这些指令存储在计算机可读存储介质上并可由实现模型产生系统300的电子设备的一个或多个处理器执行。
虽然图3中未展示,但模型产生系统300可以包括各种计算组件。计算组件可以包括,例如且非限制,中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)(诸如主机处理器或应用处理器)、和/或图像信号处理器(ISP)。在一些情况下,一个或多个计算组件可以包括其他电子电路或硬件、计算机软件、固件或其任何组合,以执行本文所描述各种操作中的任一者。计算组件还可以包括计算设备存储器,诸如只读存储器(ROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、一个或多个高速缓存存储器设备(例如,CPU高速缓冲存储器或其他高速缓存组件)、以及其他存储器组件。
模型产生系统300还可以包括一个或多个输入/输出(I/O)设备。I/O设备可以包括显示屏、键盘、小键盘、触摸屏、轨迹板、触敏表面、打印机、任何其他输出设备、任何其他输入设备或其任何组合。在一些示例中,I/O设备可以包括一个或多个端口、插孔或其他连接器,其实现模型产生系统300与一个或多个外围设备之间的有线连接,通过该有线连接,系统300可以从一个或多个外围设备接收数据和/或向一个或多个外围设备传输数据。在一些示例中,I/O设备可以包括一个或多个无线收发器,其实现模型产生系统300与一个或多个外围设备之间的无线连接,通过该无线连接,系统300可以从一个或多个外围设备接收数据和/或向一个或多个外围设备传输数据。外围设备可以包括任何前述类型的I/O设备,并且一旦它们耦合到端口、插孔、无线收发器或其他有线和/或无线连接器,它们本身可以被认为是I/O设备。
如图3中所示,输入帧302输入到模型产生系统300。输入帧302的每一帧捕捉位于场景中表面上的对象。在一些示例中,该表面可以包括平面表面。当图像捕捉设备在对象周围移动时,图像捕捉设备可以在图像捕捉过程期间从不同角度捕捉输入帧302。例如,当输入帧302被捕捉时,用户可以在对象周围移动图像捕捉设备。
每一帧包括多个像素,并且每一像素对应于一组像素值,诸如深度值、光度值(例如,红绿蓝(RGB)值、强度值、色度值、饱和度值等)或其组合。在一些示例中,除了光度值(例如,RGB值)之外或者作为光度值的替代,输入帧302可以包括深度信息。例如,输入帧302可以包括深度图(例如,由诸如深度传感器或相机之类的3D传感器捕捉)、红绿蓝深度(RGB-D)帧或图像,以及包括深度信息的其他类型的帧。除了颜色和/或亮度信息之外,RGB-D帧还允许记录深度信息。在一个说明性示例中,深度传感器可以用于从不同角度捕捉对象的多个深度图。深度图是图像或图像通道(例如,RGB-D帧中的深度通道),其包含指示场景中对象的表面到诸如相机的视点的距离的信息。
图4是示出捕捉输入帧(例如,输入帧302)的图像捕捉设备402的示例性操作的图。在一些情况下,图像捕捉设备可以是系统300的一部分,或者是包括系统300的计算设备的一部分。在一些情况下,图像捕捉设备可以是包括系统300的计算设备之外的独立计算设备的一部分。如图所示,图像捕捉设备402沿着路径404(例如,被示为弧形)围绕或在平面表面411上的对象410(杯子)周围移动。在图像捕捉设备402沿着路径404移动期间,图像捕捉设备402位于各种位置,在图4中被示为相机姿态406A、406B、406C、406D、406E和406F。应注意,图4中所示的相机姿态406A-406F的数量、间隔和定向仅出于说明性目的而展示,并且不应被认为是限制性的。例如,可以使用更多或更少的相机姿态。
基于图像捕捉设备402如何在对象410周围移动,路径404可以是任何配置。在一些示例中,当图像捕捉设备402沿着路径404从与相机姿态406A相关联的位置移动到与相机姿态406F相关联的位置时,对象的各种帧可以被捕捉并用作输入帧302。例如,在相机姿态406A,其表示图像捕捉设备402在沿着路径404的第一位置的初始相机姿态,第一帧可以被图像捕捉设备402捕捉。随着图像捕捉设备402继续沿着路径404移动,可以捕捉附加的帧。在一些示例中,可以以图像捕捉设备的帧速率来连续地捕捉帧。例如,如果图像捕捉设备的帧速率是每秒30帧(30fps),则图像捕捉设备每1秒钟时间可以捕捉30帧。然后可以将输入帧302提供给模型产生系统300。
如上所述,平面检测引擎304、对象跟踪引擎306和分割引擎308可以使用输入帧302来执行基于跟踪的对象分割过程。例如,基于跟踪的机制可以跟踪平面表面(对象位于其上),使得平面检测引擎304对少于所有的输入帧302执行平面检测。在一个示例中,平面检测引擎304可以执行平面检测,以在输入帧302的序列的开始处的一个或多个帧中检测一个或多个平面(例如,对于输入帧302的第一帧、初始帧或初始帧之一)。在一些情况下,平面检测引擎304可以为稍后的帧再次执行平面检测。例如,当对象跟踪引擎306丢失平面时(例如,当平面跟踪丢失或失败时),平面检测引擎304可以再次执行平面检测。对于在已经执行平面检测的一个或多个帧中检测到平面之后的输入帧302的其他帧,对象跟踪引擎306可以逐帧地跟踪该平面。在一些示例中,除了跟踪平面之外,对象跟踪引擎306还可以跟踪平面上的对象。如上所述,当捕捉帧302时,图像捕捉设备可以在对象周围移动(该对象可以在平面表面上静止或者可以在平面表面上移动)。由对象跟踪引擎306执行的跟踪可以包括针对输入帧302的每一帧的跟踪图像捕捉设备相对于对象的位置。基于由平面检测引擎304检测的或由对象跟踪引擎306跟踪的平面,分割引擎308可以在每一帧中从平面中分割对象,并且可以将分割结果提供给模型产生引擎310。
在一些示例中,使用所有输入帧302来执行对象跟踪,而模型产生引擎310仅使用某些帧(本文称为关键帧)来产生输入帧中的对象的3D模型。例如,当捕捉对象的帧时,可以使用以每秒30帧(fps)的帧速率或任何其他帧速率捕捉帧的图像捕捉设备来扫描对象。可以执行对平面(以及在一些情况下对平面上的对象)的跟踪,并且可以计算平面的姿态以在每个帧进行跟踪,在此情况下,姿态每秒被捕捉30次。
可以手动或自动选择或定义关键帧。例如,设备可以捕捉对象的多个帧。从多个捕捉的帧中,一个或多个帧可以被指定为关键帧。多个帧中除关键帧之外的帧可以是非关键帧。在一些示例中,非关键帧可以用于跟踪和/或基于对象检测的分割,但不用于3D模型产生。在一些示例中,可以基于当前帧与一个或多个先前帧之间的差异,从图像捕捉设备捕捉的多个帧中自动地确定关键帧。在一些情况下,可以逐个像素地比较帧。例如,当前帧中的所有像素或像素子集可以与一个或多个先前帧中的所有像素或像素子集进行比较。逐个像素比较可以包括第一帧的像素值(例如,深度值、光度值或其组合)与第二帧(可以包括关键帧或非关键帧)的像素值之间的比较。
该差异可以基于不同帧之间的重叠量、每一帧中相机相对于对象的角度差异、其任何组合和/或其他因素。在一个说明性示例中,重叠阈值可以被设置为某个值(例如,50%的值或任何其他值)。可以确定两个或更多个帧之间的重叠量,这提供了帧序列的两个或更多个帧之间的相似性的数值表示。例如,重叠量可以由相似像素的数量除以像素的总数来确定。当像素完全匹配(例如,对于特定像素值具有相同的数值)或者当像素基本匹配(例如,第一像素的数值在第二像素的对应数值的差异阈值内)时,可以确定两个或更多个帧的像素是相似的。
在一些情况下,重叠量可以基于在不同帧中捕捉的对象之间的重叠(例如,基于在帧之间完全或基本匹配的对象的像素的数量)。例如,如果在当前帧中捕捉的对象与在先前帧中捕捉的对象之间的重叠量大于重叠阈值(例如,大于50%),则不认为当前帧是关键帧。在另一示例中,如果在当前帧中捕捉的对象与在先前帧中捕捉的对象之间的重叠量小于重叠阈值(例如,小于50%),则可以将当前帧指定为关键帧。在一些示例中,被确定为大于或小于重叠阈值的重叠量可以基于被比较的帧中的总体差异(例如,不仅仅基于对象的像素)。
平面检测引擎304可以使用任何合适的平面检测或估计解决方案。在一些示例中,如上所述,输入帧302可以包括深度图(也称作深度图图像)。平面检测引擎304可以检测或识别深度图图像中的一个或多个平面。例如,平面检测引擎304可以将各个深度像素指派给特定的平面假设,该平面假设是平面的3D位置和/或姿态的估计。平面检测引擎304可以估计一个或多个平面假设的平面参数。平面参数是定义平面的一个或多个3D点的变量(例如,下面关于方程(1)-(3)示出的参数A、B和C)。在一些情况下,如下文描述,可以执行平面检测技术,该技术使用洪水填充(flood fill)技术来生长用样本平面标记的像素区域(如图5A和图5B所示,如下文论述)。样本平面可以包括帧中平面的初始平面估计(或假设)。洪水填充技术可以通过分析像素或点周围的像素邻域(例如,位于像素或点的左、右、上和下的四个点)来确定像素或点是否属于该平面。
平面假设的点P(例如,定义正被估计的平面的点)可以在三维(包括水平或x维度、垂直或y维度以及深度或z维度)中定义为P=(x,y,z))。平面假设可以表示为3D向量Π=(A,B,C),使得对于点P=(x,y,z),以下方程成立:
Ax+By+Cz=1
方程(1)
变量z表示由图像捕捉设备测量的值(例如,由深度相机捕捉的深度值)。将方程(1)除以z得到以下结果:
方程(2)对应于对来自深度图帧的深度为z的像素p=(u,v)的观察,因此方程(2)可以写成:
方程(3)是1/z的线性测量函数,并且可以用于使用最小二乘估计来直接估计平面参数(A,B,C)。
如上所述,可以执行平面检测或估计来估计当前帧的平面的平面参数(A,B,C)。由平面检测引擎304检测或估计的平面可以用于从当前帧中分割平面和/或位于平面上或在平面上移动的对象。在一些情况下,平面检测引擎304可以以递归方式执行平面检测。平面检测算法的输入可以包括具有深度值倒数1/z(例如,如方程(3)中所使用)和线性相机校准参数的帧。可以假设相机没有任何非线性失真。对于N个点可以产生以下完整的设计矩阵:
并且用于确定平面参数(A,B,C)的剩余向量可以确定如下:
平面Π=(A,B,C)的最小二乘解接着可以由下式给出:
JTJΠ=JTr
方程(4)
其中T表示转置操作。方程(4)可以使用标准乔里斯基(Cholesky)分解来求解。对于接收到的新测量的点Pi,可以用秩1更新来更新乔里斯基分解,以基于新测量的点Pi来获得当前帧的平面估计。对于来自当前帧的被标记为属于该平面的所有点,可以如下计算剩余平方误差,以确定该平面与所选点的适配(fit)程度:
e=‖r-JΠ‖2=rTr-2ΠTJTr+ΠTJTJΠ
方程(5)
对于新的输入测量值,可以再次递归计算这些项,并为乔里斯基分解保留这些项。
在一个说明性示例中,为了估计深度图帧中的单个平面,可以如下应用以下算法(表示为算法1):
1.挑选起点(或像素)P1和两个邻近点(或像素)P2,P3(在x和y方向上),并将点P2,P3添加到被确定为属于深度图帧中的平面的一组点S。
2.初始化矩阵D=JTJ、E=JTr和F=rTr。
3.从DΠ=E估计平面参数Π。
4.在S的边界选择点Pi。
5.测试Π到P_i的距离是否低于阈值T1:
6.如果是,则将点Pi添加到该组点S中,并更新D,E,F。
7.如果否,则返回到步骤4。
8.从DΠ=E估计平面参数Π。
9.测试均方根(RMS)误差(RMSE)是否低于阈值T2:
RMSE=|e|/N=|F-2ΠTE+ΠTDΠ|/N<T2
10.当RMSE<T2时转到步骤4。
该算法循环可以在一帧中根据需要对尽可能多的平面执行。然后,不是平面的一部分的所有剩余点(例如,来自深度图帧的像素)可以被标记为杂乱点(例如,包括属于平面上的对象的点)。在一些情况下,可以应用该算法,直到指派了来自深度图帧的所有点(没有剩下点或像素)为止。应用算法1直到来自帧的所有点或像素被指派为止,可以返回点或像素的单个分量(单个连通分量),其全部位于由平面方程(例如,上面的方程(1))定义的单个平面中。可以将该算法再次应用于单个连通分量之外的新起点或像素。
在一些情况下,如下文更详细描述的,可以产生形状代理,其表示要由分割引擎308从输入帧302中分割的目标对象(例如,位于平面上或在平面上移动的对象)的估计形状。形状代理可以用于在输入帧302中提供目标对象的近似定位。当从输入帧302中选择新的关键帧时,可以更新形状代理。然后,可以将形状代理投影到当前帧(当前正在被处理的帧),并用于提供指定目标对象在当前帧中的近似定位的种子点。在一些情况下,在给定当前帧的种子点(作为起始点)和被跟踪的平面表面的情况下,分割引擎308可以应用上述洪水填充技术来从当前帧中分割目标对象。如下文描述,本文描述了增强分割(例如,平面分割和/或目标对象的分割)对累积跟踪误差的鲁棒性的技术。使用此类解决方案,系统300可以恢复姿态漂移,并且可以在整个输入帧302的序列中提供非常稳定的对象分割。
图5A和图5B是示出使用来自平面检测引擎304的平面检测结果分割目标对象510的结果的概念图。例如,如上所述,平面检测可以将一个或多个深度图图像中的深度像素分类到在帧中检测到的不同平面。图5A中的图像502示出了不同像素被分类到不同平面的示例(其中不同图案表示不同的检测平面)。在一些示例中,平面检测引擎304可以选择具有与重力相似的法线方向的最大平面作为支撑平面,在图5中是平面512。在一些情况下,如果目标对象所在的平面不是具有与该平面相似的重力法线方向的多个帧(帧中)中的最大平面(帧中),则平面检测引擎304可以选择目标对象所在的平面。图5B示出分割结果,其中目标对象510从图像503中分割出来。例如,使用目标对象的形状代理,平面检测引擎304可以将目标对象510的定位表示为图5B中的白色十字所示的定位。如上文所述,目标对象510的完整区域(图5B中所示的黑色区域)可以通过使用四连接邻域(上、下、左和右)生长“白色十字”并在到达支撑平面时停止来计算。
对每个帧应用平面检测缺乏效率。例如,对于产生3D模型(包括点的3D网格)的在线或实时解决方案,对每个帧执行平面检测会延迟3D模型产生过程,并且会消耗不必要的计算资源。一些系统使用对象跟踪来跟踪跨帧的平面,而不是执行平面检测。例如,基于在初始帧上执行的平面检测,此类系统跟踪平面表面并分割放置在平面表面上或在平面表面上移动的对象。这些系统不执行平面检测,而是在每一帧中跟踪相机的姿态,以更新平面在每一帧中的定位和姿态。在此类系统中,给定帧的平面分割严重依赖于为该帧中的平面估计的姿态的准确性。在一些情况下,在平面跟踪期间确定的平面姿态会遇到多个问题,诸如误差累积、漂移,以及甚至会完全失去对平面表面的跟踪。例如,在每一连续的帧之间,平面的姿态存在差异。由于每一帧中对平面的跟踪而产生的平面的姿态信息可能具有一些误差,这些误差会随着时间而累积。此类问题会破坏对象分割的结果。
代替检测每个帧的平面,平面检测引擎304可以检测一个或多个平面(例如,通过更新上面的平面方程(1)-(5)中的一者或多者),并且分割引擎308可以基于某些帧的所检测平面来执行分割。基于跟踪的对象分割可以在没有应用平面检测的帧上执行。例如,当第一次接收到输入帧302时(例如,对于输入帧302的第一帧、初始帧或初始帧之一),并且当观察到某些度量时(例如,分割一致性低于特定水平,当平面跟踪丢失或失败时等),可以执行平面检测。此类解决方案可以极大地降低3D模型产生过程的复杂性,因为平面检测可能是非常耗时且消耗资源的过程。例如,如下表1所示,对于给定帧,执行平面检测所需的时间远远大于执行对象跟踪所需的时间。此外,当观察到此类度量时执行平面检测可以防止由于误差累积、漂移和平面表面的跟踪丢失而出现的问题。
表1——基于平面检测与基于跟踪的对象分割之间的时间比较
图6是示出用于基于分割一致性度量(C)来执行平面检测的过程600的示例的流程图。在操作602,可以对第一帧执行平面检测以产生分割的平面(基于分割引擎308对检测到的平面的处理)。在操作604,对于第一帧之后的一个或多个后续帧,可以执行对象跟踪以确定平面的3D姿态(例如,基于相机的姿态)。分割引擎308可以使用平面的3D姿态来分割帧中的平面和对象。
在操作606,过程600确定分割一致性测量以确定一致性度量(C)。在操作608,过程600确定一致性度量(C)是否大于一致性阈值。如果C大于一致性阈值(操作608处的“是”决策),则过程600执行对象跟踪,并继续在帧中跟踪平面,并将跟踪结果用于平面分割。如果C不大于(或小于)一致性阈值,则过程600执行平面检测并将平面检测结果用于平面分割。一致性度量(C)允许模型产生系统300执行基于跟踪的对象分割,同时对姿态误差具有鲁棒性。
一致性度量(C)可以基于一个或多个因素或度量。在一些情况下,一致性度量(C)可以基于多个度量,并且一个或多个度量可以与特定阈值相关联。可以基于给定度量与其对应的阈值的比较来执行跟踪或平面检测。例如,可以使用的第一度量(称作像素相似性度量)是基于确定分割结果相对于跟踪误差累积是否不可靠(其中跟踪误差累积可能不正确地将某些像素识别为平面的一部分)。像素相似性度量基于这样的假设,即附近帧之间的被跟踪的平面的分割像素的数量不应相差太大的余量(例如,在阈值像素数量内)。为最近一次成功的平面分割确定的像素数量可以表示为Np。如果满足以下条件,则可以认为当前分割结果的像素数量Nc(对于正在处理的当前帧)是成功的:t1Np<Nc<t2Mp。在一个说明性示例中,t1=0.7,t2=1.3,在此情况下,如果0.7Np<Nc<1.3Np,则Mc成功。成功的Nc可以被存储为最近成功的分割结果Np,并被用作一致性度量(C)的像素相似性度量。
一致性度量(C)可以基于的第二度量被称作平面跟踪度量T(还称作跟踪阈值)。平面跟踪度量T是表示连续跟踪的平面的帧数的数字。在一些情况下,一旦T达到或超过最大数量TMAX,平面检测引擎304可以应用平面检测。TMAX可以设为任何合适的值。在一个说明性示例中,TMAX可以被设为值5。使用平面跟踪度量T可以用于处理漂移(当平面跟踪开始有误差时)。
在一些情况下,整个对象可以移出由输入帧302捕捉的场景,在此情况下,无论平面检测引擎304对平面的计算有多好,对象分割都将失败。如果在给定的帧中不存在足够的与对象相关联的像素,对象分割也可能失败。为了处理此类问题,失败度量F(还称作失败阈值)被用作对连续平面分割失败次数进行计数的参数。一旦分割开始失败,失败度量F递增,直到F达到或超过最大失败数FMAX为止。FMAX可以设为任何合适的值。在一个说明性示例中,FMAX可以被设为值2。一旦达到FMAX,平面检测引擎304可以应用平面检测。
在一些情况下,可以定义状态向量M={Np,T,F,P}来指示当前分割状态,使得Np是最近成功的平面分割的像素的累积数量,T是连续跟踪平面的帧数,F是连续分割失败的次数,并且P是最近检测到的平面方程(例如,上面的方程(1))。在基于跟踪的对象分割过程期间(在边界重新网格化过程之前),可以更新M来测量和处理潜在的姿态误差。
图7是示出基于跟踪的对象分割过程700的示例的流程图。从图7中可见,根据当前状态M,每一输入帧将经历跟踪、检测或者跟踪和检测两者。状态M将在过程中动态改变,并且当跟踪或检测成功时将被重新指派。
在操作703接收输入帧。当被过程700处理时,输入帧被称作当前帧。在操作705,过程700确定当前帧是否是帧序列的第一帧(例如,初始或开始帧)。如果当前帧是序列的第一帧,则过程700基于平面检测结果执行平面检测和对象分割(以在帧中分割平面和对象)。在操作707,过程700确定基于平面检测的分割是否成功。在一些示例中,对于确定基于平面检测的分割是否成功的决策块(包括操作707、720和726),如果检测到的对象尺寸Nc满足以下方程,则基于平面检测的分割被认为是成功的:
其中BMIN表示目标对象的预定义最小大小假设。BMIN可以设为任何合适的值。在一个说明性示例中,BMIN可以被设为值1000。将条件F添加到上述确定中,至少部分是因为随着连续分割失败的次数F变大,最近成功平面分割的像素数Np作为参考将变得不太可靠。当F达到FMAX时,可以认为当前帧和为其确定Np的帧不再是附近帧。在此情况下,一旦平面上的对象以合理的大小(如BMIN所定义)被分割,度量可以被放宽,并且过程700可以返回成功的结果。
如果过程700在操作707确定基于检测的分割成功(“是”决策),则过程700可以在操作709更新当前分割状态M(包括在操作707之前设置T=0、F=0、Np=Nc和将P设置为在当前帧中检测到的平面的平面方程)。一旦状态M被更新,在操作730,当前帧被存储在缓冲器(或其他类型的存储器)中。缓冲器存储关键帧或用于确定关键帧的帧。如上所述,模型产生引擎310使用关键帧来为输入帧中的对象产生3D模型。应注意,根据过程700,只有具有成功分割结果的帧被存储在缓冲器中。确定分割结果失败的帧不用于产生对象的3D模型。
返回操作707,如果基于上述条件确定基于检测的分割不成功(“否”决策),则过程700获得下一帧用于处理。在一些情况下,如果确定分割对于该帧不成功,则该帧可以被丢弃(例如,不被存储以供模型产生引擎310在确定3D模型时使用)。
如果当前帧不是第一帧(操作705处的“否”决策),则过程700在操作710处确定当前帧的T值(指示从当前帧开始已经连续跟踪的平面的帧数)是否大于或等于TMAX(展示为T≥TMAX)。如果在操作710确定T小于TMAX(或者不大于或等于TMAX),则过程700在操作712确定当前帧的F值(指示截至当前帧的连续分割失败的数量)是否大于或等于FMAX(示为F≥FMAX)。如果确定F小于FMAX(或者不大于或等于FMAX),则过程700在操作714将T的值增加1。过程700然后可以执行对象跟踪以跟踪从先前帧到当前帧的平面(使用对象跟踪引擎306),并且可以执行对象分割以从当前帧分割平面和对象(使用分割引擎308)。模型产生引擎310可以获得分割的对象信息,并且可以产生3D点云(例如,对象的部分3D点云),该3D点云可以用于产生该对象的3D模型。
过程700接着可以进行到操作716以确定基于跟踪的分割是否成功。对于操作716,如果满足t1Np<Nc<t2Np条件,则返回成功的分割结果(“是”决策)。在一个说明性示例中,t1=0.7且t2=1.3,在此情况下,如果0.7Np<Nc<1.3Np,则在操作716确定基于成功跟踪的分割结果。如果确定了成功的基于跟踪的分割结果,则过程700可以在操作718更新当前分割状态M(包括设置F=0和Np=Nc)。一旦状态M被更新,在操作730,当前帧接着被存储在缓冲器(或其他类型的存储器)中。
返回操作716,如果确定不满足t1Np<Nc<t2Np条件,且因此基于跟踪的分割不成功(操作716处的“否”决策),则过程700执行平面检测和对象分割,以在当前帧中分割平面和对象。类似地,如果在操作712确定F大于或等于FMAX,则过程700执行当前帧的平面检测和对象分割。在操作720,过程700确定基于平面检测的分割是否成功(基于方程(6)中的条件)。如果在操作720确定基于平面检测的分割不成功,则过程700在操作722使F值增加1。如果在操作720确定基于平面检测的分割成功,则过程700在操作728更新当前分割状态M(包括基于在操作720之前执行的平面检测,设置T=0、F=0、Np=Nc和将P设置为在当前帧中检测到的平面的平面方程)。
返回到操作710,如果确定T大于或等于TMAX,则过程700执行平面检测和对象分割以在当前帧中分割平面和对象。过程700进行到操作726,以确定基于平面检测的分割是否成功(基于方程(6)中的条件)。如果在操作720确定基于平面检测的分割不成功,则过程700在操作714使T值增加1,然后继续到如上所述的操作716。如果在操作726确定基于平面检测的分割成功,则过程700在操作728通过设置T=0、F=0、Np=Nc和将P设置为在当前帧中检测到的平面的平面方程来更新当前分割状态M。
如上述过程700所示,在处理每一输入帧时维持状态M允许模型产生系统300知道分割结果的质量,并确保系统300能够从由于跟踪误差和/或分割误差导致的不良状态中恢复。基于跟踪的对象分割过程在效率和分割准确性之间找到了平衡,使得它可以容易地应用于用于产生3D模型的各种类型的对象扫描系统(包括实时扫描系统)。
如上所述,由对象跟踪引擎306执行的跟踪可以确定输入帧302中的相机和平面的姿态。使用由跟踪引擎306提供的姿态,可以为每一输入帧动态地更新支撑平面,使得可以从帧的其余部分中分割出帧中在该平面上方的所有像素(对应于对象)。可以将分割的对象提供给模型产生引擎310,并用于产生该帧的对象的3D点云(例如,部分3D点云)。例如,分割引擎308可以针对每一帧分割对象的部分3D点云。为给定帧产生的部分3D点云可以包括在该帧中观察到的对象的点。分割引擎308可以组装来自视频的多个帧的各种部分点云的点,以产生完整的3D点云。模型产生引擎310然后可以通过执行重建(例如,泊松(Poisson)重建)来产生3D模型的3D网格,如关于图10所描述。例如,组装的点云可以用于计算对象周围的紧密边界框,以确定三角形和顶点,如下文更详细描述,这些三角形和顶点被维持用于进一步的重新网格化和完成。
在一些情况下,如图8A中的深度图图像802所示,可能有多个对象位于(例如,静止的或移动的)场景中的平面表面上。如图8B的图像803所示,位于桌上的头部是用户试图为其产生3D模型的目标对象。然而,如果仅使用由支撑平面提供的信息,则头部(作为目标对象)不能被分割,且因此不能与也位于桌上的其他对象分离。在此类情况下,如图8C的图像804所示,可以使用附加信息来确保仅主要目标对象被分割。
在一些示例中,可以执行形状代理更新过程,以便成功地从位于支撑平面上的多个其他对象中分割出目标对象。例如,当输入帧302被捕捉时,模型产生系统300可以在扫描期间确定并存储指定目标对象的定位的信息。该定位然后可以用于计算区域生长过程开始的种子点。为了执行形状代理更新过程,系统300可以使用每一关键帧的分割点云(由为每一关键帧产生的3D点云产生)来近似目标对象的定位。所得点云被称作形状代理,因为它表示目标对象的形状。在一些示例中,形状代理最初可以基于输入帧序列302的第一帧(初始或开始帧)来定义。例如,可以假设第一帧中心的对象是用户想要为其产生3D模型的目标对象,并且第一帧中的其他对象是用户不感兴趣的对象。在3D模型产生期间,只能构建目标对象,而在3D模型产生期间,可以忽略其他对象。
形状代理上的种子点可被采样并被投影到具有从跟踪引擎306估计的姿态的后续输入帧。通过在n-连通(例如,4-连通)邻域中生长种子点直到到达该平面为止,可以使用洪水填充技术来执行分割。例如,可以通过将3D形状代理点投影到2D来计算初始二维(2D)种子点。通过使用与形状代理的重心相对应的点,可以验证初始点的数量,并且可以实现高质量的结果。在分割期间,如果种子点的左、右、上、下四个点不在平面上,则这四个点被包括在堆栈中。这个过程可以通过使用堆栈头(例如,堆栈顶部或底部的点)作为新的种子点来重复。当堆栈为空时,该过程可以结束。然后,当在关键帧上分割成功时,可以更新形状代理,这可以确保只有目标对象的点对形状代理有贡献。在一些示例中,一种以上的技术可以用于种子点采样,这可以在计算成本和分割的完整性之间提供平衡。例如,用于种子点采样的第一技术可以包括通过平均形状代理上的所有点来获取一个种子点。基于单个种子的解决方案在许多情况下运行良好。在一些情况下,如果深度信息不足(例如,由于传感器噪声),则基于单个种子的解决方案可能导致不完整分割的输出。
另一种子采样技术可以包括对多个种子进行采样。为了执行基于多个种子的方法,可以在网格上量化从先前关键帧组装的当前点云。可以预设网格中每对相邻点之间的间隔(例如,基于用户或扫描系统期望的设置)。然后,网格上的点可以被投影回当前图像空间,并且这些点的2D位置可以被用作新的种子。
图9A是示出单个种子方法的结果的图像902,并且图9B是示出多个种子方法的结果的图像903。在图9A中,由于输入帧中的噪声,单个种子的投影位置在目标对象区域之外(并且位于平面上)。因此,系统300失去了对象的跟踪。如图9B所示,使用更多的种子候选者可以帮助正确地瞄准目标对象并将对象分割出平面表面。引入更多的种子点在计算上比一个种子方法更密集,但是可以有效地校正由于不完全分割而出现的问题。可以使用较少数量的种子(例如,仅使用位于对象边界上的点)(如由系统300或用户指定),以便加速该过程。系统300可以基于可用的计算资源和/或基于质量期望在两种模式之间切换。
如先前描述,由模型产生引擎310产生的3D模型(基于来自基于跟踪的分割或基于平面检测的分割的分割结果)对于对象的被平面表面遮挡的部分可以具有中空外观。网格细化引擎312可以执行上述边界重新网格化过程。使用边界重新网格化过程,可以为对应于对象的位于平面表面上的部分(例如,对象的底部)的3D模型的部分产生细化的网格。如下文更详细描述,边界重新网格化过程可以在模糊的几何条件下检测和处理多个封闭边界,诸如当一个顶点被边界上的n(n>2)条边共享时。产生细化网格允许输出3D模型(例如,3D模型314),其中遮挡部分是完整的。
图10是示出用于产生包括重新网格化(使用边界重新网格化过程进行重新网格化)的底部部分的3D模型的过程1000的示例的流程图。过程1000的每一操作都伴随有提供该特定操作的结果的图示的图像。在操作1002,过程1000包括对由模型产生引擎310提供的(3D模型的)点云执行重建。例如,在给定从各种帧产生的组装的点云的情况下,网格细化引擎312可以通过执行泊松重建来重建网格。
在操作1004,过程1000包括从点云中确定紧密的或适配的边界框(例如,适配在对象的边界周围)和平面。例如,网格细化引擎312可以聚集由上述基于跟踪的对象分割过程提供的分割点,并且可以计算那些分割点周围的紧密边界框。边界框可以表示将被保留并用于后续处理的网格区域。例如,在过程1000的操作1006中,过程1000可以仅保留来自点云中在边界框内的点(例如,网格顶点和三角形),并且可以移除(例如,剪切或删除)其余的点(例如,顶点和三角形)。可以确定边界框,使得它紧紧适配在分割的点周围。
在操作1006,过程1000包括移除在边界框之外并且在平面之下的(网格的)点(或顶点)和三角形。例如,网格细化引擎312可以通过移除边界框之外并且在检测到的平面表面之下的所有点和三角形来切割网格。在操作1006之后,从支撑平面(例如,桌子或其他表面)分离或分割出所得网格,但是对象的底部边界具有不适合输出的视觉伪影。例如,在操作1006移除不需要的点(或顶点)和三角形之后,结果是具有开放底部的网格为了使结果在视觉上令人愉快,边界重新网格化过程应用于网格底部边界(对应于对象的位于支撑平面上的部分),以便顶点与底层对齐。例如,在操作1008,过程1000包括检测封闭边界并对边界进行三角化(triangulating)(例如,通过将边界与支撑平面对齐)。三角化应用于底部边界的顶点,以修补3D模型的底部。下面描述与边界重新网格化过程相关的进一步细节。过程1000在操作1010输出完整的3D网格,并在操作1012将纹理映射到底部三角形,以便实现合成的底部部分与原始对象之间的视觉一致性。
如上所述,在移除不需要的点和三角形之后,保留了具有开放底部的网格通过将简单的多边形分解成三角形集合,可以使用三角化方案来重新网格化该底部部分。计算机图形学中遇到的一个问题是如何将简单的多边形分解成三角形集合,这些三角形的顶点都是该简单多边形的顶点。简单多边形是有序的点序列,并且连续的顶点通过边连接。每一顶点共享恰好两条边。唯一允许边相交的地方是顶点。因为简单多边形需要有序的顶点序列并且每一顶点恰好共享两条边的需求,所以直接三角化不能直接用于完成底部部分。为了克服此类问题,可以使用三角化方案将指定网格开放底部的边列表变换为简单的多边形,以满足这两个需求。例如,网格细化引擎312可以确定网格/>上的所有n个定向边界ε={ci|i=1…n},其中ci表示/>上构成闭环连接的边的子集。在给定边界ε的情况下,网格细化引擎312可以通过执行点三角化技术来对每一封闭连接或边界进行三角化。
在一些示例中,耳剪裁三角化方法可以用于三角化。例如,在给定简单的多边形的情况下,网格细化引擎312可以迭代地分割该多边形上的“耳三角形”并从该多边形中移除三角形。多边形的耳三角形是由三个连续的顶点Vi0、Vi1和Vi2形成的三角形,其中Vi1是凸顶点(顶点处的内角小于π弧度),从Vi0到Vi2的线段完全位于多边形内部,并且除了三角形的三个顶点之外,多边形的任何顶点都不包含在三角形中。当多边形顶点集为空时,三角化过程可以结束。
网格细化引擎312可以通过执行三个操作从计算边界ε。第一操作包括构建或产生包括位于网格边界处的边的边界集B,第二操作包括将边界集B划分成构成一个封闭边界的边的子集bi,并且第三操作包括重新定向边子集bi。
泊松重建后,网格是严密的(没有孔)。网格中的每一孔都是由平面移除(在重建之后执行)引起的。网格细化引擎312因此可以执行第一操作来识别孔的边界(表示为边界集B)。网格细化引擎312可以通过检测网格/>中的孔来确定边界集B。除了位于孔处(在网格/>的底部)的边之外,网格/>上的每一边都具有两个三角形。由于孔的这一特征,边界集B可以通过划分所有三角形的边列表以找到被包括在仅一个三角形中的边来构建。边列表中的元素可以对应于边,并且可以包括保存索引该边的顶点标识符(id)的两个整数的数组。在一些实现方式中,边AB等于边BA。可以从作为3D网格一部分的三角形列表中计算出边列表。网格细化引擎312因此可以通过遍历边列表并检索仅属于一个三角形的边来识别位于网格边界的边。检索到的仅具有一个三角形的边可以被添加到边界集B中。
仅使用边界集B不能执行重新网格化。为了执行重新网格化,需要确定边界集B中的边之间的连接定向。连接定向可以指从孔的起点到孔的终点的边之间的连接,从而完成环路。例如,连接定向是指n个点的有序序列,从V0到Vn-1。连续的顶点由边<Vi,Vi+1>连接,0≤i≤n-2,并且边<Vn-1,V0>连接第一个点和最后的点。网格细化引擎312可以将边界集B分成n个子集{bi|i=1…n}。n个子集还称作连通分量或边连接,因为每一子集bi包括包含一个封闭边界的边。在一些示例中,可以在边界集B上应用快速联合查找算法来查找所有n个连通分量{bi|i=1…n}。快速联合保留了表示每一顶点的根的索引。当过程开始时,每个顶点根就是它自己。然后遍历边列表,并且当确定“a”和“b”相互连接时,指派“a”的根到“b”的根。使用此类过程,所有连接的顶点(分离的孔)被分类到相同的根中。可以通过检查i==root(i)是否成立来辨识根顶点,其中i贡献了顶点Vi的索引。当应用联合查找操作时,维护列表N来记录边连接。列表N包括l个条目,其中l等于B的顶点数。列表N中的每一条目可以被概括为记录进出列表N的不止一对边。例如,如图11A所示,顶点V1与两条边V2和V5相关联。与顶点V1相关联的条目可以被概括为一个列表,以保存V2和V5。否则,通过V2(V5)的孔将错过完成。对于B中的边eij,网格细化引擎312可以在列表N的条目i处包括索引vj。列表N允许用有效方式对子集bi进行排序,以供重新定向边集bi的第三操作使用。
网格细化引擎312可以通过检查N中每一条目之后的有向环路来重新定向每个边子集bi。例如,可以通过迭代地从列表N中检索顶点索引并从列表N中移除(或弹出)所检索的元素来重新定向边子集。例如,如图11所示,网格细化引擎312可以从列表N的第一条目开始,并且可以从列表N中移除(或弹出)v2。网格细化引擎312接着可以查找第二条目并从列表N中弹出v3。然后找到第三个条目,并且被删除的元素是v1,这是起点。然后,该过程结束,并结束v1->v2->v3的有序环路。可以从列表N中移除(或弹出)已经被遍历的N中的所有条目l,以防止任何重复的路径。网格细化引擎312可以收集在边界ε中发现的环路,并且可以认为一旦列表N为空,就已经发现了所有环路。
图11A、图11B和图11C是示出边界重新网格化过程的操作的示例的图。例如,网格细化引擎312可以从子集bi中的任何顶点v开始,并且可以迭代地搜索下一顶点,直到顶点v第二次出现为止。如图11A中箭头所指示,在一个方向上执行迭代搜索。例如,搜索可以从顶点v1开始,接着到顶点v2,然后到顶点v3,并返回到顶点v1。v1和v2之间的边表示为e12。在图11A中其他顶点之间展示类似的边。在给定环路(或网格中的孔)的迭代搜索过程期间遇到的所有顶点可以被组装以产生有序边集ci。
图11B中的列表1132中的每一条目记录特定顶点所连接到的一个或多个顶点(在对应于迭代搜索到各个顶点的遍历方向的箭头方向上)。例如,图11B中列表1132的顶部条目记录了顶点v1所连接的一个或多个顶点。如图所示,顶点v1连接到顶点v2和v5。从顶部开始的第二条目对应于连接到顶点v2的顶点(即顶点v3),中间的条目对应于连接到顶点v3的顶点(顶点v1)等等。所有其他顶点(除了v1)只有一个连接,且因此在图11B所示的列表1132中只有一个条目。
在许多情况下,边界上的每一顶点都只有一条入边和一条出边。例如,如图11A所示,顶点v2在迭代搜索的方向上(如图11A中的箭头所示)有一条边e12进入其中,并且有一条边e23离开它。在一些情况下,可能存在具有不止一对进出边的顶点(例如,由于快速联合操作)。例如,如图11A所示,顶点v1在迭代搜索的方向上具有进入其中的两条边e31和e41,以及离开其中的两条边e12和e15(因此在列表1132中有顶点v1的两个条目)。为了解决多条边进出特定顶点的问题,可以将列表N中的每一条目概括为动态列表。图11B是示出考虑给定顶点的多条边的修改列表1132的示例的图。例如,如关于图11B的列表中所示的第一条目(顶点v2)所示,顶点v5被附到v2条目的末尾,使得N将边e12和e15都记录为从顶点v1出来的两个边。
在给定修改的列表N(例如,图11B中所示的列表1132)的情况下,网格细化引擎312组装在搜索过程期间遇到的所有顶点以形成闭环。每一环路被表示为包括在边界ε={ci|i=1…n}中的有序边集ci。例如,如图11B中所示,获得以下环路:v1→v2→v3→v1。环路v1→v2→v3→v1对应于对象3D模型底部的一个孔。另一环路v1→v5→v4→v1对对应于对象3D模型底部的另一孔。如上所述,可以从列表N中移除(或弹出)已经被遍历的N中的所有条目,以防止任何重复的环路。图11C是在遍历环路v1→v2→v3→v1之后移除重复条目(其中移除的条目用“x”划掉)的列表N的示例。例如,顶点v1、v2和v3在遍历环路v1→v2→v3→v1时被处理,并且一旦环路v1→v2→v3→v1完成就从列表N中移除。可以再次处理列表N,以获得另一环路v1→v5→v4→v1。因为顶点v2已被移除,所以当迭代过程返回到顶点v1时,迭代搜索将不会进行到v2,而是进行到v5,用于处理下一环路v1→v5→v4→v1。虽然顶点v1已经被处理并从列表中移除(如图11C所示),但是搜索将再次考虑顶点v1,因为它两次被包括在列表中。可以重复搜索过程,直到找到列表N中的所有环路为止。网格细化引擎312可以确定当N为空时找到了所有的环路。
使用迭代搜索过程找到的环路对应于位于平面表面上的对象底部的网格中的孔。每一环路被包括为有序边集ci,该有序边集ci被包括在定义网格M底部的一个或多个孔的一个或多个边界的n向边界ε={ci|i=1…n}中。网格细化引擎312可以使用边界ε来使用点三角化技术对每一封闭边界进行三角化,从而完成细化的网格。3D模型的底部因此被细化并且可以被输出。
使用本文描述的系统和技术,可以为位于平面表面上的对象产生完整的3D模型。该系统和技术允许在运行中(实时地)为此类对象产生3D模型,而不需要捕捉包括该对象的场景的预先记录的帧。该系统和技术利用基于平面跟踪的方法来进行对象分割,但是可以解决跟踪期间可能发生的漂移和其他误差(例如,漂移),并且还可以确保平面分割(用于从平面分割对象)具有高准确性。因为使用了基于平面跟踪的分割,所以不需要对每个输入帧进行平面检测。此类解决方案降低了计算复杂性。
图12是示出使用本文描述的技术来产生一个或多个三维模型的过程1200的示例的流程图。在操作1202,过程1200包括获得场景中对象的至少一个帧。例如,图像捕捉设备(例如,相机)可以用于捕捉至少一个帧。在另一示例中,至少一个帧可以从存储装置检索。对象的部分在至少一个帧中位于平面上。例如,如图1A所示,对象110的底部位于平面111上。在一些情况下,可以获得对象的多个帧(例如,由图像捕捉设备捕捉、从存储装置检索或以其他方式获得)。在一些示例中,至少一个帧包括场景中与至少一个帧的像素的深度对应的深度信息。
在操作1204,过程1200包括在至少一个帧中检测平面。例如,如上文所述,可以执行平面检测以在至少一个帧中检测平面。在操作1206,过程1200包括基于检测到的平面在至少一个帧中从平面分割对象。
在操作1208,过程1200包括基于从该平面分割对象来产生对象的三维(3D)模型。在一些示例中,至少一个帧包括第一帧,并且过程1200可以包括获得场景中对象的第二帧。对象的该部分还在第二帧中位于平面上。过程1200可以包括从第一帧到第二帧跟踪平面。基于跟踪平面,过程1200可以包括在第二帧中从平面分割对象。过程1200可以基于在第一帧和第二帧中从平面分割对象来产生该对象的3D模型。在一些情况下,从第一帧到第二帧跟踪平面包括跟踪平面的姿态。如上文所述,基于第二帧中平面的跟踪的姿态,从平面中分割出对象。
在一些示例中,过程1200包括确定从第二帧分割的对象的像素数量,并且确定该像素数量在从第一帧分割的对象的阈值像素数量之内。基于该像素数量是在从第一帧分割的对象的阈值像素数量内,过程1200可以包括确定在第二帧中从平面分割对象是成功的。
在一些示例中,过程1200可以包括确定平面已被跟踪的帧的数量,并且基于该平面已被跟踪的帧的数量来确定是对第二帧执行平面检测还是对象跟踪。在一些情况下,过程1200包括当确定平面已被跟踪的帧的数量满足跟踪阈值时,基于第二帧中的平面检测来检测平面。在一些情况下,过程1200包括当确定平面已被跟踪的帧的数量小于跟踪阈值时,基于从第一帧到第二帧的对象跟踪来跟踪平面。
在一些示例中,过程1200包括确定对象的平面分割失败的数量。如上文所述,当没有在帧中从平面分割出对象时,可能发生平面分割失败。过程1200可以基于确定对象的平面分割失败的数量满足失败阈值来在第二帧中检测平面。
在一些示例中,可以基于在多个帧中为对象确定的点云来产生对象的3D模型。例如,过程1200可以获得场景中对象的第一帧,在第一帧中从平面分割对象,并且产生第一帧中与对象相关联的点的第一3D网格。过程1200可以获得场景中对象的第二帧,在第二帧中从平面分割对象,并且产生第一帧中与对象相关联的点的第二3D网格。过程1200然后可以通过组合点的第一3D网格和点的第二3D网格来产生3D模型。
在操作1210,过程1200包括为对应于对象的位于平面上的部分的3D模型的部分产生细化的网格。如上所述,对象的位于平面上的部分可能导致与对象的位于平面上的部分相对应的3D模型的部分中的孔。在一些示例中,产生用于对象的3D模型的部分的细化网格包括产生用于对象的3D模型的该部分的初始网格,确定包括属于初始网格的单个三角形的初始网格的边的边界集,以及使用该边界集产生用于对象的3D模型的该部分的细化网格。上文描述了关于产生细化网格的进一步细节。
在一些示例中,本文描述的过程(例如,过程600、700、100、1200和/或本文描述的其他过程)可以由计算设备或装置执行。在一个示例中,过程1200可以由图3的模型产生系统300执行。在另一示例中,过程1200可以由图3的模型产生系统300执行。在另一示例中,过程1200可以由图13中所示的计算系统1300执行。例如,具有图13所示的计算系统1300的计算设备可以包括模型产生系统300的组件,并且可以实现图12的操作。
计算设备可以包括任何合适的设备,诸如移动设备(例如,移动电话)、台式计算设备、平板型计算设备、可穿戴设备(例如,VR头戴式设备、AR头戴式设备、AR眼镜、联网手表或智能手表或其他可穿戴设备)、服务器计算机、自主车辆或自主车辆的计算设备、机器人设备、电视和/或具有资源能力来执行本文描述的过程(包括过程600、700、100、1200和/或本文描述的其他过程)的任何其他计算设备。在一些情况下,计算设备或装置可以包括各种组件,诸如一个或多个输入设备、一个或多个输出设备、一个或多个处理器、一个或多个微处理器、一个或多个微计算机、一个或多个相机、一个或多个传感器、和/或被配置成进行本文描述的过程步骤的其他(一个或多个)组件。在一些示例中,计算设备可以包括显示器、被配置成传达和/或接收数据的网络接口、其任何组合和/或其他(一个或多个)组件。网络接口可以被配置成基于数据或其他类型的数据来传达和/或接收因特网协议(IP)。
计算设备的组件可以用电路实现。例如,组件可以包括和/或可以使用电子电路或其他电子硬件来实现,可以包括一个或多个可编程电子电路(例如,微处理器、图形处理单元(GPU)、数字信号处理器(DSP)、中央处理单元(CPU)和/或其他合适的电子电路),和/或可以包括和/或使用计算机软件、固件或其任何组合来实现,从而执行本文描述的各种操作。
过程600、700、100和1200被示为逻辑流程图,其操作表示可以用硬件、计算机指令或其组合实现的操作序列。在计算机指令的上下文中,操作表示存储在一个或多个计算机可读存储介质上的计算机可执行指令,这些指令在由一个或多个处理器执行时,执行所述操作。通常,计算机可执行指令包括执行特定功能或实现特定数据类型的例程、程序、对象、组件、数据结构等。描述操作的顺序并不旨在被理解为限制,并且任何数量的所描述操作可以以任何顺序和/或并行地组合来实现这些过程。
此外,本文描述的过程600、700、100、1200和/或其他过程可以在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可以通过硬件被实现为在一个或多个处理器上共同执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用),或其组合。如上所述,代码可以例如以包含可由一个或多个处理器执行的多个指令的计算机程序的形式存储在计算机可读或机器可读存储介质上。计算机可读或机器可读存储介质可以是非暂时性的。
图13是示出用于实现本技术的某些方面的系统的示例的图。特别地,图13示出了计算系统1300的示例,计算系统1300可以是例如构成内部计算系统、远程计算系统、相机或其任何组件的任何计算设备,其中系统的组件使用连接1305彼此通信。连接1305可以是使用总线的物理连接,或者直接连接到处理器1310,诸如在芯片组架构中。连接1305还可以是虚拟连接、联网连接或逻辑连接。
在一些实施例中,计算系统1300是分布式系统,其中本公开中描述的功能可以分布在数据中心、多个数据中心、对等网络等中。在一些实施例中,一个或多个所描述的系统组件表示许多此类组件,每一组件执行该组件所描述的一些或全部功能。在一些实施例中,组件可以是物理或虚拟设备。
示例系统1300包括至少一个处理单元(CPU或处理器)1310以及连接1305,该连接1305将包括系统存储器1315(诸如只读存储器(ROM)1320和随机存取存储器(RAM)1325)的各种系统组件耦合到处理器1310。计算系统1300可以包括高速存储器的高速缓冲存储器1312,其与处理器1310直接连接、紧密接近或集成为处理器1310的一部分。
处理器1310可以包括任何通用处理器和硬件服务或软件服务,诸如存储在存储设备1330中的服务1332、1334和1336,被配置成控制处理器1310以及专用处理器,其中软件指令被并入到实际的处理器设计中。处理器1310本质上可以是完全独立的计算系统,包含多个核心或处理器、总线、存储器控制器、高速缓冲存储器等。多核处理器可以是对称的或不对称的。
为了实现用户交互,计算系统1300包括输入设备1345,其可以表示任何数量的输入机制,诸如用于语音的麦克风、用于手势或图形输入的触敏屏幕、键盘、鼠标、运动输入、语音等。计算系统1300还可以包括输出设备1335,其可以是多个输出机制中的一者或多者。在一些情况下,多模式系统可以使用户能够提供多种类型的输入/输出来与计算系统1300通信。计算系统1300可以包括通信接口1340,其通常可以控管和管理用户输入和系统输出。通信接口可以使用有线和/或无线收发器执行或促进有线或无线通信的接收和/或传输,包括使用音频插孔/插头、麦克风插孔/插头、通用串行总线(USB)端口/插头、端口/插头、以太网端口/插头、光纤端口/插头、专有有线端口/插头、/>无线信号传送、/>低能量(BLE)无线信号传送、/>无线信号传送、射频识别(RFID)无线信号传送、近场通信(NFC)无线信号传送、专用短程通信(DSRC)无线信号传送、802.11Wi-Fi无线信号传送、无线局域网(WLAN)信号传送、可见光通信(VLC)、全球微波接入互操作性(WiMAX)、红外(IR)通信无线信号传送、公共交换电话网络(PSTN)信号传送、集成服务数字网络(ISDN)信号传送、3G/4G/5G/LTE蜂窝式数据网络无线信号传送、对等式网络信号传送、无线电波信号传送、微波信号传送、红外信号传送、可见光信号传送、紫外光信号传送、沿电磁谱的无线信号传送或它们的一些组合。通信接口1340还可以包括一个或多个全球导航卫星系统(GNSS)接收器或收发器,用来基于从与一个或多个GNSS系统相关联的一个或多个卫星接收到的一个或多个信号来确定计算系统1300的定位。GNSS系统包括但不限于基于美国的全球定位系统(GPS)、基于俄罗斯的全球导航卫星系统(GLONASS)、基于中国的北斗导航卫星系统(BDS)和基于欧洲的伽利略GNSS。对在任何特定的硬件布置上操作没有限制,且因此这里的基本特征可以容易地被开发的改进的硬件或固件布置所替代。
存储设备1330可以是非易失性和/或非暂时性和/或计算机可读存储器设备,并且可以是硬盘或其他类型的计算机可读介质,其可以存储计算机可访问的数据,诸如磁带盒、闪存卡、固态存储器设备、数字通用光盘、磁带匣、软盘、软磁盘、硬盘、磁带、磁条、任何其他磁性存储介质、闪存、忆阻存储器、任何其他固态存储器、紧凑盘只读存储器(CD-ROM)光盘、可重写紧凑盘(CD)光盘、数字视频光盘(DVD)光盘、蓝光光盘(BDD)光盘、全息光盘、另一光学介质、安全数字(SD)卡、微型安全数字(微型SD)卡、Memory卡、智能卡芯片、EMV芯片、订户身份模块(SIM)卡、迷你/微型/毫微/微微SIM卡、另一集成电路(IC)芯片/卡、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存EPROM(FLASHEPROM)、高速缓冲存储器(L1/L2/L3/L4/L5/L#)、电阻随机存取存储器(RRAM/ReRAM)、相变存储器(PCM)、自旋转移扭矩RAM(STT-RAM)、另一存储芯片或磁带匣和/或其组合。
存储设备1330可以包括软件服务、服务器、服务等,当定义此类软件的代码由处理器1310执行时,使得系统执行功能。在一些实施例中,执行特定功能的硬件服务可以包括存储在计算机可读介质中的与必要的硬件组件相关联的软件组件,该硬件组件诸如处理器1310、连接1305、输出设备1335等,从而执行该功能。
如本文所使用,术语“计算机可读介质”包括但不限于便携式或非便携式存储设备、光学存储设备以及能够存储、包含或携带(一个或多个)指令和/或数据的各种其他介质。计算机可读介质可以包括其中可以存储数据的非暂时性介质,并且不包括以无线方式或通过有线连接传播的载波和/或暂时性电子信号。非暂时性介质的示例可以包括但不限于磁盘或磁带、诸如紧凑盘(CD)或数字通用光盘(DVD)的光学存储介质、闪存、存储器或存储器设备。计算机可读介质上可以在其上存储代码和/或机器可执行指令,这些指令可以表示过程、函数、子程序、程序、例程、子例程、模块、软件包、类别或者指令、数据结构或程序语句的任何组合。通过传递和/或接收信息、数据、自变量、参数或存储器内容,代码段可以耦合到另一代码段或硬件电路。可以使用包括存储器共享、消息传递、令牌传递、网络传输等任何合适的手段来传递、转发或传输信息、自变量、参数、数据等。
在一些实施例中,计算机可读存储设备、介质和存储器可以包括包含位流等的电缆或无线信号。然而,当提到时,非暂时性计算机可读存储介质明确排除了诸如能量、载波信号、电磁波和信号本身的介质。
在以上描述中提供了具体细节,以提供对本文提供的实施例和示例的透彻理解。然而,本领域的技术人员将理解,可以在没有这些具体细节的情况下实践实施例。为了解释清楚,在一些情况下,本技术可以被呈现为包括单独的功能块,这些功能块包含以软件或硬件和软件的组合体现的方法中的设备、设备组件、步骤或例程。除了图中所示和/或本文所述的那些之外,还可以使用附加组件。例如,电路、系统、网络、过程和其他组件可以以框图形式展示为组件,以便不在不必要的细节中模糊实施例。在其他情况下,众所周知的电路、过程、算法、结构和技术可以在没有不必要的细节的情况下展示,以避免模糊实施例。
单独的实施例可以在上文中被描述为过程或方法,该过程或方法被描绘为流图、流程图、数据流程图、结构图或框图。尽管流图可以将操作描述为顺序过程,但是许多操作可以并行或同时执行。另外,可以重新布置操作的顺序。当一个过程的操作完成时,它就终止了,但是它可能有图中未包括的附加步骤。过程可以对应于方法、函数、程序、子例程、子程序等。当过程对应于函数时,它的终止可以对应于该函数返回到调用函数或主函数。
根据上述示例的过程和方法可以使用存储在计算机可读介质中或以其他方式可从计算机可读介质获得的计算机可执行指令来实现。此类指令可以包括例如指令和数据,其使得或以其他方式配置通用计算机、专用计算机或处理设备来执行某些功能或功能组。所使用的部分计算机资源可以通过网络访问。计算机可执行指令可以是例如二进制文件、中间格式指令,诸如汇编语言、固件、源代码等。可以用于存储指令、所用信息和/或在根据所述示例的方法期间创建的信息的计算机可读介质的示例包括磁盘或光盘、闪存、配备有非易失性存储器的USB设备、联网存储设备等等。
实现根据这些公开内容的过程和方法的设备可以包括硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合,并且可以采用各种形状因素中的任一者。当用软件、固件、中间件或微代码实现时,执行必要任务的程序代码或代码段(例如,计算机程序产品)可以存储在计算机可读或机器可读介质中。(一个或多个)处理器可以执行必要的任务。形状因素的典型示例包括膝上型计算机、移动电话(例如,智能电话或其他类型的移动电话)、平板设备或其他小型个人计算机、个人数字助理、机架式设备、独立设备等等。本文描述的功能性也可以体现在外围设备或插件卡中。借助于其他示例,此类功能性也可以在不同芯片的电路板上或在单个设备中执行的不同过程中实现。
指令、用于传送此类指令的介质、用于执行此类指令的计算资源以及用于支持此类计算资源的其他结构是用于提供本公开中描述的功能的示例性部件。
在前面的描述中,本申请的各方面是参考其特定实施例来描述的,但是本领域技术人员将认识到本申请不限于此。因此,尽管本文已经详细描述了本申请的说明性实施例,但是应理解,本发明的概念可以以其他方式不同地体现和使用,并且所附权利要求旨在被解释为包括此类变化,除非受到现有技术的限制。上述申请的各种特征和方面可以单独或联合使用。此外,在不脱离本说明书的更广泛的精神和范围的情况下,可以在除了本文描述的环境和应用之外的任何数量的环境和应用中使用实施例。因此,说明书和附图被认为是说明性的,而不是限制性的。出于说明的目的,以特定的顺序描述了方法。应理解,在替代实施例中,这些方法可以以不同于所描述的顺序来执行。
本领域普通技术人员将了解,在不脱离本说明书的范围的情况下,本文使用的小于(“<”)和大于(“>”)符号或术语可以分别用小于或等于(“≤”)和大于或等于(“≥”)符号来代替。
在组件被描述为“被配置成”执行某些操作的情况下,此类配置可以例如通过设计电子电路或其他硬件来执行该操作、通过对可编程电子电路(例如,微处理器或其他合适的电子电路)进行编程来执行该操作或其任何组合来实现。
短语“耦合到”指直接或间接物理连接到另一组件的任何组件,和/或直接或间接与另一组件通信(例如,通过有线或无线连接和/或其他合适的通信接口连接到另一组件)的任何组件。
陈述集合“中的至少一者”和/或集合中的“一个或多个”的权利要求语言或其他语言指示该集合的一个成员或该集合的多个成员(以任何组合)满足权利要求。例如,陈述“A和B中的至少一者”或“A或B中的至少一者”的权利要求语言意指A、B或A和B。在另一示例中,陈述“A、B和C中的至少一者”或“A、B或C中的至少一者”的权利要求语言意指A、B、C、或A和B、或A和C、或B和C、或A和B和C。语言集合“中的至少一者”和/或集合中的“一个或多个”并不将该集合限制于集合中列出的项目。例如,陈述“A和B中的至少一者”或“A或B中的至少一者”的权利要求语言可以意指A、B、或A和B,并且可以另外包括未在A和B的集合中列出的项目。
结合本文所公开的实施例而描述的各种说明性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件、固件或其组合。为清楚说明硬件与软件的此互换性,上文已大体关于其功能性而描述了各种说明性组件、方框、模块、电路和步骤。此类功能性是实现为硬件还是软件取决于特定应用和强加于整个系统的设计约束。所属领域的技术人员可以针对每一特定应用以不同方式来实现所描述的功能性,但此类实现方式决策不应被解释为会导致脱离本申请的范围。
本文描述的技术还可以在电子硬件、计算机软件、固件或其任何组合中实现。此类技术可以实现在多种设备中的任一者中,诸如通用计算机、无线通信设备手机或具有多种用途的集成电路设备,包括在无线通信设备手机和其他设备中的应用。被描述为模块或组件的任何特征可以共同实现在集成逻辑设备中或单独实现为离散但可互操作的逻辑设备。如果用软件实现,则这些技术可以至少部分地由包含程序代码的计算机可读数据存储介质来实现,该程序代码包括在被执行时执行一个或多个上述方法的指令。计算机可读数据存储介质可以形成计算机程序产品的一部分,该计算机程序产品可以包括封装材料。计算机可读介质可以包含存储器或数据存储介质,诸如随机存取存储器(RAM)(诸如,同步动态随机存取存储器(SDRAM))、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、闪存、磁性或光学数据存储介质等等。另外或替代地,这些技术可以至少部分地由计算机可读通信介质来实现,该计算机可读通信介质承载或传达呈指令或数据结构形式的程序代码,并且可以由计算机访问、读取和/或执行,诸如传播的信号或波。
程序代码可以由处理器执行,该处理器可以包括一个或多个处理器,诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等效集成或离散逻辑电路。此类处理器可以被配置成执行本公开中描述的技术中的任一者。通用处理器可以是微处理器;但在替代方案中,处理器可以是任何常规的处理器、控制器、微控制器或状态机。处理器还可以被实现为计算设备的组合,例如,DSP与微处理器的组合、多个微处理器、一个或多个微处理器与DSP核心的组合,或任何其他此类配置。因此,本文使用的术语“处理器”可以指任何前述结构、前述结构的任何组合、或者适合于实现本文描述的技术的任何其他结构或装置。
本公开的说明性方面包括:
方面1:一种产生一个或多个三维模型的方法,该方法包含:获得场景中对象的至少一个帧,其中对象的部分在至少一个帧中位于平面上;在至少一个帧中检测平面;基于检测到的平面在至少一个帧中从平面分割该对象;基于从平面分割对象来产生该对象的三维(3D)模型;以及产生与位于平面上的对象的该部分对应的3D模型的部分的细化网格。
方面2:根据方面1所述的方法,其中,至少一个帧包括场景内与至少一个帧的像素的深度对应的深度信息。
方面3:根据方面1至2中的任一者所述的方法,其中,至少一个帧包括第一帧,该方法包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;从第一帧到第二帧跟踪该平面;基于跟踪该平面,在第二帧中从平面分割该对象;以及基于在第一帧和第二帧中从平面分割该对象来产生对象的3D模型。
方面4:根据方面3所述的方法,其中,从第一帧到第二帧跟踪平面包括跟踪该平面的姿态,并且其中基于第二帧中平面的跟踪的姿态来从该平面分割对象。
方面5:根据方面3或4中的任一者所述的方法,还包含:确定从第二帧分割的对象的像素数量;确定该像素数量是在从第一帧分割的对象的阈值像素数量内;以及基于该像素数量是在从第一帧分割的对象的阈值像素数量内,确定在第二帧中从平面分割该对象是成功的。
方面6:根据方面1至5中的任一者所述的方法,其中,至少一个帧包括第一帧,该方法包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定平面已被跟踪的帧的数量;以及基于平面已被跟踪的帧的数量来确定是对第二帧执行平面检测还是对象跟踪。
方面7:根据方面6所述的方法,还包含:基于确定平面已被跟踪的帧的数量满足跟踪阈值,基于第二帧中的平面检测来检测该平面。
方面8:根据方面6或7中的任一者所述的方法,还包含:基于确定平面已被跟踪的帧的数量小于跟踪阈值,基于从第一帧到第二帧的对象跟踪来跟踪该平面。
方面9:根据方面1至8中的任一者所述的方法,其中,至少一个帧包括第一帧,该方法包含:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定对象的平面分割失败的数量,当没有在帧中从平面分割对象时发生平面分割失败;以及基于确定对象的平面分割失败的数量满足失败阈值来在第二帧中检测平面。
方面10:根据方面1至9中的任一者所述的方法,其中,产生用于对象的3D模型的部分的细化网格包括:产生用于对象的3D模型的该部分的初始网格;确定包括属于初始网格的单个三角形的初始网格的边的边界集;以及使用该边界集产生用于对象的3D模型的该部分的细化网格。
方面11:根据方面1至10中的任一者所述的方法,其中,产生对象的3D模型包括:获得场景中对象的第一帧;在第一帧中从平面分割对象;产生第一帧中与对象相关联的点的第一3D网格;获得场景中对象的第二帧;在第二帧中从平面分割对象;产生第一帧中与对象相关联的点的第二3D网格;以及组合点的第一3D网格和点的第二3D网格。
方面12:一种用于产生一个或多个三维模型的装置,包含:存储器,被配置成存储一个或多个帧;以及一个或多个处理器,耦合到存储器且被配置成:获得场景中对象的至少一个帧,其中对象的部分在至少一个帧中位于平面上;在至少一个帧中检测平面;基于检测到的平面在至少一个帧中从平面分割对象;基于从平面分割对象来产生该对象的三维(3D)模型;以及产生与位于平面上的对象的该部分对应的3D模型的部分的细化网格。
方面13:根据方面12所述的装置,其中,至少一个帧包括场景内与至少一个帧的像素的深度对应的深度信息。
方面14:根据方面12至13中的任一者所述的装置,其中,至少一个帧包括第一帧,并且其中一个或多个处理器被配置成:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;从第一帧到第二帧跟踪该平面;基于跟踪该平面,在第二帧中从平面分割该对象;以及基于在第一帧和第二帧中从平面分割该对象来产生对象的3D模型。
方面15:根据方面14所述的装置,其中,从第一帧到第二帧跟踪平面包括跟踪该平面的姿态,并且其中基于第二帧中平面的跟踪的姿态来从该平面分割对象。
方面16:根据方面14或15中的任一者所述的装置,其中,一个或多个处理器被配置成:确定从第二帧分割的对象的像素数量;确定该像素数量是在从第一帧分割的对象的阈值像素数量内;以及基于该像素数量是在从第一帧分割的对象的阈值像素数量内,确定在第二帧中从平面分割该对象是成功的。
方面17:根据方面12至16中的任一者所述的装置,其中,至少一个帧包括第一帧,并且其中一个或多个处理器被配置成:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定平面已被跟踪的帧的数量;以及基于平面已被跟踪的帧的数量来确定是对第二帧执行平面检测还是对象跟踪。
方面18:根据方面17所述的装置,其中,一个或多个处理器被配置成:基于确定平面已被跟踪的帧的数量满足跟踪阈值,基于第二帧中的平面检测来检测该平面。
方面19:根据方面17或18中的任一者所述的装置,其中,一个或多个处理器被配置成:基于确定平面已被跟踪的帧的数量小于跟踪阈值,基于从第一帧到第二帧的对象跟踪来跟踪该平面。
方面20:根据方面12至19中的任一者所述的装置,其中,至少一个帧包括第一帧,并且其中一个或多个处理器被配置成:获得场景中对象的第二帧,其中对象的该部分在第二帧中位于平面上;确定对象的平面分割失败的数量,当没有在帧中从平面分割对象时平面分割失败发生;以及基于确定对象的平面分割失败的数量满足失败阈值来在第二帧中检测平面。
方面21:根据方面12至20中的任一者所述的装置,其中,产生用于对象的3D模型的部分的细化网格包括:产生用于对象的3D模型的该部分的初始网格;确定包括属于初始网格的单个三角形的初始网格的边的边界集;以及使用该边界集产生用于对象的3D模型的该部分的细化网格。
方面22:根据方面12至21中的任一者所述的装置,其中,产生对象的3D模型包括:获得场景中对象的第一帧;在第一帧中从平面分割对象;产生第一帧中与对象相关联的点的第一3D网格;获得场景中对象的第二帧;在第二帧中从平面分割对象;产生第一帧中与对象相关联的点的第二3D网格;以及组合点的第一3D网格和点的第二3D网格。
方面23:根据方面12至22中的任一者所述的装置,其中,该装置是移动设备。
方面24:根据方面12至23中的任一者所述的装置,还包含被配置成捕捉一个或多个帧的相机。
方面25:根据方面12至24中的任一者所述的装置,还包含被配置成显示该对象的3D模型的显示器。
方面26:一种非暂时性计算机可读介质,其上存储有指令,这些指令在由一个或多个处理器执行时使得该一个或多个处理器执行根据方面1至25中的任一者的操作。
方面26:一种包含用于执行根据方面1至25中的任一者的操作的一个或多个部件的装置。
Claims (30)
1.一种产生一个或多个三维模型的方法,所述方法包含:
获得场景中对象的至少一个帧,其中所述对象的部分在所述至少一个帧中位于平面上;
在所述至少一个帧中检测所述平面;
基于检测到的平面在所述至少一个帧中从所述平面分割所述对象;
基于从所述平面分割所述对象来产生所述对象的三维(3D)模型;以及
产生与位于所述平面上的所述对象的所述部分对应的3D模型的部分的细化网格。
2.根据权利要求1所述的方法,其中,所述至少一个帧包括所述场景内与所述至少一个帧的像素的深度对应的深度信息。
3.根据权利要求1所述的方法,其中,所述至少一个帧包括第一帧,所述方法包含:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
从所述第一帧到所述第二帧跟踪所述平面;
基于跟踪所述平面,在所述第二帧中从所述平面分割所述对象;以及
基于在所述第一帧和所述第二帧中从所述平面分割所述对象来产生所述对象的3D模型。
4.根据权利要求3所述的方法,其中,从所述第一帧到所述第二帧跟踪所述平面包括跟踪所述平面的姿态,并且其中基于所述第二帧中所述平面的跟踪的姿态来从所述平面分割所述对象。
5.根据权利要求3所述的方法,还包含:
确定从所述第二帧分割的所述对象的像素数量;
确定所述像素数量是在从所述第一帧分割的所述对象的阈值像素数量内;以及
基于所述像素数量是在从所述第一帧分割的所述对象的所述阈值像素数量内,确定在所述第二帧中从所述平面分割所述对象是成功的。
6.根据权利要求1所述的方法,其中,所述至少一个帧包括第一帧,所述方法包含:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
确定所述平面已被跟踪的帧的数量;以及
基于所述平面已被跟踪的所述帧的数量来确定是对所述第二帧执行平面检测还是对象跟踪。
7.根据权利要求6所述的方法,还包含:
基于确定所述平面已被跟踪的所述帧的数量满足跟踪阈值,基于所述第二帧中的平面检测来检测所述平面。
8.根据权利要求6所述的方法,还包含:
基于确定所述平面已被跟踪的所述帧的数量小于跟踪阈值,基于从所述第一帧到所述第二帧的对象跟踪来跟踪所述平面。
9.根据权利要求1所述的方法,其中,所述至少一个帧包括第一帧,所述方法包含:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
确定所述对象的平面分割失败的数量,当没有在帧中从所述平面分割所述对象时发生平面分割失败;以及
基于确定所述对象的平面分割失败的所述数量满足失败阈值来在所述第二帧中检测所述平面。
10.根据权利要求1所述的方法,其中,产生所述对象的3D模型的所述部分的所述细化网格包括:
产生所述对象的3D模型的所述部分的初始网格;
确定包括属于所述初始网格的单个三角形的所述初始网格的边的边界集;以及
使用所述边界集产生所述对象的3D模型的所述部分的所述细化网格。
11.根据权利要求1所述的方法,其中,产生所述对象的3D模型包括:
获得所述场景中所述对象的第一帧;
在所述第一帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第一3D网格;
获得所述场景中所述对象的第二帧;
在所述第二帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第二3D网格;以及
组合点的所述第一3D网格和点的所述第二3D网格。
12.一种用于产生一个或多个三维模型的装置,包含:
存储器,被配置成存储一个或多个帧;以及
一个或多个处理器,耦合到所述存储器且被配置成:
获得场景中对象的至少一个帧,其中所述对象的部分在所述至少一个帧中位于平面上;
在所述至少一个帧中检测所述平面;
基于检测到的平面在所述至少一个帧中从所述平面分割所述对象;
基于从所述平面分割所述对象来产生所述对象的三维(3D)模型;以及
产生与位于所述平面上的所述对象的所述部分对应的3D模型的部分的细化网格。
13.根据权利要求12所述的装置,其中,所述至少一个帧包括所述场景内与所述至少一个帧的像素的深度对应的深度信息。
14.根据权利要求12所述的装置,其中,所述至少一个帧包括第一帧,并且其中所述一个或多个处理器被配置成:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
从所述第一帧到所述第二帧跟踪所述平面;
基于跟踪所述平面,在所述第二帧中从所述平面分割所述对象;以及
基于在所述第一帧和所述第二帧中从所述平面分割所述对象来产生所述对象的3D模型。
15.根据权利要求14所述的装置,其中,从所述第一帧到所述第二帧跟踪所述平面包括跟踪所述平面的姿态,并且其中基于所述第二帧中所述平面的跟踪的姿态来从所述平面分割所述对象。
16.根据权利要求14所述的装置,其中,所述一个或多个处理器被配置成:
确定从所述第二帧分割的所述对象的像素数量;
确定所述像素数量是在从所述第一帧分割的所述对象的阈值像素数量内;以及
基于所述像素数量是在从所述第一帧分割的所述对象的所述阈值像素数量内,确定在所述第二帧中从所述平面分割所述对象是成功的。
17.根据权利要求12所述的装置,其中,所述至少一个帧包括第一帧,并且其中所述一个或多个处理器被配置成:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
确定所述平面已被跟踪的帧的数量;以及
基于所述平面已被跟踪的所述帧的数量来确定是对所述第二帧执行平面检测还是对象跟踪。
18.根据权利要求17所述的装置,其中,所述一个或多个处理器被配置成:
基于确定所述平面已被跟踪的所述帧的数量满足跟踪阈值,基于所述第二帧中的平面检测来检测所述平面。
19.根据权利要求17所述的装置,其中,所述一个或多个处理器被配置成:
基于确定所述平面已被跟踪的所述帧的数量小于跟踪阈值,基于从所述第一帧到所述第二帧的对象跟踪来跟踪所述平面。
20.根据权利要求12所述的装置,其中,所述至少一个帧包括第一帧,并且其中所述一个或多个处理器被配置成:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
确定所述对象的平面分割失败的数量,当没有在帧中从所述平面分割所述对象时发生平面分割失败;以及
基于确定所述对象的平面分割失败的所述数量满足失败阈值来在所述第二帧中检测所述平面。
21.根据权利要求12所述的装置,其中,产生所述对象的3D模型的所述部分的所述细化网格包括:
产生所述对象的3D模型的所述部分的初始网格;
确定包括属于所述初始网格的单个三角形的所述初始网格的边的边界集;以及
使用所述边界集产生所述对象的3D模型的所述部分的所述细化网格。
22.根据权利要求12所述的装置,其中,产生所述对象的3D模型包括:
获得所述场景中所述对象的第一帧;
在所述第一帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第一3D网格;
获得所述场景中所述对象的第二帧;
在所述第二帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第二3D网格;以及
组合点的所述第一3D网格和点的所述第二3D网格。
23.根据权利要求12所述的装置,其中,所述装置是移动设备。
24.根据权利要求12所述的装置,还包含被配置成捕捉所述一个或多个帧的相机。
25.根据权利要求12所述的装置,还包含被配置成显示所述对象的3D模型的显示器。
26.一种非暂时性计算机可读介质,其上存储有指令,所述指令在由一个或多个处理器执行时,使得所述一个或多个处理器:
获得场景中对象的至少一个帧,其中所述对象的部分在所述至少一个帧中位于平面上;
在所述至少一个帧中检测所述平面;
基于检测到的平面在所述至少一个帧中从所述平面分割所述对象;
基于从所述平面分割所述对象来产生所述对象的三维(3D)模型;以及
产生与位于所述平面上的所述对象的所述部分对应的3D模型的部分的细化网格。
27.根据权利要求26所述的非暂时性计算机可读介质,其中,所述至少一个帧包括第一帧,并且还包含指令,所述指令在由所述一个或多个处理器执行时,使得所述一个或多个处理器:
获得所述场景中所述对象的第二帧,其中所述对象的所述部分在所述第二帧中位于所述平面上;
从所述第一帧到所述第二帧跟踪所述平面;
基于跟踪所述平面,在所述第二帧中从所述平面分割所述对象;以及
基于在所述第一帧和所述第二帧中从所述平面分割所述对象来产生所述对象的3D模型。
28.根据权利要求27所述的非暂时性计算机可读介质,还包含:
确定从所述第二帧分割的所述对象的像素数量;
确定所述像素数量是在从所述第一帧分割的所述对象的阈值像素数量内;以及
基于所述像素数量是在从所述第一帧分割的所述对象的所述阈值像素数量内,确定在所述第二帧中从所述平面分割所述对象是成功的。
29.根据权利要求26所述的非暂时性计算机可读介质,其中,产生所述对象的3D模型的所述部分的所述细化网格包括:
产生所述对象的3D模型的所述部分的初始网格;
确定包括属于所述初始网格的单个三角形的所述初始网格的边的边界集;以及
使用所述边界集产生所述对象的3D模型的所述部分的所述细化网格。
30.根据权利要求26所述的非暂时性计算机可读介质,其中,产生所述对象的3D模型包括:
获得所述场景中所述对象的第一帧;
在所述第一帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第一3D网格;
获得所述场景中所述对象的第二帧;
在所述第二帧中从所述平面分割所述对象;
产生所述第一帧中与所述对象相关联的点的第二3D网格;以及
组合点的所述第一3D网格和点的所述第二3D网格。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311473590.5A CN117994283A (zh) | 2020-08-20 | 2021-08-17 | 使用平面分割的对象扫描 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/998,975 US11361508B2 (en) | 2020-08-20 | 2020-08-20 | Object scanning using planar segmentation |
US16/998,975 | 2020-08-20 | ||
PCT/US2021/046370 WO2022040232A1 (en) | 2020-08-20 | 2021-08-17 | Object scanning using planar segmentation |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311473590.5A Division CN117994283A (zh) | 2020-08-20 | 2021-08-17 | 使用平面分割的对象扫描 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116324880A true CN116324880A (zh) | 2023-06-23 |
CN116324880B CN116324880B (zh) | 2023-11-17 |
Family
ID=77693622
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311473590.5A Pending CN117994283A (zh) | 2020-08-20 | 2021-08-17 | 使用平面分割的对象扫描 |
CN202180055267.9A Active CN116324880B (zh) | 2020-08-20 | 2021-08-17 | 使用平面分割的对象扫描 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311473590.5A Pending CN117994283A (zh) | 2020-08-20 | 2021-08-17 | 使用平面分割的对象扫描 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11361508B2 (zh) |
EP (1) | EP4200802A1 (zh) |
CN (2) | CN117994283A (zh) |
WO (1) | WO2022040232A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11361508B2 (en) | 2020-08-20 | 2022-06-14 | Qualcomm Incorporated | Object scanning using planar segmentation |
US11622073B2 (en) * | 2020-11-30 | 2023-04-04 | Yandex Europe Ag | Method of generating a panoramic image |
US11954798B2 (en) * | 2021-04-22 | 2024-04-09 | Faro Technologies, Inc. | Automatic selection of a region in a three-dimensional (3D) point cloud |
US20230290037A1 (en) * | 2022-03-10 | 2023-09-14 | Streem, Llc | Real-time progressive texture mapping of a 3d mesh |
CN114862651B (zh) * | 2022-07-05 | 2022-09-27 | 深圳市国人光速科技有限公司 | 提升显示效果的喷印用图像处理方法、装置、设备及介质 |
CN116543330A (zh) * | 2023-04-13 | 2023-08-04 | 北京京东乾石科技有限公司 | 农作物信息存储方法、装置、电子设备和计算机可读介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102074020A (zh) * | 2010-12-31 | 2011-05-25 | 浙江大学 | 对视频进行多体深度恢复和分割的方法 |
US20120176477A1 (en) * | 2004-07-30 | 2012-07-12 | Dor Givon | Methods, Systems, Devices and Associated Processing Logic for Generating Stereoscopic Images and Video |
US20140177915A1 (en) * | 2012-12-26 | 2014-06-26 | Shengyin FAN | Method and apparatus for detecting object |
US20160055268A1 (en) * | 2014-06-06 | 2016-02-25 | Matterport, Inc. | Semantic understanding of 3d data |
US20160196659A1 (en) * | 2015-01-05 | 2016-07-07 | Qualcomm Incorporated | 3d object segmentation |
US20170243352A1 (en) * | 2016-02-18 | 2017-08-24 | Intel Corporation | 3-dimensional scene analysis for augmented reality operations |
CN108701376A (zh) * | 2016-02-09 | 2018-10-23 | 英特尔公司 | 三维图像的基于识别的对象分割 |
CN109923582A (zh) * | 2016-08-26 | 2019-06-21 | 医科达有限公司 | 使用卷积神经网络进行图像分割的系统和方法 |
CN110633617A (zh) * | 2018-06-25 | 2019-12-31 | 苹果公司 | 使用语义分割的平面检测 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1444654A2 (de) * | 2001-03-08 | 2004-08-11 | Universite Joseph Fourier | Quantitative analyse, visualisierung und bewegungskorrektur in dynamischen prozessen |
JP6473571B2 (ja) * | 2014-03-24 | 2019-02-20 | アルパイン株式会社 | Ttc計測装置およびttc計測プログラム |
US10372970B2 (en) * | 2016-09-15 | 2019-08-06 | Qualcomm Incorporated | Automatic scene calibration method for video analytics |
US11361508B2 (en) | 2020-08-20 | 2022-06-14 | Qualcomm Incorporated | Object scanning using planar segmentation |
-
2020
- 2020-08-20 US US16/998,975 patent/US11361508B2/en active Active
-
2021
- 2021-08-17 CN CN202311473590.5A patent/CN117994283A/zh active Pending
- 2021-08-17 WO PCT/US2021/046370 patent/WO2022040232A1/en unknown
- 2021-08-17 CN CN202180055267.9A patent/CN116324880B/zh active Active
- 2021-08-17 EP EP21766784.9A patent/EP4200802A1/en active Pending
-
2022
- 2022-05-13 US US17/744,484 patent/US11748949B2/en active Active
-
2023
- 2023-07-17 US US18/353,592 patent/US20240005607A1/en active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120176477A1 (en) * | 2004-07-30 | 2012-07-12 | Dor Givon | Methods, Systems, Devices and Associated Processing Logic for Generating Stereoscopic Images and Video |
CN102074020A (zh) * | 2010-12-31 | 2011-05-25 | 浙江大学 | 对视频进行多体深度恢复和分割的方法 |
US20140177915A1 (en) * | 2012-12-26 | 2014-06-26 | Shengyin FAN | Method and apparatus for detecting object |
US20160055268A1 (en) * | 2014-06-06 | 2016-02-25 | Matterport, Inc. | Semantic understanding of 3d data |
US20160196659A1 (en) * | 2015-01-05 | 2016-07-07 | Qualcomm Incorporated | 3d object segmentation |
CN108701376A (zh) * | 2016-02-09 | 2018-10-23 | 英特尔公司 | 三维图像的基于识别的对象分割 |
US20170243352A1 (en) * | 2016-02-18 | 2017-08-24 | Intel Corporation | 3-dimensional scene analysis for augmented reality operations |
CN109923582A (zh) * | 2016-08-26 | 2019-06-21 | 医科达有限公司 | 使用卷积神经网络进行图像分割的系统和方法 |
CN110633617A (zh) * | 2018-06-25 | 2019-12-31 | 苹果公司 | 使用语义分割的平面检测 |
Non-Patent Citations (1)
Title |
---|
LAN HU 等: "deep-SLAM++:object-level RGBD SLAM based on class-specific deep shape priors", ARXIV.ORG * |
Also Published As
Publication number | Publication date |
---|---|
CN116324880B (zh) | 2023-11-17 |
US20240005607A1 (en) | 2024-01-04 |
US20220343602A1 (en) | 2022-10-27 |
US20220058871A1 (en) | 2022-02-24 |
US11748949B2 (en) | 2023-09-05 |
WO2022040232A1 (en) | 2022-02-24 |
US11361508B2 (en) | 2022-06-14 |
EP4200802A1 (en) | 2023-06-28 |
CN117994283A (zh) | 2024-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116324880B (zh) | 使用平面分割的对象扫描 | |
US10867430B2 (en) | Method and system of 3D reconstruction with volume-based filtering for image processing | |
US10679361B2 (en) | Multi-view rotoscope contour propagation | |
EP2992508B1 (en) | Diminished and mediated reality effects from reconstruction | |
US10755425B2 (en) | Automatic tuning of image signal processors using reference images in image processing environments | |
US9237330B2 (en) | Forming a stereoscopic video | |
CN110869980B (zh) | 将内容分发和呈现为球形视频和3d资产组合 | |
US9041819B2 (en) | Method for stabilizing a digital video | |
KR102169492B1 (ko) | 평면의 자연스러운 특성 타겟들의 인시츄 생성 | |
CN115699114B (zh) | 用于分析的图像增广的方法和装置 | |
US20130127988A1 (en) | Modifying the viewpoint of a digital image | |
US8611642B2 (en) | Forming a steroscopic image using range map | |
US9639943B1 (en) | Scanning of a handheld object for 3-dimensional reconstruction | |
US20130129192A1 (en) | Range map determination for a video frame | |
US20220385721A1 (en) | 3d mesh generation on a server | |
KR102598459B1 (ko) | 지평면 검출에 기초한 이미지 시퀀스로부터의 사람 객체의 손실 발 복구 | |
US11527014B2 (en) | Methods and systems for calibrating surface data capture devices | |
Luo et al. | A disocclusion inpainting framework for depth-based view synthesis | |
WO2019244944A1 (ja) | 三次元再構成方法および三次元再構成装置 | |
US20130315471A1 (en) | Concave surface modeling in image-based visual hull | |
US20230131418A1 (en) | Two-dimensional (2d) feature database generation | |
US20230290036A1 (en) | Local live texturing of a 3d mesh | |
US20240144595A1 (en) | 3d scene reconstruction with additional scene attributes | |
US20240127529A1 (en) | Generation of reflectance maps for relightable 3d models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |