CN109716329B - 使用偏差来对点云进行k-d树编码 - Google Patents
使用偏差来对点云进行k-d树编码 Download PDFInfo
- Publication number
- CN109716329B CN109716329B CN201780056579.5A CN201780056579A CN109716329B CN 109716329 B CN109716329 B CN 109716329B CN 201780056579 A CN201780056579 A CN 201780056579A CN 109716329 B CN109716329 B CN 109716329B
- Authority
- CN
- China
- Prior art keywords
- points
- partition
- buffer
- block
- axis
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
一种编码器包括处理器、缓冲器和存储器。所述存储器包括作为指令的代码,所述指令使所述处理器执行许多步骤。所述步骤包括量化与几何构造相关联的几何数据、对所述几何构造进行分区、确定所述分区中的点的数目、基于所述分区中的点的所述数目生成偏差值、将所述偏差值存储在所述缓冲器中以及对所述偏差值进行熵编码。
Description
相关申请的交叉引用
本申请要求于2016年11月17日提交的标题为“K-D TREE ENCODING FOR POINTCLOUDS USING DEVIATIONS”的美国非临时专利申请No.15/354,669和于2016年11月17日提交的标题为“ADVANCED K-D TREE ENCODING FOR POINT CLOUDS BY MOST SIGNIFICANTAXIS SELECTION”的美国非临时专利申请No.15/354,683的优先权和权益,其内容通过引用整体地并入在本文中。
技术领域
实施例涉及使用k-D树来对几何构造内的点云或点进行编码。
背景技术
生成大量的数据点的表示(例如,压缩或编码)以及解释大量的数据点的表示(例如,解压缩或解码)应该包括使用尽可能少的空间(例如,带宽或存储器)来尽可能存储和/或传送表示,生成应该是快速的(考虑处理能力和情境时间线)并且应该使代码复杂度最小化(例如,以影响处理时间)。
发明内容
示例实施例描述用于对点云进行编码并且用于对编码点云进行解码的系统和方法。
在一般方面中,编码器包括处理器、缓冲器和存储器。存储器包括作为指令的代码,所述指令使处理器执行许多步骤。步骤包括量化与几何构造相关联的几何数据、对几何构造进行分区、确定分区中的点的数目、基于分区中的点的数目生成偏差值、将偏差值存储在缓冲器中以及对偏差值进行熵编码。
在另一一般方面中,方法包括量化与几何构造相关联的几何数据、对几何构造进行分区、确定分区中的点的数目、基于分区中的点的数目生成偏差值、将偏差值存储在缓冲器中以及对偏差值进行熵编码。
因此,可以更高效地完成表示或者解释表示(例如,压缩或解压缩、编码或解码)。例如,可以要求更少的计算资源(例如,存储、带宽、存储器和/或处理能力)。
实施方式可包括以下特征中的一个或多个。例如,几何数据的量化可包括将与几何数据相关联的浮点或双精度型值转换成b比特整数表示。几何数据可表示点云并且几何构造可以是包含点云的二维或更多维形状。几何构造的分区可包括使用k-D树来递归地对几何构造进行分区。例如,几何构造的分区可包括使用k-D树来对几何构造进行分区,以及确定分区是否可包括多于阈值数目的点。在确定分区包括多于阈值数目的点时,将点的数目存储在缓冲器中,并且进一步对包括多于阈值数目的点的分区进行分区。在确定分区包括少于阈值数目的点时,确定分区是否包括至少一个点,在确定分区包括至少一个点时缓冲器可以是第一缓冲器,编码器还可包括第二缓冲器,并且将表示点的位置的值存储在第二缓冲器中。
例如,可以从对象的物理测量结果(被表示或者近似为几何构造)获得几何数据。可以进行测量(例如,通过扫描对象)以获得这种数据。
例如,可基于父分区中的点的数目确定与点的数目相对应的偏差值。几何构造的分区可包括使用k-D树来将几何构造分区成第一分区,第一分区可包括第二分区和第三分区,并且可基于第一分区中的点的数目确定与第二分区中的点的数目相对应的偏差值。
在再一个一般方面中,解码器包括处理器、第一缓冲器、第二缓冲器和存储器。存储器包括作为指令的代码,所述指令使处理器使用来自编码几何数据文件的数据来加载第一缓冲器,使用来自编码几何数据文件的数据来加载第二缓冲器,对第一缓冲器进行熵解码,确定在几何构造中要插入来自第一缓冲器的数据的第一分区,基于来自第一缓冲器的数据将第一数目的点插入到分区中,并且确定点的第一数目是否大于阈值。在确定点的第一数目大于阈值时,将第一分区划分成第二分区和第三分区,并且基于来自第一缓冲器的数据将第一数目的点的子集移动到第二分区或第三分区中的一个。在确定点的第一数目少于或等于阈值时,基于第二缓冲器中的数据定位第一分区中的点,并且在用第一数目的点的子集替换第一数目的点的第二分区或第三分区上重复确定点的第一数目是否大于阈值并且直到几何构造中的每个分区包括少于或等于阈值的点的数目为止。
在另一一般方面中,方法包括使用来自编码几何数据文件的数据来加载第一缓冲器。使用来自编码几何数据文件的数据来加载第二缓冲器。对第一缓冲器进行熵解码。确定在几何构造中要插入来自第一缓冲器的数据的第一分区。基于来自第一缓冲器的数据将第一数目的点插入到分区中。确定点的第一数目是否大于阈值。在确定点的第一数目大于阈值时,将第一分区划分成第二分区和第三分区,并且基于来自第一缓冲器的数据将第一数目的点的子集移动到第二分区或第三分区中的一个。在确定点的第一数目少于或等于阈值时,基于第二缓冲器中的数据定位第一分区中的点,并且在用第一数目的点的子集替换第一数目的点的第二分区或第三分区上重复确定点的第一数目是否大于阈值并且直到几何构造中的每个分区包括少于或等于阈值的点的数目为止。
实施方式可包括以下特征中的一个或多个。例如,第一缓冲器的熵解码可包括转换与第二分区中的点的数目相对应的偏差值。几何数据文件可包括表示点云的几何数据并且几何构造可以是包含点云的二维或更多维形状。确定第一分区并且确定第二分区可包括基于第一缓冲器和第二缓冲器构建k-D树。第一缓冲器的熵解码可包括转换与第二分区中的点的数目相对应的偏差值,并且可基于包括分区的较大分区中的点的数目确定与点的数目相对应的偏差值。第二缓冲器可包括表示几何构造中的点的位置的数据。
例如,几何构造可以是可以根据数学规则、等式或算法来定义的形状或几何形状的表示(例如,数字表示)。
例如,熵编码可以是无损数据压缩。
应该注意的是,上述的任何特征可以与本发明的任何特定方面或实施例一起使用。
附图说明
示例实施例将从下文给出的详细描述和附图中变得被更充分地理解,其中相似的元件通过相似的附图标记来表示,附图标记仅作为图示被给出并且因此不限制示例实施例,并且其中:
图1图示根据至少一个示例实施例的用于对数据进行编码的方法。
图2A-2K图示根据至少一个示例实施例的二维(2D)几何构造的递归k-D树表示。
图3A-3M图示根据至少一个示例实施例的二维(2D)几何构造的另一递归k-D树表示。
图4A-4F图示根据至少一个示例实施例的二维(2D)几何构造的再一个递归k-D树表示。
图5A-5C图示根据至少一个示例实施例的k-D树的节点表示。
图6A-6C图示根据至少一个示例实施例的缓冲器。
图7图示根据至少一个示例实施例的用于对数据进行解码的方法。
图8A和图8B图示根据至少一个示例实施例的用于选择要划分的轴的方法。
图9图示根据至少一个示例实施例的编码器。
图10图示根据至少一个示例实施例的解码器。
图11图示根据至少一个示例实施例的编码器系统。
图12图示根据至少一个示例实施例的解码器系统。
图13示出根据至少一个示例实施例的计算机设备和移动计算机设备的示例。
应该注意的是,这些图旨在图示在某些示例实施例中利用的方法和/或结构的一般特性,并且旨在补充在下面提供的撰写描述。然而,这些附图不是按比例的并且可能不精确地反映任何给定实施例的精确结构或性能特性,并且不应该被解释为限定或者限制由示例实施例所包含的值或性质的范围。例如,为了清楚可以缩小或者放大部分、区域和/或结构元件的定位。在各个附图中使用类似或相同的附图标记旨在指示存在类似或相同的元件或特征。
具体实施方式
虽然示例实施例可以包括各种修改和替代形式,其实施例被作为示例示出在附图中并且将在本文中被详细地描述。然而,应该理解的是,不存在将示例实施例限于所公开的特定形式的意图,而是相反,示例实施例将涵盖落入权利要求的范围内的所有修改、等同物和替代物。
关于图1和图7所描述的方法步骤可以作为存储在与编码器系统和/或解码器系统(例如,如图9-13中所示)相关联的存储器(例如,至少一个存储器1110、1210)中的软件代码被执行并且由与编码器和/或系统相关联的至少一个处理器(例如,处理器1105、1205)执行。然而,设想了替代实施例,诸如作为专用处理器具体实现的编码器或解码器。
例如,方法步骤可以由专用集成电路或ASIC执行。例如,可以将ASIC配置为编码器905、解码器1005、控制器1120和/或控制器1220。尽管在下面描述的步骤被描述为由处理器执行,然而步骤不一定由同一处理器执行。换句话说,至少一个处理器可以执行在下面关于图1和图7所描述的步骤。
图1图示根据至少一个示例实施例的用于对数据进行编码的方法。如图1中所示,在步骤S105中量化与几何构造相关联的几何数据。例如,表示几何构造(也称为点云)的点坐标可作为浮点或双精度型比特表示被存储(例如,在存储器中)。然而,浮点或双精度型可以比所需的更精确(例如,以按可接受的损失量重构数据)。作为示例,点云可以按某个测量误差从扫描器(例如,扫描建筑物的外部)产生。因此,较低比特的很大一部分可以是噪声。量化可以去除较低比特。然而,(在此示例中)较低比特与测量误差相关联,当对得到的压缩(例如,编码)点云进行解压缩(解码)时,所述测量误差可能具有可忽视的影响。
量化可包括将一系列值(例如,浮点或双精度型)映射或者转换到单个量子值。在示例实施例中,量化可将与点云相关联的浮点数转换成b比特长整数表示。因此,点云可通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目(精度=(1/2)b)。
在步骤S110中递归地对几何构造进行分区。例如,可通过在轴内对分构造来对几何构造(例如,在下面关于图2A-2K、图3A-3M和/或图4A-4F所描述的2D构造)进行分区。然后可在另一轴内对分所述部分之一且依此类推,直到几何构造的一部分包括等于或低于阈值(例如,2个点)的许多点为止。在示例实施方式中,可使用k-D树算法(在下面更详细地描述)来递归地对几何构造进行分区。
在步骤S115中确定用于每个递归迭代的每个分区中的点的数目。例如,参考图2B,可确定块204和块206中的点的数目。在另一(例如,后续)递归迭代中,参考图2E,可确定块216和块218中的点的数目。在示例实施方式中,可确定块216和块218中的点的数目。然而,在前一个迭代中,可能已确定并存储了块212中的点的数目。因此,如果块218中的点的数目被存储,则块216中的点的数目是已知的,因为块216中的点的数目是块212中的点的数目减去块218中的点的数目。
在步骤S120中生成基于分区中的点的数目的偏差值。例如,可将参考值确定为几何构造的分区(例如,父分区或块)中的点的数目(N)除以二(N/2)。在示例实施方式中,参考值可以是将块划分成两个部分(例如,两个块)或者对分的父块或节点的点的数目除以二(N/2)。例如,参考图2C和图2D,块210被划分或者对分(例如,向中间往下分割)以生成块212和214。用于块212和块214的参考值可以是块210中的点的数目除以二(2)(但是为了效率参考值可以未被用于块214)。与点的数目相比较,通过对偏差值进行压缩,压缩率应该较高,因为偏差值应该是较小的整数(例如,具有较大数目的前导零)。
然后可基于参考值(N/2)和数据确定偏差值。例如,用于值p(其中p是块中的点的数目或者与k-D树中的节点相关联)的偏差值可以是p-N/2,其中N/2是参考值(例如,父块中的点的数目除以二)。继续上述示例,用于块212的偏差值可以是NP-212—(NP-210/2)。偏差值应该小于实际值p(例如,在b比特整数中具有更多的前导零)。在示例实施方式(例如,如图4A-4F中所示)中确定偏差值可以是可选的。因此,可以跳过步骤S120,可以通过步骤S120传递分区中的点的数目和/或用于确定或者计算偏差值的算法可以在一些实施方式中返回分区中的点的数目。
在步骤S125中偏差值被存储在缓冲器中。例如,可将偏差值存储在缓冲器925(在下面更详细地描述)中。在示例实施方式中,与分区块中的一个中的点的数目相对应的偏差值被存储。可通过每递归迭代存储分区块中的一个的点的数目而不是存储两个块中的点的数目来减少存储器、比特、带宽等。此外,可以将用于存储与分区块中的一个中的点的数目相对应的每个偏差值的比特数减少到(上舍入比特数等于)log2(N),其中N是所对应的分区块中的点的数目。例如(参考在下面描述的图2K),如果块208包含500个点,则块210中的点的数目也可以是至多500。因此,存储该数目所需的比特数是上舍入的log2(500)。如上面所讨论的,在示例实施方式中确定偏差值可以是可选的。因此,步骤S125可以将分区中的点的数目存储在缓冲器中。
在步骤S130中对缓冲器进行编码。例如,可对缓冲器(例如,缓冲器925)中的每个整数表示进行编码。在示例实施方式中,可对缓冲器进行熵或算术编码。可使用诸如霍夫曼编译、算术编译、折叠整数编译等的编解码器来对偏差值进行编码。不是针对每一符号使用相同量的比特,而是霍夫曼编译或算术编译或折叠整数编译等将较少的比特指派给最频繁的符号,同时在不太频繁的符号上使用更多的比特。总的来说,这导致整个序列的比特较少。霍夫曼编码可以是快的,而算术编码可实现更好的压缩率。因此,熵编码方案之间的选择可基于速度与压缩率目标的关系。使用偏差值可导致较小的值,这进而可能更频繁并因此在熵编码时产生较高的压缩率。
图2A-2K图示根据至少一个示例实施例的二维(2D)几何构造的递归k-D树表示。关于图2A-2K所描述的示例实施例实现深度优先递归。换句话说,对块进行划分或分区包括通过深入(例如,级别向下)来选择用于分区的下一个块而不是选择相同级别上的下一个块。另外,示例实施方式首先沿x轴然后沿着y轴划分或者分区。示例实施例不限于深度优先递归或特定轴次序。
图2A将二维(2D)几何构造图示为具有x轴和y轴的块202。块202可包含具有许多点的点云(未示出)。尽管块202被图示为二维的,然而示例实施例不限于此。替代地,块202和所对应的点云可能是三维的、四维的、五维的、六维的等。换句话说,所对应的点云可能是并且所对应的几何构造可以是二维或更多维形状。例如,能使用三维激光扫描来生成块202和所对应的点云。因此,块202和所对应的点云能包括x轴、y轴和z轴(表示深度)。另外,激光扫描可能是彩色激光扫描。因此,在块202中还可以存在各自具有对应轴的RGB表示并且所对应的点云可能是总计六个轴或六个维度。因此,尽管为了简洁起见以下描述是二维几何构造的,然而应理解的是,附加维度在本公开的范围内。
如上所述,块202可包含具有许多点的点云(未示出)。另外,可量化这些点,使得这些点通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目。因此,x轴可具有2b个唯一值并且y轴可具有2b个唯一值。点云可包括任何数目的点。点的数目可以是相对大的数目(例如,数百万、数千万等)。
现在参考图2B,2D几何构造被划分成分区或块(在下文中块)204和块206。换句话说,块202是通过在x轴内对分几何构造来划分或者分区的。块204和块206在块的边界内可各自具有许多点。每个块中的点的数目可基于点沿着x轴的位置而变化。例如,块204和块206能具有近似相同数目的点。块204能具有所有点并且块206能具有零(并且反之亦然)。两个块之间的点的任何组合是可能的。在示例实施方式中,块的下边界和左边界属于块而上边界和右边界不属于块。因此,沿着块的下边界和左边界的点属于块,而沿着上边界和右边界的点不属于块。因此,框中的点的坐标的前L个比特与该框的左下拐角的对应坐标的前L个比特相同,其中L是算法已经细分对应轴的次数。
现在参考图2C,2D几何构造被划分成块208、块210和块206。换句话说,块204是通过在y轴内对分2D几何构造来划分或者分区的。块208和块210在块的边界内可各自具有许多点。图2C中所图示的块204的划分假定块204包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。然而,如果块204是空的或者具有少于阈值数目的点,则将不进一步划分块204。在示例实施方式中,使用k-D树算法的递归划分首先将2D构造划分到左边(例如,到x轴或y轴的较低值)。递归向左继续直到块包括(或者包括少于)阈值数目的点为止。然后递归划分移动到具有大于阈值的许多点的下一个最左块。
现在参考图2D,2D几何构造被划分成块212、块214、块208和块206。换句话说,块210是通过在x轴内对分块210来划分或者分区的。块212和块214在块的边界内可各自具有许多点。现在参考图2E,2D几何构造被划分成块216、块218、块214、块208和块206。换句话说,块212是通过在y轴内对分块212来划分或者分区的。块216和块218在块的边界内可各自具有许多点。现在参考图2F,2D几何构造被划分成块220、块222、块216、块214、块208和块206。换句话说,块218是通过在x轴内对分块218来划分或者分区的。块220和块222在块的边界内可各自具有许多点。现在参考图2G,2D几何构造被划分成块224块226、块222、块216、块214、块208和块206。换句话说,块220是通过在y内轴对分块220来划分或者分区的。块224和块226在块的边界内可各自具有许多点。
现在参考图2H,块222被确定为具有少于或等于阈值数目的点(例如,2个点、3个点等)的许多点。例如,如果阈值数目的点是二(2),则块222在块的边界内具有两(2)个或更少的点。因此,不进一步划分块222。因此,递归算法移到块216,其中块216被评估并确定为具有大于阈值数目的点(例如,2个点、3个点等)的许多点。结果,2D几何构造被划分成块228、块230、块224和块226、块214、块208和块206。换句话说,块216是通过在x轴内对分块216来划分或者分区的。块228和块230在块的边界内可各自具有许多点。
现在参考图2J,2D几何构造被划分成块236、块234、块228、块226、块224、块222、块214、块208和块206。换句话说,块230是通过在y轴内对分块230来划分或者分区的。块234和块236在块的边界内可各自具有许多点。在此递归迭代中,块230被确定为具有大于阈值数目的点(例如,2个点、3个点等)的许多点。例如,如果阈值数目的点是二(2),则块230在块的边界内具有大于两(2)个点。因此,块230在y轴内被划分或者分区,因为块230是在块216在x轴内被划分或者分区时生成的。
现在参考图2K,2D几何构造被划分成块240、块238、块236、块234、块226、块224、块222、块214、块208和块206。换句话说,块228是通过在y轴内对分块228来划分或者分区的。在此递归迭代中,块234和块236被确定为具有少于或等于阈值数目的点(例如,2个点、3个点等)的许多点。例如,如果阈值数目的点是二(2),则块234和块236在块的边界内具有少于或等于两(2)个点。块238和块240在块的边界内可各自具有许多点。虽然块206、208和214未被图示为被进一步划分,然而除非块206、208和214是空的或者包括少于或等于阈值数目的点,否则块206、208和214将随着递归算法继续而被进一步划分。换句话说,如应用于块206、208和214的递归算法的进一步描述将重复上述实施方式并且为了简洁起见不再进行描述。
图3A-3M图示根据至少一个示例实施例的二维(2D)几何构造的另一递归k-D树表示。关于图3A-3M所描述的示例实施例实现广度优先递归。换句话说,对块进行划分或者分区包括通过移动到相同级别(例如,水平)上的下一个块来选择用于分区的下一个块而不是选择更深级别上的下一个块。另外,示例实施方式首先沿着x轴然后沿着y轴划分或者分区。示例实施例不限于广度优先递归或特定轴次序。
图3A将二维(2D)几何构造图示为具有x轴和y轴的块302。块302可包含具有许多点的点云(未示出)。尽管块302被图示为二维的,然而示例实施例不限于此。替代地,块302和所对应的点云可能是三维的、四维的、五维的、六维的等。换句话说,所对应的点云可能是并且所对应的几何构造可以是二维或更多维形状。例如,能使用三维激光扫描来生成块302和所对应的点云。因此,块302和所对应的点云能包括x轴、y轴和z轴(表示深度)。另外,激光扫描可能是彩色激光扫描。因此,在块302中还可以存在各自具有对应轴的RGB表示并且所对应的点云可能是总计六个轴或六个维度。因此,尽管为了简洁起见以下描述是二维几何构造的,然而应理解的是,附加维度在本公开的范围内。
块302可包含具有许多点的点云(未示出)。另外,可量化这些点,使得这些点通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目。因此,x轴可具有2b个唯一值并且y轴可具有2b个唯一值。点云可包括任何数目的点。点的数目可以是相对大的数目(例如,数百万、数千万等)。
现在参考图3B,2D几何构造被划分成分区或块(在下文中块)304和块306。换句话说,块302是通过在x轴内对分2D几何构造来划分或者分区的。块304和块306在块的边界内可各自具有许多点。每个块中的点的数目可基于点沿着x轴的位置而变化。例如,块304和块306能具有近似相同数目的点。块304能具有所有点并且块306能具有零(并且反之亦然)。两个块之间的点的任何组合是可能的。
现在参考图3C,2D几何构造被划分成块308、块310和块306。换句话说,块304是通过在y轴内对分2D几何构造来划分或者分区的。块308和块310在块的边界内可各自具有许多点。图3C中所图示的块304的划分假定块304包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。然而,如果块204是空的或者具有少于阈值数目的点,则将不进一步划分块204。在示例实施方式中,使用k-D树算法的递归划分首先将2D构造划分到左边(例如,到x轴或y轴的较低值)。递归向右继续并回到左边且依此类推,直到块包括(或者包括少于)阈值数目的点。
现在参考图3D,2D几何构造被划分成块308、块310、块312和块314。换句话说,块306是通过在y轴内对分2D几何构造来划分或者分区的。块312和块314在块的边界内可各自具有许多点。图3D中所图示的块306的划分假定块306包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3E,2D几何构造被划分成块310、块312、块314、块316和块318。换句话说,块308是通过在x轴内对分2D几何构造来划分或者分区的。块316和块318在块的边界内可各自具有许多点。图3E中所图示的块308的划分假定块308包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3F,2D几何构造被划分成块310、块314、块316、块318、块320和块322。换句话说,块312是通过在x轴内对分2D几何构造来划分或者分区的。块320和块322在块的边界内可各自具有许多点。图3F中所图示的块312的划分假定块312包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3G,2D几何构造被划分成块314、块316、块318、块320、块322、块324和块326。换句话说,块310是通过在x轴内对分2D几何构造来划分或者分区的。块322和块324在块的边界内可各自具有许多点。图3G中所图示的块310的划分假定块310包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3H,2D几何构造被划分成块316、块318、块320、块322、块324、块326、块328和块330。换句话说,块314是通过在x轴内对分2D几何构造来划分或者分区的。块328和块330在块的边界内可各自具有许多点。图3H中所图示的块314的划分假定块314包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3J,2D几何构造被划分成块318、块320、块322、块324、块326、块328、块330、块332和块334。换句话说,块316是通过在y轴内对分2D几何构造来划分或者分区的。块332和块334在块的边界内可各自具有许多点。图3J中所图示的块316的划分假定块316包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3K,2D几何构造被划分成块320、块322、块324、块326、块328、块330、块332、块334、块336和块338。换句话说,块318是通过在y轴内对分2D几何构造来划分或者分区的。块336和块338在块的边界内可各自具有许多点。图3K中所图示的块318的划分假定块318包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3L,2D几何构造被划分成块322、块324、块326、块328、块330、块332、块334、块336、块338、块340和块342。换句话说,块320是通过在y轴内对分2D几何构造来划分或者分区的。块340和块342在块的边界内可各自具有许多点。图3L中所图示的块320的划分假定块320包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。
现在参考图3M,块322被确定为具有少于或等于阈值数目的点(例如,2个点、3个点等)的许多点。例如,如果阈值数目的点是二(2),则块322在块的边界内具有两(2)个或更少的点。因此,处理移动到块234并且2D几何构造被划分成块322、块326、块328、块330、块332、块334、块336、块338、块340以及块342、块344和块346。换句话说,块324是通过在y轴内对分2D几何构造来划分或者分区的。块344和块346在块的边界内可各自具有许多点。图3M中所图示的块324的划分假定块324包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。尽管块326-330未被图示为被进一步划分,然而除非块326-330是空的或者包括少于或等于阈值数目的点,否则块326-330将随着递归算法继续而被进一步划分。换句话说,如应用于块326-330的递归算法的进一步描述将重复上述实施方式并且为了简洁起见不再进行描述。
图4A-4F图示根据至少一个示例实施例的二维(2D)几何构造的另一递归k-D树表示。能将关于图4A-4F所描述的示例实施例实现为深度优先递归(例如,如关于图2A-2K所描述的)或广度优先递归(例如,如关于图3A-3M所描述的)。另外,在此示例实施方式中不是首先沿着x轴然后沿着y轴划分或者分区,而是划分的轴被选择为最佳地对2D几何构造进行分区。
可基于点(或点的数目)差异最佳地对2D几何构造进行分区。在示例实施方式中,如果要在x轴内划分分区则确定两个块中的每一个中的点的数目,而如果要在y轴内划分分区则确定两个块中的每一个中的点的数目,并且针对几何构造的每个轴依此类推。然后,针对x轴确定两个块中的每一个中的点的数目之间的差并且针对y轴确定两个块中的每一个中的点的数目之间的差,并且针对几何构造的每个轴依此类推。具有最大点差异的轴然后被选择为要划分的轴。注意的是,在步骤S120和S125中生成并存储偏差值。在此实施方式中可以存储点数目而不是偏差值和/或生成并存储偏差值。另外,生成的块可包括存储对应数目针对的点,只要相关联的解码器选择相同的块即可。换句话说,编码器和解码器使用相同的(例如,左部、右部、顶部、底部等)块。
图4A将2D几何构造图示为具有x轴和y轴的块402。块402包括具有许多圆点(dot)的点云405。点云405中的每个圆点可表示至少一个点。例如每个圆点能表示100个点。因此,出于说明性目的,点云405中的点的数目可能是16x100或1600。
尽管块402被图示为二维的,然而示例实施例不限于此。替代地,块402和所对应的点云可能是三维的、四维的、五维的、六维的等。换句话说,所对应的点云可能是并且所对应的几何构造可能是二维或更多维形状。例如,能使用三维激光扫描来生成块402和所对应的点云405。因此,块402和所对应的点云405能包括x轴、y轴和z轴(表示深度)。另外,激光扫描可能是彩色激光扫描。因此,在块402中还可以存在各自具有对应轴的RGB表示,并且所对应的点云405可能是总计六个轴或六个维度。因此,尽管为了简洁起见以下描述是二维几何构造的,然而应理解的是,附加维度在本公开的范围内。
块402可包含具有许多点的点云405。另外,可量化这些点,使得这些点通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目。因此,x轴可具有2b个唯一值并且y轴可具有2b个唯一值。点云能包括任何数目的点。点的数目可以是相对大的数目(例如,数百万、数千万等)。
使用上面关于图2A-2K所描述的或者如上面关于图3A-3M所描述的技术,现在参考图4B,将通过在x轴内对分2D几何构造来对2D几何构造进行划分或者分区。这将导致将块402划分成分区或块(在下文中块)404和块406。如图4B中所示,块404和块406在块的边界内各自具有许多点。
然而,根据此示例实施例,块402是基于与图4C中所示的块408和块410相比较如图4B中所示的块404和块406之间的点(或点的数目)差异来分区的。在此示例中,块404具有400个点并且块406具有1200个点。因此,块404与块406之间的点差异是800。在此示例中,块408具有零(0)个点并且块410具有1600个点。因此,块408与块410之间的点差异是1600。因此,根据此示例实施方式,将通过像图4C中所图示的那样在y轴内对分2D几何构造来对2D几何构造进行划分或者分区。
图4C中所图示的块402的划分假定块402在此示例1600个点中包括高于阈值数目的点(例如,2个点、3个点等)的一定数目的点。另外,因为块408是空的或者具有少于阈值数目的点,所以将不进一步划分块408(如在上面描述的图2A-2K和图3A-3M中一样)。
在示例实施方式中,使用k-D树算法的递归划分对2D构造进行划分,移动以沿着下一个轴划分(例如,从y轴切换到x轴)。然而,不是仅仅在下一个轴(例如,x轴)内对分2D几何构造,而是使用当前技术来做出关于如果划分x轴则生成的块之间的点差异与如果划分y轴则生成的块之间的点差异相比较是否导致该轴被再次切换(从x轴到y轴)的确定。
现在参考图4D,2D几何构造被划分成块408、块412和块414。换句话说,块410是通过在y轴内对分2D几何构造来划分或者分区的。如所图示的块412与块414之间的点差异是1600(如与如果划分x轴则为800相比较)。因此,图4D中的划分是在y轴内。另外,因为块412是空的或者具有少于阈值数目的点,所以将不进一步划分块412。
再次,不是仅仅在下一个轴(例如,x轴)内对分2D几何构造,而是使用当前技术来做出关于如果划分x轴则生成的块之间的点差异与如果划分y轴则生成的块之间的点差异相比较是否导致该轴被再次切换(从x轴到y轴)的确定。
现在参考图4E,2D几何构造被划分成块408、块412、块416和块418。换句话说,块414是通过在x轴内把2D几何构造或块414对分来划分或者分区的。块416和块418在块的边界内可各自具有许多点。每个块中的点的数目可基于点沿着x轴的位置而变化。如所图示的块416与块418之间的点差异是800(如与如果划分y轴则为零(0)相比较)。因此,图4E中的划分是在x轴内。
再次,不是仅仅在下一个轴(例如,y轴)内对分2D几何构造,而是使用当前技术来做出关于如果划分x轴则生成的块之间的点差异与如果划分y轴则生成的块之间的点差异相比较是否导致该轴被再次切换(从y轴到x轴)的确定。
现在参考图4F,2D几何构造被划分成块408、块412、块418、块420和块422。换句话说,块416是通过在x轴内把2D几何构造或块416对分来划分或者分区的。每个块中的点的数目可以基于点沿着x轴的位置而变化。如所图示的块420与块422之间的点差异是400(如与如果划分y轴则为零(0)相比较)。因此,图4F中的划分是在x轴内。另外,因为块420是空的或者具有少于阈值数目的点,所以将不进一步划分块420。
使用深度优先递归(例如,如关于图2A-2K所描述的)或广度优先递归(例如,如关于图3A-3M所描述的)进一步递归迭代并且优化对要划分的轴或分区块418和块422的选择将像关于图4A-4F所描述的那样继续。然而,为了简洁起见省略进一步描述。
关于图2A-2K、图3A-3M和图4A-4F所描述的示例实施例实现用于划分包括点云的几何结构的三种机制。然而,示例实施例不限于此,只要编码器和解码器利用同一机制来对几何结构和/或点云进行分区和重构即可。
图5A图示根据至少一个示例实施例的上面关于图2A-2K所描述的k-D树的节点表示。生成节点遵循与关于图2A-2K所描述的相同的过程并且因此将不再进行描述。另外,图5A中的节点被示出为具有与来自图2A-2K的块相同的标签。分支节点(例如,节点或块218)被图示为实心的,而叶节点(例如,节点或块222)被示出为散列的。如果块206、208和214包括大于阈值数目的点,则节点206、208和214可以包括到子节点的边,因为块206、208和214将随着递归算法像关于图2A-2K所描述的那样继续而被进一步划分。
图5B图示根据至少一个示例实施例的上面关于图3A-3M所描述的k-D树的节点表示。生成节点遵循与关于图3A-3M所描述的相同的过程并且因此将不再进行描述。另外,图5B中的节点被示出为具有与来自图3A-3M的块相同的标签。分支节点被图示为实心的,而叶节点被示出为散列的。如果块326、328和330包括大于阈值数目的点,则节点326、328和330可以包括到子节点的边,因为块326、328和330将随着递归算法像关于图3A-3M所描述的那样继续而被进一步划分。
图5C图示根据至少一个示例实施例的上面关于图4A-4F所描述的k-D树的节点表示。生成节点遵循与关于图4A-4F所描述的相同的过程并且因此将不再进行描述。另外,图5C中的节点被示出为具有与来自图4A-4F的块相同的标签。分支节点被图示为实心的,而叶节点被示出为散列的。如果块418和422包括大于阈值数目的点(如图4F中所图示的),则节点418和422可以包括到子节点的边,因为块418和422将随着递归算法像关于图4A-4F所描述的那样继续而被进一步划分。
图6A-6C图示根据至少一个示例实施例的缓冲器。图6A中所图示的缓冲器被配置成存储与包括大于阈值数目的点的许多点的块中的点的数目(例如,作为长度log2(N)的整数,其中N是父块中的点的数目)相对应的偏差值。图6B中所图示的缓冲器被配置成存储与包括少于或等于阈值数目的点的许多点的叶节点或块有关的数据。该数据表示用于确定点的位置(例如,块或叶节点中的点的坐标)的未知或剩余比特。图6C中所图示的缓冲器被配置成存储指示划分的轴的数据。在使用关于图2A-2K和/或图3A-3M所描述的技术而不是关于图4A-4F所描述的技术的实施方式中,图6C中所图示的缓冲器可以不是需要的并且可能是可选的或者被用作设计或执行选项。例如,包括图6C中所图示的缓冲器能触发解码器(例如,解码器1005)使用关于图4A-4F所描述的技术。
图6A中所图示的缓冲器可存储与点的数目相对应的偏差值或可用于确定点的数目的值。在示例实施方式中,NP-202和NP-204可以是用于确定点的数目的值。NP-202和NP-204可以是偏差值(例如,来自预测值或参考值)。预测值或参考值可基于父块中的点的数目。例如,块202是用于块204的父块。如果块202具有N个点,则用于块204的预测值或参考值是N/2,而如果块204中的点的数目是p,则存储为NP204的偏差值是N/2-p。存储在缓冲器中的每个值的大小(例如,用于存储的存储器或用于存储的比特数)可基于能被存储在缓冲器中的最大值。换句话说,用于存储偏差值的存储器的量可基于父块中的点的数目,因为子块中的最大点的数目可以不多于父块中的点的数目。
图6B中所图示的缓冲器可存储基于与k-D树中的叶节点相关联的块边界表示点的坐标的数字。该数字可以是表示k-D树中的叶节点中的点的坐标的剩余或未知(例如,基于k-D树算法不可确定的)比特。例如,随着k-D树被递归地分区时,可基于该算法确定与分区(沿着x或y轴)的下拐角相对应的比特串。换句话说,可在关于图2A-2K、图3A-3M和/或图4A-4F所描述的2D几何构造中基于关于对应图所使用的k-D树算法确定表示块的左下拐角的x坐标的比特值。然后,块中的点的x坐标是大于块的左下拐角的x坐标的某个值p。可从表示p的比特中剥离表示块的左下拐角的x坐标的比特。结果然后被存储在图6B中所图示的缓冲器中。
例如,沿着x轴块226具有下界0以及作为块218的中点(mp)的上界。因此,块226中的点p可在界0上具有直到且不包括表示块218的中点(mp)的值的值。在示例实施方式中,块中的点的坐标的前L个比特对应于块的左下拐角的坐标的前L个比特,其中L是算法已细分对应轴的次数。因此,为了对点的坐标进行编码,该坐标的剩余b-L个比特被编码,因为前导L个比特是从块的左下拐角获知的。因此,解码器可通过从对应块(例如,点所在的块)的左下拐角的较低对应坐标中取前L个比特并且使用来自缓冲器(例如,图6B中所图示的缓冲器)的剩余b-L个比特来确定点的坐标以计算出该点的坐标。在示例实施方式中,图6B中所图示的缓冲器可存储表示剩余b-L个比特的比特(二进制、十六进制等)。
图6C中所图示的缓冲器可存储对应于或者指示要划分的轴的值。在示例实施方式中,A1、A2、A3、A4、A5和A6可以是(例如,由解码器)使用来指示轴切换的值。用于对几何构造进行分区的算法(例如,k-D树算法)可以以可确定的次序选择要分区的下一个轴。例如,在3D实施方式中,k-D树算法可以以x轴、y轴、z轴次序选择轴。换句话说,如果在y轴内划分最后迭代,则解码器选择z轴作为要在内部划分的下一个轴。然而,关于图4A-4F所描述的技术可能已划分了不同的轴。因此,解码器可使用存储在图6C中所图示的缓冲器中的值(例如,A1)来选择不同的轴。
在示例实施方式中,值0指示所选择的轴(例如,x轴、y轴、z轴次序中的下一个轴)确实未改变,值1指示所选择的轴应该切换到下一个轴(例如,从x轴到y轴),并且值2指示所选择的轴应该切换到下下一个轴(例如,从x轴到z轴)。因此,4D点云能使用0、1、2,5D点云能使用0、1、2、3,并且依此类推。在示例实施方式中,图6C中所图示的缓冲器可将表示轴选择的比特(二进制、十六进制等)存储为轴切换次数。
图7图示根据至少一个示例实施例的用于对数据进行解码的方法。如图7中所示,在步骤S705中接收编码几何数据文件。数据文件可以包括使用前述技术编码的数据。数据文件可以包括两种类型的编码数据。例如,数据文件可以包括表示表示点云的几何构造的部分、区域或块中的点的数目的数据,并且数据文件可以包括表示表示点云的几何构造的部分、区域或块点中的点的位置(例如,坐标)的数据。
在步骤S710中使用来自编码几何数据文件的数据来加载第一缓冲器和第二缓冲器。例如,第一缓冲器可包括表示表示点云的几何构造的部分、区域或块中的点的数目的数据。另外,第二缓冲器可包括表示表示点云的几何构造的部分、区域或块中的点的位置(例如,坐标)的数据。
在步骤S715中对第一缓冲器进行熵解码。例如,可使用逆霍夫曼或逆算术编解码器来对第一缓冲器中的每个值进行解码。得到的解码值可以是增量值或偏差值。因此,对第一缓冲器进行解码还可包括转换增量值或偏差值。经转换的值可表示表示点云的几何构造的部分、区域或块中的点的数目。转换增量值或偏差值可包括确定(由对应的编码器用来计算对应的增量值或偏差值)使用的参考值并且使用该参考值来确定或者计算重构值。如上所述参考值是N/2。
在步骤S720中将第一缓冲器中的第一条目插入到几何构造中。例如,几何构造可以是在下面关于图2A-2K、图3A-3M和/或图4A-4F所描述的2D构造。换句话说,几何构造可以是通过可包括对应的点云的块202和/或块302所表示的几何构造。几何构造可能是三维的、四维的、五维的、六维的等。在示例实施方式中,来自缓冲器1020(在下面描述)的第一条目(例如,点的数目)被插入到几何构造中。第一条目可以是表示点云中的点的总数目的值。因此,将第一缓冲器中的第一条目放置到几何构造中可以相当于将与点云相对应的点的总数目放置到几何构造中。
在步骤S725中选择几何结构中的分区。在第一迭代中,几何构造包括与单个(或整个)分区中的点云相对应的点的总数目。在后续迭代中,选择子分区。例如,在第一迭代中,解码器可如上所述选择块202或块302。在后续迭代中,可选择块204、块304、块208、块308等。对分区或块的选择可基于k-D树算法。换句话说,对分区或块的可基于上面关于图2A-2K(例如,深度优先)和/或图3A-3M(例如,广度优先)所描述的k-D树技术。此外,解码器选择与如由编码器所使用的相同的k-D树技术。在示例实施方式中,与包括压缩数据(或其一部分)的数据分组相关联的报头可包括与由编码器使用来对点云的数据进行压缩的k-D树技术相关联的信息。
在步骤S735中确定分区是否包括多于阈值数目的点。如果分区(或块)包括多于阈值数目的点,则处理继续到步骤S740。如果分区(或块)不包括多于阈值数目的点,则处理继续到步骤S735。在示例实施方式中,阈值数目的点(例如,2个点、3个点等)可以是包括下边界(例如,图2A-2K、图3A-3M和/或图4A-4F中所示的左边界和底边界)上的点的块或分区中的点的数目。在第一次迭代中,分区是几何构造并且对于步骤S735应该产生“是”。
在步骤S735中将来自第二缓冲器的数据插入在分区中。第二缓冲器(例如,缓冲器1025和/或图6B中所图示的缓冲器)存储与叶节点或块(例如,节点或块222、节点或块322等)相关联的数据。因此,如果节点或块具有少于或等于阈值数目的点,则节点或块是叶节点或块。在示例实施方式中,第二缓冲器可存储表示剩余b-L个比特的比特(二进制、十六进制等),其中前导L个比特是从对应块的左下拐角获知的。因此,解码器可通过从对应块(例如,点所在的块)的左下拐角的较低对应坐标中取前L个比特来确定点的坐标并且使用来自第二缓冲器的剩余b-L个比特来计算出该点的坐标。
在步骤S740中划分分区。如图2A-2K、图3A-3M和/或图4A-4F中所示,根据k-D树技术所选择的分区被对分。然后,在步骤S745中将与第一缓冲器中的值相对应的数目的点插入在得到的分区中的一个中。例如,参考图2C和图2D,如果块210被选择并且具有多于阈值数目的点,则块210被划分成分区212和214并且与第一缓冲器中的值相对应的数目的点被插入到块212中。
第一缓冲器中的值可以是与点的数目相对应的偏差值或可用于确定要插入在块中的点的数目的值。偏差值可基于预测值或参考值。预测值或参考值可基于父块中的点的数目。如果父块具有N个点,则用于子块的预测值或参考值是N/2,而如果存储为第一缓冲器中的值的偏差值是N/2-p,则p(块中的点的数目)等于第一缓冲器中的值加上N/2。继续上述示例,N/2是块210中的点的数目除以2,并且插入到块212中的点的数目等于块210中的点的数目除以2加上从第一缓冲器读取的偏差值。
在步骤S750中从父分区中移除等于第一缓冲器中的值的数目的点。例如,从块210中移除等于插入在块212中的点的数目的数目的点。在步骤S755中确定所有点是否被插入。如果所有点被插入,则处理继续到步骤S760并且处理或解码结束。否则处理返回到步骤S725。
图8A和图8B图示根据至少一个示例实施例的用于选择要划分的轴的方法。如图8A中所示,在步骤S805中具有大于第一阈值数目的点的(包括点云的几何构造的)分区被选择为要划分的分区。例如,可选择图4A中所图示的块402。第一阈值数目的点可以是上面关于图2A-2K、图3A-3M所描述的阈值数目的点(例如,2个点、3个点等)。换句话说,可在像上面在图1的步骤S110中所描述的那样递归地对几何构造进行分区的同时执行选择分区作为要划分的分区,其中所选择的分区包括大于阈值数目的点(例如,2个点、3个点)等)。
在步骤S810中确定所选择的分区是否包括大于第二阈值数目的点。在确定分区包括大于第二阈值数目的点时,处理继续到步骤S815。第二阈值数目的点可以是大于第一阈值数目的点的数目的点。例如,如果第一阈值数目的点是两(2)个点,则第二阈值数目的点可以是64个点。第一阈值数目的点和第二阈值数目的点的值可以是设计选择。然而,第一阈值数目的点应该小于第二阈值数目的点。再次参考图4A中所图示的块402,点云405中的每个圆点可表示至少一个点。例如每个圆点能表示100个点。因此,点云405中的点的数目可能是1600。如果第一阈值数目的点是两(2)个点并且第二阈值数目的点可以是64个点,则块402具有大于第一阈值且大于第二阈值的点的数目。
在步骤S815中基于点(或点的数目)差异选择轴作为要划分的轴。在示例实施方式中,如果要在x轴内划分分区则确定两个块中的每一个中的点的数目,而如果要在y轴内划分分区则确定两个块中的每一个中的点的数目,并且针对几何构造的每个轴依此类推。然后,针对x轴确定两个块中的每一个中的点的数目之间的差并且针对y轴确定两个块中的每一个中的点的数目之间的差,并且针对几何构造的每个轴依此类推。具有最大点差异的轴然后被选择为要划分的轴。参考图4B中所图示的块402,如果在x轴内划分块402,则块404将包括400个点并且块406将包括1200个点(假定每个圆点表示100个点)。另外,参考图4B中所图示的块402,如果在y轴内划分块402,则块408将包括零(0)个点并且块410将包括1600个点。因此,在步骤S815中,y轴将被选择为要划分的轴。
在步骤S820中存储所选择的轴的指示。可将所选择的轴的指示存储在缓冲器中。例如,所选择的轴的指示在图6C中所示的缓冲器或缓冲器1040。指示可以是指示要切换的轴的值。例如值0可指示默认轴,值1可以是按次序切换到下一个轴(例如,从x轴到y轴)等。
返回到步骤S810,在确定分区包括少于或等于第二阈值数目的点时,处理继续到步骤S825。在步骤S825中下一个轴(例如,以定义或算法次序)被选择为要划分的轴。例如,如果被划分的前一个轴是x轴,则下一个轴可能是y轴,如果被划分的前一个轴是y轴,则下一个轴可能是x轴(在2D几何构造中)或者下一个轴可能是z轴(在3D几何构造中)等。然后,在步骤S830中确定下一个轴是否可被划分。在确定可划分下一个轴时,处理继续到步骤S840。如上面所讨论的,几何构造的每个轴可具有b比特长整数表示。因此,点云可通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目(精度=(1/2)b)。因此,在示例实施方式中,如果表示该轴的对应分区中的点的比特数是两(2)或更多个比特,则可划分下一个轴。
返回到步骤S830,在确定不可划分下一个轴时,处理继续到步骤S835。在步骤S835中另一轴被选择为要划分的轴。例如,如果下一个轴被选择为x轴,则能将y轴(例如,以定义或算法次序顺序地下一个)选择为要划分的轴。
在步骤S840中在所选择的要划分的轴内划分分区。继续该示例,在y轴内划分块402,这生成块408和410。上面关于图8A所描述的步骤能在图1的步骤S110内作为关于图1所描述的用于对数据进行编码的方法的进一步细化被实现。该方法被实现在编码器(例如,编码器905)中。另外,每当选择新块或分区以在像上面在图1的步骤S110中所描述的那样递归地对几何构造进行分区的过程内划分时,可重复图8A的步骤。
如图8B中所示,在步骤S850中具有大于第一阈值数目的点的分区(包括点云的几何构造的)被选择为要划分的分区。例如,可选择图4A中所图示的块402。第一阈值数目的点可以是上面关于图2A-2K、图3A-3M所描述的阈值数目的点(例如,2个点、3个点等)。换句话说,选择分区作为要划分的分区可作为步骤S740内的例程被执行,其中所选择的分区包括大于如在步骤S730中所确定的阈值数目的点(例如,2个点、3个点等)。
在步骤S855中确定所选择的分区是否包括大于第二阈值数目的点。在确定分区包括大于第二阈值数目的点时,处理继续到步骤S860。第二阈值数目的点可以是大于第一阈值数目的点的数目的点。例如,如果第一阈值数目的点是两(2)个点,则第二阈值数目的点可以是64个点。第一阈值数目的点和第二阈值数目的点的值可以是设计选择。然而,第一阈值数目的点应该小于第二阈值数目的点。再次参考图4A中所图示的块402,点云405中的每个圆点可表示至少一个点。例如每个圆点能表示100个点。因此,点云405中的点的数目可能是1600。如果第一阈值数目的点是两(2)个点并且第二阈值数目的点可以是64点,则块402具有大于第一阈值且大于第二阈值的点的数目。
在步骤S860中例如可读取缓冲器(例如,如图6C中所示或缓冲器1040)。在步骤S865中基于缓冲器值选择要划分的轴。继续上述示例,缓冲器值指示轴将被从所选择的轴(例如,以定义或算法次序)切换。例如,如果被划分的前一个轴是x轴,则下一个轴可能是y轴,如果被划分的前一个轴是y轴,则下一个轴可能是x轴(在2D几何构造中)或者下一个轴可能是z轴(在3D几何构造中)等。如图4C中所示,这导致将y轴选择为要划分的轴。
返回到步骤S855,在确定分区包括少于或等于第二阈值数目的点时,处理继续到步骤S870。在步骤S870中下一个轴(例如,以定义或算法次序)被选择为要划分的轴。例如,如果被划分的前一个轴是x轴,则下一个轴可能是y轴,如果被划分的前一个轴是y轴,则下一个轴可能是x轴(在2D几何构造中)或者下一个轴可能是z轴(在3D几何构造中)等。然后,在步骤S875中确定下一个轴是否可被划分。在确定可划分下一个轴时,处理继续到步骤S885。如上面所讨论的,几何构造的每个轴可具有b比特长整数表示。因此,点云能通过具有至多b个比特的正整数来表示,其中b是期望量化比特的数目(精度=(1/2)b)。因此,在示例实施方式中,如果表示该轴的对应分区中的点的比特数是两(2)或更多个比特,则可划分下一个轴。
返回到步骤S875,在确定不能划分下一个轴时,处理继续到步骤S880。在步骤S880中另一轴被选择为要划分的轴。例如,如果下一个轴被选择为x轴,则能将y轴(例如,以定义或算法次序顺序地下一个)选择为要划分的轴。
在步骤S885中在所选择的要划分的轴内划分分区。继续该示例,在y轴内划分块402,这生成块408和410。上面关于图8B所描述的步骤能在图7的步骤S740中作为关于图7所描述的用于对数据进行解码的方法的进一步细化被实现。该方法被实现在解码器(例如,解码器1005)中。另外,每当新块或分区被选择要划分时,可重复图8B的步骤。
图9图示根据至少一个示例实施例的编码器。如图9中所示,编码器905包括量化模块915、k-D树模块920、偏差模块950、缓冲器925、缓冲器930、缓冲器955、熵编码器935和文件构建模块940。编码器905接收输入几何数据910并且输出压缩比特945(或简称为压缩比特的文件)。图9中的虚线图示数据流。输入几何数据910可以是实时数据流(例如,激光扫描数据、视频会议或视频聊天)。例如,可以先前记录或者保存输入几何数据910(例如,电影或录像机记录)。
量化模块915被配置成将一系列值(例如,浮点或双精度型)映射或者转换为单个量子值。在示例实施例中,量化可将与点云相关联的浮点数转换成b比特长整数表示。因此,在2D点云中,x轴可具有2b个唯一值并且y轴可具有2b个唯一值。在3D点云中,x轴可具有2b个唯一值,y轴可具有2b个唯一值并且z轴可具有2b个唯一值。在示例实施方式中,b可以是任何整数(例如,基于解码质量)。例如,b可以是16个比特从而产生65k个唯一值。在示例实施方式中,输入(例如,几何数据910)是b比特长整数。因此,量化可以是冗余的并且结果不是必需的。因此,由量化模块所执行的处理可被跳过或者是可选的。
k-D树模块920被配置成生成指示表示点云的几何构造的部分、区域或块中的点的数目的值(例如,整数)。k-D树模块920还被配置成生成指示表示点云的几何构造的部分、区域或块中的点的位置(例如,坐标)的值(例如,整数)。k-D树模块920被配置成从表示点云的几何构造递归地生成至少一个部分、区域或块。例如,k-D树模块920可实现用于像上面关于图2A-2K、图3A-3M和/或图4A-4F所描述的那样对包括点云的几何构造进行分区的技术。
k-D树模块920可被配置成针对指示表示点云的几何构造的部分、区域或块中的点的数目的值中的每一个生成增量值或偏差值。k-D树模块920可被配置成针对指示表示点云的几何构造的部分、区域或块中的点的位置(例如,坐标)的值中的每一个生成增量值或偏差值。在示例实施方式中,k-D树模块920可确定表示点云的几何构造的部分、区域或块中的最小坐标。可基于最小坐标确定或者计算增量值或偏差值。换句话说,最小值可以是t并且值可以是i,使得可将增量值或偏差值计算为i-t。可针对每个轴(例如,x和y、x、y和z等)来确定或者计算增量值或偏差值。因此,最小值可以是包括该点的几何构造的部分、区域或块的拐角。在示例实施方式中,可通过去除最小坐标和增量值或偏差值的b比特长整数表示中的前导零来减小最小坐标和增量值或偏差值的大小。
k-D树模块920可以被配置成生成对应于或者指示要划分的轴的值。在示例实施方式中,该值可指示由k-D树模块920所使用的算法(例如,关于图4A-4F所描述的技术)使轴划分偏离定义轴次序。例如,在3D实施方式中,k-D树算法可以以x轴、y轴、z轴次序选择轴。换句话说,如果在y轴内划分最后迭代,则由k-D树模块920所使用的算法选择z轴作为要在内部划分的下一个轴。然而,关于图4A-4F所描述的技术可能已划分不同的轴。
在示例实施方式中,k-D树模块920生成指示所选择的轴(例如,x轴、y轴、z轴次序中的下一个轴)确实未改变的值0,k-D树模块920生成指示所选择的轴应该切换到下一轴(例如,从x轴到y轴)的值1,并且k-D树模块920生成指示所选择的轴应该切换到下下一个轴(例如,从x轴到z轴(跳过y轴))的值2。因此,4D点云能使用0、1、2,5D点云能使用0、1、2、3等。在示例实施方式中,值被传送到缓冲器955并存储在缓冲器955中。
缓冲器925被配置成存储多个值(例如,整数),每个值指示表示点云的几何构造的部分、区域或块中的点的数目。缓冲器925被配置成将多个值(例如,整数)存储为要熵编码的偏差值。缓冲器930被配置成存储多个值(例如,整数),每个值指示表示点云的几何构造的部分、区域或块中的点的位置(例如,坐标)。
缓冲器955可被配置成存储对应于或者指示要划分的轴的值。可从k-D树模块920接收该值。在示例实施方式中,该值可指示由k-D树模块920所使用的算法使轴划分(例如,上述的分区的生成)偏离定义轴次序。尽管未示出,然而可对缓冲器955进行熵编码。因此,能将缓冲器955的输出输入到熵编码器935中。在使用关于图2A-2K和/或图3A-3M所描述的技术而不是关于图4A-4F所描述的技术的实施方式中,缓冲器955可以不是需要的并且可能是可选的或者被用作设计或执行选项。
熵编码器935被配置成对指示表示点云的几何构造的部分、区域或块中的点的数目的多个值进行熵编码。熵编码器935可被配置成针对指示表示点云的几何构造的部分、区域或块中的点的数目的值中的每一个生成增量值或偏差值。针对值x(其中x是块中的点的数目或者与k-D树中的节点相关联)的增量值或偏差值可以是x-m/2,其中m/2是父块或另一块(例如,与值x相关联的块是其分区的块)的点的数目的一半。然后可对增量值或偏差值进行熵编码。可使用诸如霍夫曼编译或算术编译的编解码器来对增量值或偏差值进行编码。
文件构建模块940被配置成基于多个熵编码值生成文件,所述多个值(例如,整数)每个指示点的位置(例如,坐标)和/或多个值对应于或者指示要划分的轴。所生成的文件可以包括报头或其它元数据,包括关于点云的信息、编码方案(例如,与量化模块915相关联的变量和/或与熵编码器935相关联的变量)、k-D树等。所生成的文件可以被存储在本地存储器中和/或传送到另一设备(例如,与对点云数据进行编码的设备分离并通信地耦合到该设备的设备)。
偏差模块950被配置成基于分区中的点的数目生成或者计算偏差值。例如,可将参考值确定为几何构造的分区(例如,父分区或块)中的点的数目(N)除以二(N/2)。在示例实施方式中,参考值可以是块被划分成两个部分(例如,两个块)或者对分的父块或节点的点的数目除以二(N/2)。例如,参考图2C和图2D,块210被划分或者对分(例如,往中间向下分割)以生成块212和214。用于块212和块214的参考值可以是块210中的点的数目除以二(2)。在示例实施方式中,偏差模块950可能是包括在k-D树模块920中的模块。
然后可基于参考值(N/2)和数据确定偏差值。例如,用于值p(其中p是块中的点的数目或者与k-D树中的节点相关联)的偏差值可以是p-N/2,其中N/2是参考值(例如,父块中的点的数目除以2)。继续上述示例,用于块212的偏差值可以是NP-212—(NP-210/2)。偏差值应该小于实际值p(例如,在b比特整数中具有更多的前导零)。
图10图示根据至少一个示例实施例的解码器。如图10中所示,解码器1005包括文件解构模块1010、熵解码器1015、缓冲器1020、缓冲器1025、缓冲器1040、几何构造模块1030和去量化模块1035。解码器1005接收作为压缩比特945(或简称为压缩比特的文件)并且输出几何数据。图10中的虚线图示数据流。几何数据910可以对应于重构数据流(例如,激光扫描数据、视频会议或视频聊天)。
文件解构模块1010可被配置成接收包括表示与点云相对应的数据的流的编码或压缩比特的文件。先前已使用包括点云的几何构造的递归分区对编码或压缩比特进行了编码。文件解构模块1010可被配置成确定至少两个编码数据流。第一数据流对应于多个值(例如,整数),每个值指示几何构造的部分、区域或块中的点的数目。第二数据流对应于多个值(例如,整数),每个值指示表示点云的几何构造的部分、区域或块中的点的位置(例如,坐标)。第三数据流包括对应于或者指示要划分的轴的值。
熵解码器1015可被配置成对第一数据流进行熵解码。例如,可使用逆霍夫曼或逆算术编解码器来对第一缓冲器中的每个值进行解码。得到的解码值可以是增量值或偏差值。因此,如上面所讨论的,对第一缓冲器进行解码还可包括转换增量值或偏差值。熵解码器1015可被配置成执行熵编码器935的反向功能。
缓冲器1020可被配置成存储多个重构值(例如,多个整数),每个值指示几何构造的部分、区域或块中的点的数目。缓冲器1025可被配置成存储多个值(例如,多个整数),每个值指示几何构造的部分、区域或块中的点的位置(例如,坐标)。在示例实施方式中,基于导致块的细分来确定在包括少于或等于块的左下拐角的阈值数目的点的块中的每个点。然后,使用左下拐角作为参考点并且添加存储在第二缓冲器中的整数。注意的是,这些值的长度不是b或log(N)。替代地长度是b-L,其中L是相对于对应轴在k-D树中遍历的级别的数目。换句话说,如果块已沿着x轴被分割L次,则块的左下拐角的x坐标是该点的x坐标的前L个比特并且剩余b-L个比特被从第二缓冲器读取。
缓冲器1040可被配置成存储对应于或者指示要划分的轴的值。在示例实施方式中,该值可指示由k-D树模块920所使用的算法使轴划分(例如,上述的分区的生成)偏离定义轴次序。例如,在3D实施方式中,(例如,如由编码器905和解码器1005所使用的)k-D树算法可以以x轴、y轴、z轴次序选择轴。换句话说,如果在y轴内划分最后迭代,则解码器1005选择z轴作为要在内部划分的下一个轴。然而,使用关于图4A-4F所描述的技术可能已划分不同的轴。因此,解码器1005(例如,几何构造模块1030)可读取存储在缓冲器1040中的值并且基于从缓冲器1040读取的值选择不同的轴。
如上面所讨论的,能对缓冲器955进行熵编码。因此,尽管未示出,可对缓冲器1040进行熵解码。因此,能将缓冲器1040的输出输入到熵解码器1015中。在使用关于图2A-2K和/或图3A-3M所描述的技术而不是关于图4A-4F所描述的技术的实施方式中,缓冲器1040可以不是需要的并且可能是可选的或者被用作设计或执行选项。例如,缓冲器1040的包括能触发解码器1005(例如,经由几何构造模块1030)以使用关于图4A-4F所描述的技术。
几何构造模块1030可被配置成重构几何构造和相关联的点云。参考图5A-5C,几何构造模块1030可基于缓冲器1025的内容确定哪些节点是叶节点(例如,节点224、节点226、节点334、节点336等)。几何构造模块1030然后可基于存储在缓冲器1025中的多个值在几何构造的对应部分、区域或块中插入点。所述多个值可以是增量值或偏差值和/或可能已在没有前导零的情况下被传送。因此,如上面所讨论的,几何构造模块1030可进一步转换增量值或偏差值以及添加前导零。
几何构造模块1030可使用缓冲器1020、缓冲器1025和/或缓冲器1040的内容以及基于关于图2A-2K、图3A-3M和/或图4A-4F所描述的技术(例如,基于由编码器905中的k-D树模块920所使用的相同技术)的k-D树算法来生成要在其中插入点的几何构造的的部分或块。包括缓冲器1040中的数据或缓冲器1040可以触发几何构造模块1030以在重构几何构造时使用上面关于图4A-4F所描述的技术。
去量化模块1035可被配置成将单个量子值(整数值)映射或转换为一系列值(例如,浮点或双精度型)。在示例实施例中,去量化可将b比特长整数表示转换为重构浮点数作为重构点云。在示例实施方式中,输入(例如,几何数据910)是b比特长整数。因此,量化可能是冗余的并且结果不是必需的。因此,由量化模块所执行的处理可被跳过或者是可选的。
图11图示根据至少一个示例实施例的编码器系统。在图11的示例中,编码器系统1100可以是至少一个计算设备并且应该被理解成实际上表示被配置成执行本文中描述的方法的任何计算设备。因此,编码器系统1100可以被理解成包括可以被利用来实现本文中描述的技术的各种标准组件或其不同或将来的版本。作为示例,编码器系统1100被图示为包括至少一个处理器1105以及至少一个存储器1110(例如,计算机可读存储介质)。
因此,如可以领会的,可以利用至少一个处理器1105来执行存储在至少一个存储器1110上的指令,以便从而实现本文中描述的各种特征和功能,或附加或替代特征和功能。当然,可以出于各种其它目的利用至少一个处理器1105和至少一个存储器1110。特别地,至少一个存储器1110可以被理解成表示可能用于实现本文中描述的模块中的任何一个的各种类型的存储器及相关硬件和软件的示例。
图11图示根据至少一个示例实施例的编码器系统1100。如图11中所示,编码器系统1100包括至少一个处理器1105、至少一个存储器1110、控制器1120和编码器905。至少一个处理器1105、至少一个存储器1110、控制器1120和编码器905经由总线1115通信地耦合。
至少一个处理器1105可以被配置成执行与控制器1120和/或编码器905相关联的计算机指令。至少一个处理器1105可以是共享资源。例如,编码器系统1100可以是较大系统(例如,2D或3D扫描器)的元件。因此,至少一个处理器1105可以被配置成执行与较大系统内的其它元件(例如,控制器激光扫描器位置或移动)相关联的计算机指令。
至少一个存储器1110可以被配置成存储与编码器系统1100相关联的数据和/或信息。例如,至少一个存储器1110可以被配置成存储缓冲器,包括例如存储几何数据、几何数据的部分、几何数据中的数据点的位置、与几何数据的部分相关联的数据点的数目和/或类似物的缓冲器。例如,至少一个存储器1110可以被配置成存储包括例如与已使用k-D树来生成的几何构造相关联的数据的缓冲器。
控制器1120可以被配置成生成各种控制信号并且将这些控制信号传送到编码器系统1100中的各个块。控制器1120可以被配置成依照上述的方法来生成控制信号。控制器1120可以被配置成根据如上所述的示例实施例来控制编码器905以使用k-D树来对与几何构造相关联的数据进行编码。例如,控制器1120可以生成并传送指示用于量化模块915中的量化方案的比特数的控制信号。例如,控制器1120可以生成并传送指示由熵编码器935所使用的熵编码方案(例如,霍夫曼编译、算术编译、折叠整数编译等)的控制信号。例如,控制器1120可以生成并传送用于将存储器分配给缓冲器925、930、955的控制信号。
图12图示根据至少一个示例实施例的解码器系统。在图12的示例中,解码器系统1200可以是至少一个计算设备并且应该被理解成实际上表示被配置成执行本文中描述的方法的任何计算设备。因此,解码器系统1200可以被理解成包括可以被利用来实现本文中描述的技术的各种标准组件或其不同或将来的版本。作为示例,解码器系统1200被图示为包括至少一个处理器1205以及至少一个存储器1210(例如,计算机可读存储介质)。
因此,可以利用至少一个处理器1205来执行存储在至少一个存储器1210上的指令,以便从而实现本文中描述的各种特征和功能,或附加或替代特征和功能。当然,可以出于各种其它目的利用至少一个处理器1205和至少一个存储器1210。特别地,至少一个存储器1210可以被理解成表示可能用于实现本文中描述的模块中的任何一个的各种类型的存储器及相关硬件和软件的示例。根据示例实施例,编码器系统1100和视频解码器系统1200可以被包括在同一个较大系统中。另外,至少一个处理器1205和至少一个处理器1105可以是同一个至少一个处理器并且至少一个存储器1210和至少一个存储器1110可以是同一个至少一个存储器。再另外,控制器1220和控制器1120可以是同一个控制器。
至少一个处理器1205可以被配置成执行与控制器1220和/或解码器1005相关联的计算机指令。至少一个处理器1205可以是共享资源。例如,解码器系统1000可以是较大系统(例如,移动设备)的元件。因此,至少一个处理器1205可以被配置成执行与较大系统内的其它元件(例如,web浏览或无线通信)相关联的计算机指令。
至少一个存储器1210可以被配置成存储与解码器系统1200相关联的数据和/或信息。例如,至少一个存储器1210可以被配置成存储缓冲器,包括例如存储几何数据、几何数据的部分、几何数据中的数据点的位置、与几何数据的部分相关联的数据点的数目和/或类似物的缓冲器。例如,至少一个存储器1210可以被配置成存储缓冲器,包括例如与已使用k-D树来生成的几何构造相关联的数据。
控制器1220可以被配置成生成各种控制信号并且将这些控制信号传送到解码器系统1200中的各个块。控制器1220可以被配置成依照上述的方法来生成控制信号。控制器1220可以被配置成根据如上所述的示例实施例来控制解码器1005以使用k-D树来对与几何构造相关联的数据进行解码。例如,控制器1220可以生成并传送指示用于去量化模块1035中的量化方案的比特数的控制信号。例如,控制器1220可以生成并传送指示由熵解码器1015所使用的熵编码方案(例如,霍夫曼编译、算术编译等)的控制信号。例如,控制器1220可以生成并传送用于将存储器分配给缓冲器1020、1025、1040的控制信号。
图13示出可以与这里描述的技术一起使用的计算机设备1300和移动计算机设备1350的示例。计算设备1300旨在表示各种形式的数字计算机,诸如膝上型电脑、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机和其它适当的计算机。计算设备1350旨在表示各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话和其它类似的计算设备。这里示出的组件、其连接和关系及其功能仅仅意在为示例性的,而不意在限制本文档中描述和/或要求保护的发明的实施方式。
计算设备1300包括处理器1302、存储器1304、存储设备1306、连接到存储器1304和高速扩展端口1310的高速接口1308以及连接到低速总线1314和存储设备1306的低速接口1312。组件1302、1304、1306、1308、1310和1312中的每一个均使用各种总线来互连,并且可以被酌情安装在公共主板上或者以其它方式安装。处理器1302可处理在计算设备1300内执行的指令,包括存储在存储器1304中或者在存储设备1306上以在外部输入/输出设备(诸如耦合到高速接口1308的显示器1316)上显示用于GUI的图形信息的指令。在其它实施方式中,可以酌情使用多个处理器和/或多个总线以及多个存储器和多种类型的存储器。另外,可以连接多个计算设备1300,其中每个设备提供必要操作的部分(例如,作为服务器组、一组刀片服务器或多处理器系统)。
存储器1304存储计算设备1300内的信息。在一个实施方式中,存储器1304是一个或多个易失性存储器单元。在另一实施方式中,存储器1304是一个或多个非易失性存储器单元。存储器1304还可以是另一形式的计算机可读介质,诸如磁盘或光盘。
存储设备1306能够为计算设备1300提供大容量存储。在一个实施方式中,存储设备1306可以是或者包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备或磁带设备、闪速存储器或其它类似的固态存储设备或设备的阵列,包括存储区域网络或其它配置中的设备。计算机程序产品可被有形地具体实现在信息载体中。计算机程序产品还可以包含指令,所述指令当被执行时,执行一种或多种方法,诸如上面描述的那些方法。信息载体是计算机或机器可读介质,诸如存储器1304、存储设备1306或处理器1302上的存储器。
高速控制器1308管理用于计算设备1300的带宽密集操作,而低速控制器1312管理较低带宽密集操作。功能的这种分配仅是示例性的。在一个实施方式中,高速控制器1308耦合到存储器1304、显示器1316(例如,通过图形处理器或加速器),并且耦合到高速扩展端口1310,所述高速扩展端口1310可以接受各种扩展卡(未示出)。在该实施方式中,低速控制器1312耦合到存储设备1306和低速扩展端口1314。可以包括各种通信端口(例如,USB、蓝牙、以太网、无线以太网)的低速扩展端口例如通过网络适配器耦合到一个或多个输入/输出设备,诸如键盘、指点设备、扫描器或诸如交换机或路由器的联网设备。
如图中所示,可以以许多不同的形式实现计算设备1300。例如,它可以作为标准服务器1320被实现,或者在一组此类服务器中实现多次。它还可以作为机架服务器系统1324的一部分被实现。此外,它可以被实现在诸如膝上型计算机1322的个人计算机中。可替选地,来自计算设备1300的组件可以与移动设备(未示出)诸如设备1350中的其它组件组合。此类设备中的每一个均可以包含计算设备1300、1350中的一个或多个,并且整个系统可以由彼此通信的多个计算设备1300、1350组成。
计算设备1350包括处理器1352、存储器1364、诸如显示器1354的输入/输出设备、通信接口1366和收发器1368以及其它组件。设备1350还可以被提供有存储设备,诸如微驱动器或其它设备,以提供附加存储。组件1350、1352、1364、1354、1366和1368中的每一个均使用各种总线来互连,并且若干组件可以被酌情安装在公共主板上或者以其它方式安装。
处理器1352可执行计算设备1350内的指令,包括存储在存储器1364中的指令。处理器可作为芯片的芯片组被实现,所述芯片包括单独的和多个模拟和数字处理器。例如,处理器可以提供用于设备1350的其它组件的协调,诸如对用户界面、由设备1350运行的应用以及由设备1350进行的无线通信的控制。
处理器1352可以通过耦合到显示器1354的控制接口1358和显示器接口1356来与用户进行通信。显示器1354可以是例如TFT LCD(薄膜晶体管液晶显示器)或OLED(有机发光二极管)显示器或其它适当的显示技术。显示接口1356可以包括用于驱动显示器1354以向用户呈现图形和其它信息的适当的电路。控制接口1358可以从用户接收命令并且对它们进行转换以用于提交给处理器1352。此外,可以提供与处理器1352通信的外部接口1362,以使得能实现设备1350与其它设备的近区域通信。外部接口1362可以例如在一些实施方式中提供用于有线通信,或者在其它实施方式中提供用于无线通信,并且还可以使用多个接口。
存储器1364存储计算设备1350内的信息。存储器1364可作为一个或多个计算机可读介质、一个或多个易失性存储器单元或者一个或多个非易失性存储器单元中的一种或多种被实现。扩展存储器1374还可以通过扩展接口1372来提供并连接到设备1350,所述扩展接口1372可以包括例如SIMM(单列直插存储器模块)卡接口。这种扩展存储器1374可以为设备1350提供额外的存储空间,或者还可以为设备1350存储应用或其它信息。具体地,扩展存储器1374可以包括用于执行或者补充上述的过程的指令,并且还可以包括安全信息。因此,例如,扩展存储器1374可以作为用于设备1350的安全模块被提供,并且可以被编程有允许安全地使用设备1350的指令。此外,可以经由SIMM卡提供安全应用以及附加信息,诸如以不可破解的方式将识别信息放置在SIMM卡上。
如在下面所讨论的,存储器可以包括例如闪速存储器和/或NVRAM存储器。在一个实施方式中,计算机程序产品被有形地具体实现在信息载体中。计算机程序产品包含指令,所述指令当被执行时,执行一种或多种方法,诸如上述的那些方法。信息载体是可以例如通过收发器1368或外部接口1362接收的计算机或机器可读介质,诸如存储器1364、扩展存储器1374或处理器1352上的存储器。
设备1350可以通过通信接口1366以无线方式通信,所述通信接口1366必要时可以包括数字信号处理电路。通信接口1366可以提供用于在各种模式或协议下通信,所述各种模式或协议诸如GSM语音呼叫、SMS、EMS或MMS消息传送、CDMA、TDMA、PDC、WCDMA、CDMA2000或GPRS等。这种通信可以例如通过射频收发器1368来发生。此外,短距离通信可以例如使用蓝牙、Wi-Fi或其它这种收发器(未示出)来发生。此外,GPS(全球定位系统)接收器模块1370可以向设备1350提供附加的导航和位置相关无线数据,其可以由在设备1350上运行的应用酌情使用。
设备1350还可以使用音频编解码器1360来可听地通信,所述音频编解码器1360可以从用户接收口语信息并将它转换为可用的数字信息。音频编解码器1360可以同样地为用户生成可听声音,诸如通过扬声器,例如在设备1350的头戴式耳机中。这种声音可以包括来自语音电话呼叫的声音,可以包括录制声音(例如,语音消息、音乐文件等)并且还可以包括由在设备1350上操作的应用所生成的声音。
如图中所示,可以以许多不同的形式实现计算设备1350。例如,它可以作为蜂窝电话1380被实现。它还可以作为智能电话1382、个人数字助理或其它类似的移动设备的一部分被实现。
在一般方面中,编码器包括处理器、缓冲器和存储器。存储器包括作为指令的代码,所述指令使处理器执行许多步骤。步骤包括:基于两个分区之间的点差异在几何构造的轴内对几何构造进行分区,几何构造包括几何数据;确定分区中的点的数目;存储指示缓冲中的点的数目的值;以及对存储在缓冲器中的值进行熵编码。
在另一一般方面中,方法包括:基于两个分区之间的点差异在几何构造的轴内对几何构造进行分区,几何构造包括几何数据;确定分区中的点的数目;存储指示缓冲器中的点的数目的值;以及对存储在缓冲器中的值进行熵编码。
因此,可以更高效地完成表示或者解释表示(例如,压缩或解压缩、编码或解码)。例如,可以要求更少的计算资源(例如,存储、带宽、存储器和/或处理能力)。
实施方式可包括以下特征中的一个或多个。例如,指令还可使处理器将与几何数据相关联的浮点或双精度型值转换成b比特整数表示。几何数据可表示点云并且几何构造可以是包含点云的二维或更多维形状。几何构造的分区可包括使用k-D树来递归地对几何构造进行分区。例如,编码器可包括第二缓冲器,其中缓冲器是第一缓冲器,用于对几何构造进行分区的算法可以可确定的次序选择要分区的下一个轴,并且可将指示轴的值存储在第二缓冲器。例如,存储在缓冲器中的值是偏差值,并且偏差值是基于父分区中的点的数目来确定的。存储在缓冲器中的值可以是偏差值,几何构造的分区可包括使用k-D树来将几何构造分区成第一分区,第一分区包括第二分区和第三分区,并且可基于第一分区中的点的数目确定与第二分区中的点的数目相对应的偏差值。用于对几何构造进行分区的算法可以可确定的次序选择要分区的下一个轴,并且可存储指示轴的值。
例如,可以从对象的物理测量结果(被表示或者近似为几何构造)获得几何数据。可以进行测量(例如,通过扫描对象)以获得这种数据。
在再一个一般方面中,解码器包括处理器、第一缓冲器、第二缓冲器、第三缓冲器和存储器。存储器包括作为指令的代码,所述指令使处理器使用来自编码几何数据文件的数据来加载第一缓冲器,使用来自编码几何数据文件的数据来加载第二缓冲器,使用来自编码几何数据文件的数据来加载第三缓冲器,对第一缓冲器进行熵解码,确定在几何构造中要插入来自第一缓冲器的数据的的第一分区,基于来自第一缓冲器的数据将第一数目的点插入到分区中,并且确定点的第一数目是否大于阈值。
在确定点的第一数目大于阈值时,从第三缓冲器读取值,基于从第三缓冲器读取的值选择要划分第一分区的轴,并且在所选择的要划分的轴内划分第一分区以生成第二分区和第三分区,并且基于来自第一缓冲器的数据将第一数目的点的子集移动到第二分区或第三分区中的一个。在确定点的第一数目少于或等于阈值时,基于第二缓冲器中的数据定位第一分区中的点,并且在用第一数目的点的子集替换第一数目的点的第二分区或第三分区上重复确定点的第一数目是否大于阈值并且直到几何构造中的每个分区包括少于或等于阈值的点的数目为止。
在另一一般方面中,方法包括使用来自编码几何数据文件的数据来加载第一缓冲器。使用来自编码几何数据文件的数据来加载第二缓冲器。使用来自编码几何数据文件的数据来加载第三缓冲器。对第一缓冲器进行熵解码。确定在几何构造中要插入来自第一缓冲器的数据的第一分区。基于来自第一缓冲器的数据将第一数目的点插入到分区中。确定点的第一数目是否大于阈值。
在确定点的第一数目大于阈值时,从第三缓冲器读取值,基于从第三缓冲器读取的值选择要划分第一分区的轴,在所选择的要划分的轴内划分第一分区以生成第二分区和第三分区,并且基于来自第一缓冲器的数据将第一数目的点的子集移动到第二分区或第三分区中的一个。在确定点的第一数目少于或等于阈值时,基于第二缓冲器中的数据定位第一分区中的点,以及在用第一数目的点的子集替换第一数目的点的第二分区或第三分区上重复确定点的第一数目是否大于阈值并且直到几何构造中的每个分区包括少于或等于阈值的点的数目为止。
实施方式可包括以下特征中的一个或多个。例如,第一缓冲器的熵解码可包括转换与第二分区中的点的数目相对应的偏差值。几何数据文件可包括表示点云的几何数据并且几何构造是包含点云的二维或更多维形状。第一分区的确定以及确定第二分区的确定可包括基于第一缓冲器和第二缓冲器构建k-D树。第一缓冲器的熵解码可包括转换与第二分区中的点的数目相对应的偏差值,偏差值可对应于点的数目是基于包括分区的较大分区中的点的数目来确定的。第二缓冲器可包括表示几何构造中的点的位置的数据。
例如,几何构造可以是可以根据数学规则、等式或算法来定义的形状或几何形状的表示(例如,数字表示)。
例如,熵编码可以是无损数据压缩。
应该注意的是,上述的任何特征可以与本发明的任何特定方面或实施例一起使用。
这里描述的系统和技术的各种实施方式可用数字电子电路、集成电路、专门地设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合加以实现。这些各种实施方式可包括在可编程系统上可执行和/或可解释的一个或多个计算机程序中的实施方式,所述可编程系统包括至少一个可编程处理器,其可以是专用的或通用的,耦合以从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令,并且向存储系统、至少一个输入设备和至少一个输出设备发送数据和指令。这里描述的系统和技术的各种实施方式可作为可组合软件和硬件方面的电路、模块、块或系统被实现和/或一般地在本文中被称为可组合软件和硬件方面的电路、模块、块或系统。例如,模块可以包括在处理器(例如,形成在硅衬底、GaAs衬底等上的处理器)或某个其它可编程数据处理装置上执行的功能/行为/计算机程序指令。
上述示例实施例中的一些被描述为作为流程图描绘的过程或方法。尽管流程图将操作描述为顺序过程,然而可以并行地、并发地或同时地执行许多操作。此外,可以重新布置操作的次序。这些过程可以在其操作完成时被终止,但是也可以具有未包括在图中的附加步骤。这些过程可以对应于方法、函数、程序、子例程、子程序等。
上面讨论的方法(其中的一些通过流程图来图示)可以通过硬件、软件、固件、中间件、微码、硬件描述语言或其任何组合来实现。当用软件、固件、中间件或微码加以实现时,用于执行必要的任务的程序代码或代码段可以被存储在诸如存储介质的机器或计算机可读介质中。处理器可以执行必要的任务。
本文中公开的具体结构和功能细节仅仅是表示性的以用于描述示例实施例的目的。然而,示例实施例被以许多替代形式具体实现,而不应该被解释为限于仅本文中阐述的实施例。
应理解的是,尽管可以在本文中使用术语第一、第二等来描述各种元件,然而这些元件不应该受这些术语限制。这些术语仅用于区分一个元件和另一元件。例如,第一元件能被称为第二元件,并且类似地,第二元件能被称为第一元件,而不脱离示例实施例的范围。如本文中所使用的,术语和/或包括相关列举项目中的一个或多个的任何和所有组合。
应理解的是,当一个元件被称为连接或者耦合到另一元件时,它可直接地连接或者耦合到另一元件或者可以存在中间元件。相比之下,当一个元件被称为直接地连接或者直接地耦合到另一元件时,不存在中间元件。应该以相似的方式解释用于描述元件之间的关系的其它单词(例如,在…之间对直接地在…之间、相邻对直接地相邻等)。
本文中使用的术语仅用于描述特定实施例的目的而不旨在限制示例实施例。如本文中所使用的,除非上下文另外清楚地指示,否则单数形式一(a/an)和该(the)也旨在包括复数形式。应进一步理解的是,术语含、含有、包括和/或包括有当在本文中使用时,指定存在陈述的特征、整数、步骤、操作、元件和/或组件,但是不排除存在或添加一个或多个其它特征、整数、步骤、操作、元件、组件和/或其组。
还应该注意的是,在一些替代实施方式中,所指出的功能/行为可以不按图中指出的次序发生。例如,取决于所涉及的功能性/行为,相继示出的两个图实际上可以被并发地执行或者有时可以被以相反的次序执行。
除非另外定义,否则本文中使用的所有术语(包括技术和科学术语)具有与由示例实施例所属的领域的普通技术人员所通常理解的相同的含义。应进一步理解的是,除非在本文中明确地如此定义,否则术语(例如,在常用词典中定义的那些术语)应该被解释为具有与其在相关领域的上下文中的含义一致的含义,而不应在理想化或过于正式的意义上进行解释。
上述示例实施例的各部分和对应的详细描述是按软件或算法以及对计算机存储器内的数据比特的操作的符号表示来呈现的。这些描述和表示是本领域的普通技术人员用来有效地将其工作的实质传达给本领域的其它普通技术人员的描述和表示。算法(当在这里使用该术语时,并且当一般地使用它时)被认为是导致期望结果的步骤的自相一致序列。这些步骤是要求对物理量物的理操纵的那些步骤。通常,尽管不一定,然而这些量采取能够被存储、转移、组合、比较和以其它方式操纵的光学信号、电信号或磁信号的形式。有时主要由于通用的原因,将这些信号称为比特、值、元素、符号、字符、术语、数字等已证明是方便的。
在上述说明性实施例中,对可以作为程序模块或功能过程被实现的操作(例如,形式为流程图)的行为和符号表示的引用包括执行特定任务或者实现特定抽象数据类型并且可以使用现有结构元件处的现有硬件来描述和/或实现的例程、程序、对象、组件、数据结构等。这种现有硬件可以包括一个或多个中央处理单元(CPU)、数字信号处理器(DSP)、专用集成电路、现场可编程门阵列(FPGA)计算机等。
然而,应该记住的是,所有这些和类似的术语都将与适当的物理量相关联并且仅仅是应用于这些量的方便标签。除非另外具体地陈述,或者如从讨论中显而易见的,诸如处理或计算或计算出或确定显示等的术语指代计算机系统或类似的电子计算设备的动作和过程,所述计算机系统或类似的电子计算设备将被表示为计算机系统的寄存器和存储器内的物理电子量的数据操纵并变换成被类似地表示为计算机系统存储器或寄存器或其它此类信息存储、传输或显示设备内的物理量的其它数据。
另外注意的是,示例实施例的软件实现的方面通常被编码在某种形式的非暂时性程序存储介质上或者实现在某种类型的传输介质上。程序存储介质可以是磁的(例如,软盘或硬盘驱动器)或光学的(例如,紧致盘只读存储器或CD ROM),并且可以是只读或随机存取的。类似地,传输介质可以是双绞线对、同轴电缆、光纤或为本领域所知的某个其它适合的传输介质。示例实施例不受任何给定实施方式的这些方面限制。
最后,还应该注意的是,虽然所附权利要求书陈列本文中描述的特征的特定组合,但是本公开的范围不限于此后要求保护的特定组合,而是替代地扩展到包含本文中公开的特征或实施例的任何组合,而不管此时是否已在所附权利要求中具体地枚举了该特定组合。
Claims (14)
1.一种编码器,包括:
处理器;
第一缓冲器;
第二缓冲器;以及
存储器,所述存储器包括作为指令的代码,所述指令使所述处理器:
量化与几何构造相关联的几何数据,
使用k-D树来对量化后的几何构造进行分区,
确定分区中的点的数目,
通过计算所述分区中的所述点的数目与参考值的差来基于所述分区中的所述点的数目生成偏差值,所述参考值是基于量化后的几何构造的所述分区的父分区中的点的数目来确定的,
将所述偏差值存储在所述第一缓冲器中,以及
对所述偏差值进行熵编码,
一旦确定所述分区包括多于所述阈值数目的点:将所述点的数目存储在所述第一缓冲器中,并且进一步对包括多于所述阈值数目的点的所述分区进行分区,以及
一旦确定所述分区包括少于所述阈值数目的点并且包括至少一个点:将表示所述至少一个点的位置的值存储在所述第二缓冲器中。
2.根据权利要求1所述的编码器,其中,量化所述几何数据包括:将与所述几何数据相关联的浮点或双精度型值转换成b比特整数表示。
3.根据权利要求1所述的编码器,其中,所述几何数据表示点云,并且所述几何构造是包含所述点云的二维或更多维形状。
4.根据权利要求1-3中的任一项所述的编码器,其中,对所述几何构造进行分区包括:使用k-D树来递归地对所述几何构造进行分区。
5.一种用于编码几何构造内的点的方法,包括:
量化与所述几何构造相关联的几何数据,
使用k-D树来对量化后的几何构造进行分区,
确定分区中的点的数目,
通过计算所述分区中的所述点的数目与参考值的差来基于所述分区中的所述点的数目生成偏差值,所述参考值是基于量化后的几何构造的所述分区的父分区中的点的数目来确定的,
将所述偏差值存储在第一缓冲器中,以及
对所述偏差值进行熵编码,
一旦确定所述分区包括多于所述阈值数目的点:
将所述点的数目存储在所述第一缓冲器中,并且进一步对包括多于所述阈值数目的点的所述分区进行分区,以及
一旦确定所述分区包括少于所述阈值数目的点并且包括至少一个点:将表示所述至少一个点的位置的值存储在所述第二缓冲器中。
6.根据权利要求5所述的方法,其中,量化所述几何数据包括:将与所述几何数据相关联的浮点或双精度型值转换成b比特整数表示。
7.根据权利要求5所述的方法,其中,所述几何数据表示点云,并且所述几何构造是包含所述点云的二维或更多维形状。
8.根据权利要求5至7中的任一项所述的方法,其中,对所述几何构造进行分区包括:使用所述k-D树来递归地对所述几何构造进行分区。
9.一种解码器,包括:
处理器;
第一缓冲器;
第二缓冲器;以及
存储器,所述存储器包括作为指令的代码,所述指令使所述处理器:
使用来自编码几何数据文件的数据来加载所述第一缓冲器,
使用来自所述编码几何数据文件的数据来加载所述第二缓冲器,
对所述第一缓冲器进行熵解码,
基于来自所述第一缓冲器的所述数据,将第一数目的点插入到第一分区中,
一旦确定点的所述第一数目大于阈值,
将所述第一分区划分成第二分区和第三分区,并且
基于来自所述第一缓冲器的所述数据,将所述第一数目的点的子集移动到所述第二分区或所述第三分区中的一个,
一旦确定点的所述第一数目少于或等于所述阈值时,
基于所述第二缓冲器中的数据来定位所述第一分区中的点,并且
重复直到所述几何构造中的每个分区包括少于或等于所述阈值的点的数目为止。
10.根据权利要求9所述的解码器,其中,对所述第一缓冲器进行熵解码包括:转换与所述第二分区中的点的数目相对应的偏差值,其中所述偏差值是通过计算所述第二分区中的点的数目与参考值的差来基于所述第二分区中的点的数目生成,所述参考值是基于所述几何构造的所述第二分区的父分区中的点的数目来确定的。
11.根据权利要求9所述的解码器,其中,所述几何数据文件包括表示点云的几何数据,并且所述几何构造是包含所述点云的二维或更多维形状。
12.根据权利要求9至11中的任一项所述的解码器,其中,确定所述第一分区和确定所述第二分区包括:基于所述第一缓冲器和所述第二缓冲器来构建k-D树。
13.根据权利要求9至11中的任一项所述的解码器,其中,所述第二缓冲器包括表示所述几何构造中的点的位置的数据。
14.一种包括指令的非易失性计算机可读存储介质,所述指令在由计算机执行时,使所述计算机执行根据权利要求5至8中的任一项所述的方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/354,683 US10430975B2 (en) | 2016-11-17 | 2016-11-17 | Advanced k-D tree encoding for point clouds by most significant axis selection |
US15/354,669 US10496336B2 (en) | 2016-11-17 | 2016-11-17 | K-D tree encoding for point clouds using deviations |
US15/354,669 | 2016-11-17 | ||
US15/354,683 | 2016-11-17 | ||
PCT/US2017/061781 WO2018093886A1 (en) | 2016-11-17 | 2017-11-15 | K-d tree encoding for point clouds using deviations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109716329A CN109716329A (zh) | 2019-05-03 |
CN109716329B true CN109716329B (zh) | 2023-07-28 |
Family
ID=60628173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780056579.5A Active CN109716329B (zh) | 2016-11-17 | 2017-11-15 | 使用偏差来对点云进行k-d树编码 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3324310B1 (zh) |
CN (1) | CN109716329B (zh) |
WO (1) | WO2018093886A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109685769B (zh) * | 2018-11-30 | 2020-12-18 | 北京拓维思科技有限公司 | 导线相间距调整方法和装置 |
WO2021000658A1 (zh) | 2019-07-03 | 2021-01-07 | Oppo广东移动通信有限公司 | 点云编解码方法、编码器、解码器及计算机存储介质 |
WO2021000333A1 (zh) * | 2019-07-04 | 2021-01-07 | 深圳市大疆创新科技有限公司 | 点云的处理方法和装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2362658A1 (en) * | 2010-02-26 | 2011-08-31 | Research In Motion Limited | Encoding and decoding methods and devices employing dual codesets |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003088085A1 (en) * | 2002-04-04 | 2003-10-23 | Arizona Board Of Regents | Three-dimensional digital library system |
US8406546B2 (en) * | 2009-06-09 | 2013-03-26 | Sony Corporation | Adaptive entropy coding for images and videos using set partitioning in generalized hierarchical trees |
-
2017
- 2017-11-15 CN CN201780056579.5A patent/CN109716329B/zh active Active
- 2017-11-15 WO PCT/US2017/061781 patent/WO2018093886A1/en active Application Filing
- 2017-11-16 EP EP17202184.2A patent/EP3324310B1/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2362658A1 (en) * | 2010-02-26 | 2011-08-31 | Research In Motion Limited | Encoding and decoding methods and devices employing dual codesets |
Non-Patent Citations (2)
Title |
---|
"Progressive encoding and compression of surfaces genenrated from point cloud data";J.Smith etc.;《Computer & Graphics》;20120329;全文 * |
"REAL-TIME COMPRESSION STRATEGY ON VARIOUS POINT CLOUD STREAMS";Miss R.SARANYA;《International Journal of Computer Science and Mobile Computing》;20140331;第3卷(第3期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
EP3324310A1 (en) | 2018-05-23 |
WO2018093886A1 (en) | 2018-05-24 |
EP3324310B1 (en) | 2020-09-09 |
CN109716329A (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10496336B2 (en) | K-D tree encoding for point clouds using deviations | |
US10430975B2 (en) | Advanced k-D tree encoding for point clouds by most significant axis selection | |
US10404981B2 (en) | Method and apparatus for encoding a block using a partitioned block and weighted prediction values | |
JP6389525B2 (ja) | オーディオ/ビデオサンプルベクトルのピラミッドベクトル量子化インデクシング及びデインデクシングの方法及び装置 | |
CN109716329B (zh) | 使用偏差来对点云进行k-d树编码 | |
CN114448563B (zh) | 语义编码传输方法及电子设备 | |
US9502104B2 (en) | Multi-level cell (MLC) non-volatile memory data reading method and apparatus | |
CN110019865B (zh) | 海量图片处理方法、装置、电子设备及存储介质 | |
CN110663062B (zh) | 三角网格压缩中的引导遍历 | |
US10692248B2 (en) | Increased density of batches for improved progressive mesh compression | |
JP6289627B2 (ja) | 信号の符号化および復号化の方法および装置 | |
JP2006238036A (ja) | コンピュータグラフィックスデータ符号化装置、復号化装置、符号化方法、および、復号化方法 | |
WO2023172703A1 (en) | Geometry point cloud coding | |
WO2023028177A1 (en) | Attribute coding in geometry point cloud coding | |
CN111919445B (zh) | 使用三角剖分的图像压缩和解压缩的系统和方法 | |
CN111788607A (zh) | 用于改进的渐进网格压缩的批次密度增加 | |
US12028093B2 (en) | Encoder, decoder, encoding method, decoding method and program | |
US12113554B2 (en) | Low complexity optimal parallel Huffman encoder and decoder | |
US9955163B2 (en) | Two pass quantization of video data | |
EP3803794A1 (en) | Geometry encoder | |
WO2023250100A1 (en) | System and method for geometry point cloud coding | |
CN118611684A (zh) | 译码方法、装置及存储介质 | |
US9048875B2 (en) | Conserving computing resources during error correction | |
CN118830235A (zh) | 几何点云编码 | |
JP2021064900A (ja) | 情報処理装置、情報処理方法及びプログラム |
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 |