一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种最近邻搜索方法、编码器、解码器及存储介质与流程

2021-11-03 12:56:00 来源:中国专利 TAG:


1.本技术涉及视频编码领域,涉及但不限于一种最近邻搜索方法、编码器、解码器及存储介质。


背景技术:

2.在相关技术中,点云属性细节层次(level of detail,lod)划分之后,每划分完一层lod,就对当前lod层进行一次最近邻点的搜索。搜索的方法是,对于按照莫顿码升序排列的集合,搜索比当前点的莫顿码周围的莫顿码所对应的点进行搜索;然后再计算每个点与当前点进行距离的计算,从而得到三个最近邻点。
3.然而,由于莫顿码不能很好的反应两个点的空间距离,且莫顿码存在周期性的跳变点。但是莫顿码相邻并不能保证空间位置相近,所以在该第一个点的莫顿码周围找它的最近邻是不准确的;并且,根据搜索范围的大小不同,性能和效率变化较大,不能做到自适应的搜索最近点,导致搜索准确度低。


技术实现要素:

4.本技术实施例提供了一种最近邻搜索方法、编码器、解码器及存储介质,能够提高搜索的准确度和成功率。
5.本技术的技术方案是这样实现的:
6.本技术实施例提供了一种最近邻搜索方法,应用于编码器,包括:
7.获取待搜索的点云数据的莫顿码集合;
8.根据所述莫顿码集合和第一距离阈值,对所述点云数据进行分层,得到当前层数据;
9.对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
10.根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述邻居区域中,确定所述当前层数据的最近邻点集合;
11.若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
12.本技术实施例提供了一种最近邻搜索方法,应用于解码器,包括:
13.获取待搜索的点云数据的莫顿码集合;
14.根据所述莫顿码集合和第一距离阈值,对所述点云数据进行分层,得到当前层数据;
15.对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
16.根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述
邻居区域中,确定所述当前层数据的最近邻点集合;
17.若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
18.本技术实施例提供了一种编码器,包括:
19.第一获取单元,用于获取待搜索的点云数据的莫顿码集合;
20.第一划分单元,用于根据所述莫顿码集合和第一距离阈值,对所述点云数据进行分层,得到当前层数据;
21.第一移位单元,用于对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
22.第一确定单元,用于根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述邻居区域中,确定所述当前层数据的最近邻点集合;以及若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
23.本技术实施例提供了一种解码器,包括:
24.第二获取单元,用于获取待搜索的点云数据的莫顿码集合;
25.第二划分单元,用于根据所述莫顿码集合和第一距离阈值,对所述点云数据进行分层,得到当前层数据;
26.第二移位单元,用于对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
27.第二确定单元,用于根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述邻居区域中,确定所述当前层数据的最近邻点集合;以及若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
28.本技术实施例还提供了一种编码器,所述编码器包括第一存储器和第一处理器,其中,
29.所述第一存储器,用于存储能够在所述第一处理器上运行的计算机程序;
30.所述第一处理器,用于在运行所述计算机程序时,执行编码器侧所述的最近邻搜索方法。
31.本技术实施例还提供了一种解码器,所述解码器包括第二存储器和第二处理器,其中,
32.所述第二存储器,用于存储能够在所述第二处理器上运行的计算机程序;
33.所述第二处理器,用于在运行所述计算机程序时,执行解码器侧所述的最近邻搜索方法。
34.本技术实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现编码器侧所述的最近邻搜索方法、或者被第二处理器执行时实现解码器侧所述的最近邻搜索方法。
35.本技术实施例提供了一种最近邻搜索方法、编码器、解码器及存储介质,通过对点云数据的莫顿码进行分层,以得到当前层数据;然后,基于当前层数据的莫顿码来确定邻居区域,在该邻居区域中确定该当前层数据的最近邻点集合;如此,通过当前层数据的莫顿码搜索邻居区域,在能精确查找到邻居区域的前提下,缩小了搜索最近邻点的范围,且通过当前层数据的莫顿码未搜索到邻居区域时,还可以基于第二集合进行邻域区域的搜索,提高了搜索成功率。
附图说明
36.图1为本技术一示例性实施例提供的一种g-pcc编码的流程框图;
37.图2为本技术一示例性实施例提供的一种g-pcc解码的流程框图;
38.图3为本技术一示例性实施例提供的最近邻搜索方法的流程示意图;
39.图4为本技术一示例性实施例提供的一种确定初始右移位数的流程示意图;
40.图5为本技术一示例性实施例提供的一种当前节点与邻居节点的空间关系示意图;
41.图6为本技术一示例性实施例提供的编码器的组成结构示意图;
42.图7为本技术一示例性实施例提供的编码器的具体硬件结构示意图;
43.图8为本技术一示例性实施例解码器的组成结构示意图;
44.图9为本技术一示例性实施例提供的解码器的具体硬件结构示意图。
具体实施方式
45.下面将结合本技术一示例性实施例中的附图,对本技术一示例性实施例中的技术方案进行清楚、完整地描述。
46.本技术一示例性实施例提出一种最近邻搜索方法,该方法应用于具有前置摄像或者后置摄像功能的移动设备,所述移动设备可以以各种形式来实施。例如,本技术一示例性实施例中所描述的移动设备可以包括手机、平板电脑、掌上电脑、个人数字助理(personal digital assistant,pda)等。另外,该方法所实现的功能可以通过移动设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该移动设备至少包括处理器和存储介质。在点云g-pcc编码器框架中,将输入三维图像模型的点云进行slice划分后,对每一个slice进行独立编码。
47.参见图1,其示出了相关技术方案提供的一种g-pcc编码的流程框图。如图1所示的g-pcc编码的流程框图中,应用于点云编码器(encoder),针对待编码的点云数据,首先通过slice划分,将点云数据划分为多个slice。在每一个slice中,点云的几何信息和每个点云所对应的属性信息是分开进行编码的。在几何编码过程中,首先对几何信息进行坐标转换,使点云全都包含在一个bounding box(包围盒)中,然后再进行量化,这一步量化主要起到缩放的作用,由于量化取整,使得一部分点云的几何信息相同,于是在基于参数来决定是否移除重复点,量化和移除重复点这一过程又被称为体素化过程。接着对bounding box进行八叉树划分。在基于八叉树的几何信息编码流程中,将包围盒八等分为8个子立方体,对非空的(包含点云中的点)的子立方体继续进行八等分,直到划分得到的叶子结点为1
×1×
1的单位立方体时停止划分,对叶子结点中的点进行算术编码,生成二进制的几何比特流,即
几何码流。在基于三角面片集(triangle soup,trisoup)的几何信息编码过程中,同样也要先进行八叉树划分,但区别于基于八叉树的几何信息编码,该trisoup不需要将点云逐级划分到边长为1
×1×
1的单位立方体,而是划分到block(子块)边长为w时停止划分,基于每个block中点云的分布所形成的表面,得到该表面与block的十二条边所产生的至多十二个vertex(交点),对vertex进行算术编码(基于交点进行表面拟合),生成二进制的几何比特流,即几何码流。vertex还用于在几何重建的过程的实现,而重建的集合信息在对点云的属性编码时使用。
48.几何编码完成后,对几何信息进行重建。目前,属性编码主要针对颜色信息进行。在属性编码过程中,首先将颜色信息(即属性信息)从rgb颜色空间转换到yuv颜色空间。然后,利用重建的几何信息对点云重新着色,使得未编码的属性信息与重建的几何信息对应起来。在颜色信息编码过程中,主要有两种变换方法,一是依赖于细节层次(level of detail,lod)划分的基于距离的提升变换,目前划分lod主要分为基于距离进行划分lod(主要针对category1序列)和基于固定采样率进行划分lod(主要针对category3序列)等两种方式;二是直接进行区域自适应分层变换(region adaptive hierarchal transform,raht)的变换。其中,这两种方法都会将颜色信息从空间域转换到频域,通过变换得到高频系数和低频系数,最后对系数进行量化(即量化系数),最后,将经过八叉树划分及表面拟合的几何编码数据与量化系数处理属性编码数据进行slice合成后,依次编码每个block的vertex坐标(即算数编码),生成二进制的属性比特流,即属性码流。
49.参见图2,其示出了相关技术方案提供的一种g-pcc解码的流程框图。如图2所示的g-pcc解码的流程框图中,应用于点云解码器(decoder),针对所获取的二进制码流,首先对二进制码流中的几何比特流和属性比特流分别进行独立解码。在对几何比特流的解码时,通过算术解码-八叉树合成-表面拟合-重建几何-逆坐标转换,得到点云的几何信息;在对属性比特流的解码时,通过算术解码-反量化-基于lod的提升逆变换或者基于raht的逆变换-逆颜色转换,得到点云的属性信息,基于几何信息和属性信息还原待编码的点云数据的三维图像模型。
50.在相关技术方案中,提出了基于莫顿码进行lod划分的方案。与原始遍历搜索全部的点进行lod划分的方案相比,基于莫顿码进行lod划分的方案可以降低计算复杂度。
51.具体来说,莫顿编码也叫z-order code,因为其编码顺序按照空间z序。首先以变量p
i
表示输入点云中的点,变量m
i
为与p
i
相关的莫顿码,其中,i=1,2,...,n。计算莫顿码的具体过程描述如下所示,对于每一个分量用d比特二进制数表示的三维坐标,其三个坐标分量的表示通过以下实现:
[0052][0053]
其中,x
l
,y
l
,z
l
∈{0,1}分别是x,y,z的最高位(l=1)到最低位(l=d)对应的二进制数值。莫顿码m是对x,y,z从最高位开始,依次交叉排列x
l
,y
l
,z
l
到最低位,m的计算公式(1)如下所示:
[0054]
[0055]
其中,m
l'
∈{0,1}分别是m的最高位(l'=1)到最低位(l'=3d)的值。在得到点云中每个点的莫顿码m后,将点云中的点按照莫顿码由小到大的顺序进行排列。
[0056]
本技术实施例提供了一种最近邻搜索方法,应用于编码器(也可以成为点云编码器)或者解码器(点云解码器)。
[0057]
下面将结合附图对本技术各实施例进行详细说明。
[0058]
参见图3,其示出了本技术实施例提供的一种划分方法的流程示意图。如图3所示,应用于编码器或者解码器,该方法可以包括:
[0059]
s101、获取待搜索的点云数据的莫顿码集合。
[0060]
需要说明的是,在点云中,点云数据可以是点云中的所有点,也可以是点云中的部分点,这些点在空间上相对集中。
[0061]
还需要说明的是,本技术实施例是针对lifting和predicting属性变换中lod的生成过程进行改进;也就是说,在进行lifting或者predicting变换之前,需要先使用该划分方法进行lod层的划分。具体地,该划分方法可以应用于图1所示的g-pcc编码的流程框图中生成lod部分,也可以应用于图2所示的g-pcc解码的流程框图中生成lod部分,还可以同时应用于图1所示的g-pcc编码的流程框图中生成lod部分和图2所示的g-pcc解码的流程框图中生成lod部分,本技术实施例不作具体限定。
[0062]
在本技术实施例中,待搜索的点云数据可以理解为是需要确定最近邻点的点云数据,比如,对点云数据进行压缩编码的过程中,首先确定该点云数据的莫顿码集合。在一些可能的实现方式中,首先,获取待搜索点云数据;比如,用于形成三维视频的点云数据等。然后,确定所述点云数据的莫顿码;比如,可以通过先确定点云数据的二进制编码数据流,然后基于该二进制编码数据流,确定点云数据的莫顿码。最后,将所述点云数据的莫顿码按照升序进行排列,得到包含多个莫顿码的所述莫顿码集合。在其他实施例中,也可以将点云数据的莫顿码按照降序进行排列,得到包含多个莫顿码的所述莫顿码集合;还可以是将点云数据的莫顿码按照任意特定的顺序(比如,任意设定的,中间最大,往两端依次减小的顺序等)进行排列,以得到莫顿码集合。也就是说,莫顿码集合中的莫顿码的排列是有序的。
[0063]
这样,在获取到待搜索的点云数据之后,先计算待搜索的点云数据中点的莫顿码,得到莫顿码集合,以便于在后续的迭代运算中,可以利用莫顿码可以搜索当前节点对应父节点的邻居节点,如此有利于在进行lod层划分时利用当前节点作为采样点对邻居节点的预测。
[0064]
s102、根据莫顿码集合和第一距离阈值,对点云数据进行分层,得到当前层数据。
[0065]
这里,按照该第一距离阈值从莫顿码集合中选择到当前点的距离小于第一距离阈值的点,得到当前层数据;每当划分一层数据时,第一距离阈值逐渐增大,即划分当前层数据的下一层数据时用到的第一距离阈值大于当前层数据用到的第一距离阈值。即,当前层数据的下一层数据的密度小于当前层数据的密度。
[0066]
在一些可能的实现方式中,首先,根据莫顿码集合,确定至少包含第一个莫顿码所对应的点的第二集合。
[0067]
比如,将按照升序排列的莫顿码集合中的第一个莫顿码对应的点,作为第二集合中的点。
[0068]
其次,如果点云数据中当前处理的当前点与第二集合中的点的距离小于或等于所
述第一距离阈值,将当前点放入第一集合。
[0069]
需要说明的是,初始时,将第一集合初始化为空集合;如果点云数据中当前处理的当前点与第二集合中的点的距离小于或等于第一距离阈值,将当前点放入所述第一集合。即,初始的第一集合为空集合。
[0070]
比如,从莫顿码集合中确定距离当前点较近的点,即得到的第一集合中的点的密集度较大。判断排列在莫顿码集合中位于第二个的莫顿码对应的点与第二集合中所有点的距离,如果任一距离小于或等于第一距离阈值,将当前点放入第一集合。
[0071]
再次,如果当前点与第二集合中的点的距离大于第一距离阈值,将当前点放入第二集合。
[0072]
在一个具体例子中,按莫顿码顺序遍历点,对于正在遍历当前点p,判断p与第二集合o(k)中的点的距离是否小于或等于第一距离阈值,若小于或等于,将p放入第一集合l(k),否则放入o(k)。其中,判断p与o(k)中点的距离时,如果o(k)中的点大于128个,可以仅采用o(k)中末尾的128个点来判断点p与这些点的距离是否大于第一距离阈值,以确定该点p是放入第一集合还是第二集合;如此,通过判断第二集合中排列在后面的预设数量的点,与当前点的距离,以确定该当前点是否应该放入第一集合还是第二集合,能够降低复杂度,并且由于排列第二集合中排列在后面的点,与当前点的莫顿码更接近,所以这样得到的最终的邻居区域包含最近邻点的可能性更大。
[0073]
最后,确定第二集合中与当前点的距离小于或等于第二距离阈值的点,得到当前层数据。
[0074]
在一些可能的实现方式中,第二集合中可以包含多个点,将点云数据中当前点与第二集合中的点的距离小于第一距离阈值的点,作为第一层数据;然后,依次遍历点云数据中剩余的点与更新的第二集合中的点之间的距离,将距离小于第二距离阈值的点,作为第二层数据,并得到再次更新的第二集合;接下来,依次遍历点云数据中剩余的点与再次更新的第二集合中的点之间的距离,将距离小于另一距离阈值(该另一距离阈值大于第二距离阈值)的点,作为第三层数据等等;直至将点云数据分为多层数据。
[0075]
s103、对点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合。
[0076]
这里,对点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,可以理解为是将该预测数据的莫顿码对应的范围扩大多倍。
[0077]
需要说明的是,第一预设位数为预设的非负整数。这里包含了0,不移位的情况。例如,当前层为首层时,第一预设位数就可以为0,本技术实施例不作限制。
[0078]
示例性的,第一预设位数为3,即扩大23,本技术实施例不作限制;所以,第一父节点集合为右移后的预测数据的莫顿码集合。
[0079]
这时,第二节点集合为点云数据中当前层数据中对应的预测数据集合。预测数据为当前层数据对应的预测点,当前层数据为被预测点。
[0080]
在本技术的一些实施例中,若当前层为非首层,则第一预设位数,得到第一父节点集合;上一层数据的点为点云数据中除已分层数据之外的预测数据为预设的。例如3,本技术实施例不作限制。
[0081]
在本技术实施例中,在编码器编码时,编码器需要将第一预设位数写入码流。这
里,第一预设位数为预设的非负整数。
[0082]
详细的,将第一预设位数写入码流中的参数集数据单元中。
[0083]
在解码器解码的过程中,解析码流,得到第一预设位数,详细的,需要先解析码流中的参数集数据单元,得到第一预设位数。第一预设位数为非负整数。
[0084]
在本技术实施例中,参数集数据单元包含解码码流中部分或全部数据单元所使用的参数。
[0085]
在本技术实施例中,参数集数据单元是序列参数集数据单元。
[0086]
参数集数据单元是序列参数集数据单元(sequence parameter set)。
[0087]
在本技术实施例中,参数集数据单元中包含了点云数据的属性信息,其中,属性信息是点云数据中点相关联的标量或矢量属性。即参数集数据单元可以为属性参数集(attribute parameter set)。
[0088]
在本技术实施例中,参数集数据单元中包含了点云数据的几何信息,其中,几何信息是点云数据中点相关联的笛卡尔坐标。即参数集数据单元可以为几何参数集(geometry parameter set)。
[0089]
在本技术的一些实施例中,获取第一预设位数的过程还可以包括:按照预设间隔对莫顿码集合进行采样,得到采样点集合;其中,所述莫顿码集合包括全部或部分所述预测数据的莫顿码;将采样点集合中的点的莫顿码比特右移n位,得到采样父节点集合;其中,每一采样父节点对应一个右移后的莫顿码;确定采样父节点集合所对应的区域中,除采样点之外的邻居点;如果采样父节点集合中的邻居点的平均数量大于预设的平均值阈值,确定n位数为第一预设位数的取值,n为非负整数。
[0090]
其中,采样点集合中采样点的数量为h个,h为大于0的正整数,本技术实施例不作限制。
[0091]
在本技术的一些实施例中,对排序后的莫顿码进行采样,得到k个采样点的莫顿码;其中,k为大于0的整数;对k个采样点的莫顿码进行右移处理,得到莫顿码右移后对应的k个采样点;判断莫顿码右移后对应的k个采样点是否具备平均每个采样点对应至少一个邻居节点;若莫顿码右移后对应的k个采样点不具备平均每个采样点对应至少一个邻居节点,则继续执行对k个采样点的莫顿码进行右移处理的步骤;若莫顿码右移后对应的k个采样点具备平均每个采样点对应至少一个邻居节点,则获得k个采样点的右移位数,将右移位数确定为待划分点云中点的莫顿码的初始右移位数;其中,初始右移位数表示待划分点云中点的莫顿码在第0个lod层对应的右移位数n0。
[0092]
也就是说,在初始划分lod层,即划分第0个lod层时,首先通过对排序后的莫顿码进行采样,以得到k个采样点的莫顿码;然后针对这k个采样点的莫顿码进行不断地右移处理,直至使得莫顿码右移后对应的k个采样点具备平均每个采样点对应至少一个邻居节点,最后将所得到的右移位数作为初始右移位数n0。
[0093]
示例性的,如图4所示,实现如下:
[0094]
s1、将点云按莫顿码升序进行排列,再对按莫顿码排列后的索引采样。
[0095]
比如,假设h为100时,等间隔选取100个点作为采样点。
[0096]
s2,设置初始右移位数为0。
[0097]
这里,设置初始右移位数n为0。
[0098]
s3,将采样点的莫顿码每次右移3位。
[0099]
这里,设定初始右移位数n=0,然后,将采样点每分一层就右移3位。
[0100]
s4,确定右移后莫顿码所对应的父节点中,包含邻居点的数量。
[0101]
s5,判断所有莫顿码的邻居点的数量的均值是否大于1。
[0102]
这里,父节点中的点,除当前点外,其余点视为当前点的邻居。当均值大于1时,进入s6,此时右移位数n即为初始右移位数n,结束循环过程;否则,进入s4,继续右移3位。s5,右移位数n为初始右移位数n。
[0103]
在lod层划分后,进行最近邻搜索时,对于被预测点p,可以在o(k)中寻找其父节点的莫顿码。如图5所示,块701即为当前被预测点p的父节点。对于当前父节点,有26个相邻的邻居父节点。通过相邻父节点和当前父节点的坐标差值建立一个查找表,根据这个查找表来计算得到相邻父节点的莫顿码。有了这些莫顿码,可以在o(k)中找到这些邻居莫顿码对应的索引,从而遍历这些索引对应的点来找到被预测点p的最近邻。在一些实施例中,除了本身、共面、共线、共点的27个邻居父节点,邻居父节点的范围还可以扩大或缩小。这样,对于邻居的数量,可以向外进行扩展。同样,对于邻居的选取,也可以选取其中的部分邻居来进行最近邻的查找。
[0104]
s104、根据当前层数据的莫顿码,在第一父节点集合中,确定邻居区域;在邻居区域中,确定当前层数据的最近邻点集合。
[0105]
这里,邻居区域可以理解为是当前父节点附近的邻居区域,这样,通过莫顿码搜索邻居区域,在能精确查找到区域内最近邻点的前提下,可以缩小搜索的范围。
[0106]
这里,针对每一层数据均确定一个最近邻点集合。最近邻点集合可以是包含特定数据量的最近邻点。特定数据量的数量本技术实施例不作限制。
[0107]
示例性的,特定数据量包含3个。
[0108]
在一些可能的实现方式中,首先,确定邻居区域中的点与当前层数据中的点之间的距离,得到距离集合;比如,当前层数据中有m个点,确定这m个点与邻居区域中的点的距离,得到距离集合。然后,从距离集合中,确定距离小于第三距离阈值的目标距离;在一些实施例中,第三距离阈值可以设定的比较小的值,该第三距离阈值小于第一距离阈值。在一个具体例子中,可以是从距离集合中确定距离最小的k个(k为大于0的整数)目标距离。最后,根据所述目标距离对应的点,确定当前点的最近邻点集合。比如,将这n个目标距离对应的点,作为当前点的最近邻点集合。还可以是,从这n个目标距离对应的点中再确定更小的几个点,作为当前点的最近邻点集合。比如,从所述目标距离对应的点中,确定满足预设数量的最小距离值对应的点,得到所述当前点的最近邻点集合。其中,m为大于0的正整数。
[0109]
在一个具体例子中,从目标距离对应的点中,确定特定数量个最小距离值对应的点,得到当前点的最近邻点集合;如此,精确的查找到了最近邻点,提高了对点云数据的编码性能。
[0110]
在一些实施例中,如果距离集合中不包含距离小于第三距离阈值的目标距离,从第二集合中,确定排列在预设位置的点为当前点的最近邻点集合。比如,将排列在当前点的最近的前后k个点作为最近邻点集合。
[0111]
在本技术一示例性实施例中,通过当前层数据的莫顿码搜索邻居区域,在能精确查找到邻居区域的前提下,缩小了搜索最近邻点的范围,从而减少计算距离的次数,得到较
好的编码性能和效率。
[0112]
s105、若未确定出邻居区域,则根据第二节点集合,确定出当前层数据的搜索点,并从搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;第二节点集合为点云数据中当前层数据中对应的预测数据集合。
[0113]
在本技术实施例中,在根据当前层数据的莫顿码和第一父节点集合,未确定出当前层数据的最近邻点集合时,就可以根据第二节点集合,确定出当前层数据的搜索点,并从搜索点对应的第一预设搜索范围内进行搜索,从而确定出候选点集合,从候选点集合中,确定出与当前点最近的k个点,作为最近邻点集合;其中,第二节点集合为点云数据中当前层数据中对应的预测数据集合。k为大于0的正整数。
[0114]
需要说明的是,第二节点集合是在当前层时获取到的第二集合。
[0115]
在本技术的一些实施例中,从第二节点集合中,确定大于当前层数据的当前点的当前莫顿码的第一个莫顿码;将第一个莫顿码的对应的点设置为搜索点。
[0116]
示例性的,d0(初始距离的阈值)和ρ(相邻lod层划分时的距离阈值比)分别为用户自定义的初始参数,并且ρ>1。假定i表示所有点的索引,在第k次迭代时,lodk中的点会从lod0到第lodk-1层中查找最近邻居,即距离最近的点;k=1,2,...,n-1。这里,n为lod划分的总层数;而且当k=0时,第0次迭代时,lod0中的点会直接在lod0中查找最近邻居。具体过程如下:
[0117]
(1)、初始化划分距离阈值为d=d0;
[0118]
(2)、在第k次迭代时,集合l(k)保存属于第k层lod中的点,集合o(k)保存比lodk层更高细化级别的点集。其中,l(k)和o(k)的计算过程如下:
[0119]
首先,o(k)和l(k)均被初始化为空集;
[0120]
其次,每一次迭代按照集合i中所保存点的索引顺序进行遍历。具体地,每一次遍历都会计算当前点到集合o(k)中一定范围内所有点的几何距离,而且基于i中当前点所对应的莫顿码,在集合o(k)中进行查找第一个大于当前点所对应莫顿码点的索引,然后在该索引的一个搜索范围sr1内进行查找(这里,sr1表示基于莫顿码的搜索范围,一般取值为8,16,64;如果在该范围内查找到与当前点的距离小于阈值d
l
的点,就将当前点加入到集合l(k)中,否则,则将当前点加入到集合o(k)中;
[0121]
(3)、在每一次迭代的过程中,集合l(k)和o(k)分别进行计算,并且o(k)中的点会被用来预测集合l(k)中点。假定集合r(k)=l(k)\l(k-1),即r(k)表示lod(k-1)与lod(k)集合相差部分的点集。针对位于集合r(k)中的点会在集合o(k)中进行查找最近的h个预测邻居。查找最近邻居的具体过程如下:
[0122]
a、对于集合r(k)中的点p
i
,该点所对应的莫顿码为m
i

[0123]
b、在集合o(k)查找第一个大于当前点p
i
所对应的莫顿码m
i
的点的索引j;
[0124]
c、基于索引j在集合o(k)中的一个搜索范围[j-searchrange,j searchrange]内查找当前点p
i
的最近邻居(这里,searchrange表示一个搜索范围,即第一预设搜索范围,一般取值为8、16、32、64;
[0125]
(4)、通过重复(1)至(3)的过程不断地迭代,直至集合i中所有的点全部被遍历,从而得到候选点集合,从这些候选点集合中找到与被预测点最近的k个点,作为最近邻点集合,即得到k个最近邻点。
[0126]
也就是说,在本技术实施例中,输入点云集合i中保存着所有点的索引,作为第一次lod划分的输入点云;算法进行不断地迭代,在第k迭代时,先进行lod的划分,即将输入点云集合i划分成l(k)和o(k),再将属于l(k)中的点在o(k)中进行最近邻居搜索。其中,o(k)作为下一次迭代的输入点云集合。
[0127]
可以理解的是,通过对点云数据的莫顿码进行分层,以得到当前层数据;然后,基于当前层数据的莫顿码来确定邻居区域,在该邻居区域中确定该当前层数据的最近邻点集合;如此,通过当前层数据的莫顿码搜索邻居区域,在能精确查找到邻居区域的前提下,缩小了搜索最近邻点的范围,且通过当前层数据的莫顿码未搜索到邻居区域时,还可以基于第二节点集合进行邻域区域的搜索,提高了搜索成功率。
[0128]
在本技术的一些实施例中,s104的实现可以包括:编码器执行的s1041-s1047;或者,解码器执行的s1041-s1044、s1046-s1048。如下:
[0129]
s1041、确定当前层数据中的当前点在第一父节点集合中所属的当前父节点。
[0130]
s1042、确定与当前父节点相邻接的邻居父节点集合;邻居父节点集合包括全部邻居节点的父节点或者部分邻居的父节点。
[0131]
s1043、根据预设查找表、当前父节点和当前层数据的莫顿码,确定邻居父节点的莫顿码。
[0132]
s1044、将邻居父节点的莫顿码所对应的区域,确定为邻居区域。
[0133]
在本技术实施例中,当前层数据包括多个当前点,这里确定当前层数据中的每一个当前点在第一父节点集合中所属的父节点,并确定与该当前父节点四周相邻的邻居父节点集合。
[0134]
需要说明的是,在本技术实施例中,一个当前点对应的父节点的相邻父节点有多个,本技术实施例不作限制。
[0135]
在本技术实施例中,邻居父节点集合可以包括与当前点的父节点对应的全部邻居节点的父节点,也可以是部分邻居的父节点,本技术实施例不作限制。
[0136]
示例性的,如图5所示,块701即为当前被预测点p的父节点。对于当前父节点,有26个相邻的邻居父节点。邻居父节点的数量除了本身、共面、共线、共点的27个邻居父节点,邻居父节点的范围还可以扩大或缩小。这样,对于邻居的数量,可以向外进行扩展。
[0137]
在本技术实施例中,设置有预设查找表,该预设查找表能够表明当前父节点和邻居父节点集合之间的对应关系,用于确定邻居父节点的莫顿码。
[0138]
在一些实施例中,建立查找表可以通过以下多种方式实现:
[0139]
方式一:首先,确定邻居父节点的坐标值与当前父节点的坐标值之间的差值,得到差值集合。
[0140]
比如,确定每一个邻居父节点的三维坐标与当前父节点的三维坐标之间的差值,得到差值集合。
[0141]
然后,根据差值集合,和邻居父节点集合与当前父节点之间的所属关系,建立查找表。
[0142]
这里,所属关系用于表明邻居父节点集合与当前父节点相邻接。因为每一个差值对应一个邻居父节点,而且每一邻居父节点都有其所属的当前父节点,这样建立查找表,可以基于查找表中的差值,以及已知的当前父节点的三维坐标,确定邻居父节点的三维坐标,
从而得到每一邻居父节点的莫顿码。
[0143]
方式二:根据所属关系,和邻居父节点集合中的中心点到当前父节点中心的距离值,建立查找表。
[0144]
在一些可能的实现方式中,可以将邻居节点的权值修改为特定的数值,使用查表法,这样可以减少算法的复杂度。比如,设置每个邻居点的权值为邻居父节点的中心点到当前点距离值;以此作为权值,结合所属关系建立查找表,从而基于查找表中的距离值和当前父节点的坐标值,可以得到邻居父节点的三维坐标,进而得到邻居父节点的莫顿码。
[0145]
方式三:首先,根据邻居父节点的莫顿码和当前父节点的莫顿码,确定邻居父节点与当前父节点之间的汉明距离和莫顿码差值。然后,根据汉明距离、莫顿码差值和所属关系,建立查找表。这样,建立查找表之后,可以基于该查找表和已知的当前父节点的坐标值,得到邻居父节点的莫顿码。
[0146]
在本技术实施例中,根据预设查找表、当前父节点和当前层数据的莫顿码,确定邻居父节点的莫顿码;将邻居父节点的莫顿码所对应的区域,确定为邻居区域。
[0147]
需要说明的是,将邻居父节点的莫顿码所占据的区域,确定为邻居区域;比如,首先,在第二集合中,确定邻居父节点的莫顿码的排列序号;然后,根据排列序号,确定邻居父节点的莫顿码所对应的区域;最后,将邻居父节点的莫顿码所占据的区域中的至少部分区域,作为邻居区域。比如,将整个邻居父节点的莫顿码所占据的区域作为邻居区域,或者是,将邻居父节点的莫顿码所占据的区域的一部分,作为邻居区域;这样,得到邻居区域之后搜索最近邻点的顺序可以是按照本身、共面、共线和共点的顺序来查找,对于此区域内存在的多个邻居点,按空间位置的分布来进行选择,可以选择空间分布均匀的三个邻居点,来避免三个邻居点在被预测点同侧的情况,从而使得查找到的最近邻点集合更加准确。
[0148]
s1045、解析码流,得到预设搜索次数。
[0149]
在解码器中实现时,解码器要先从码流中解析出编码器在编码时使用的预设搜索次数。在后续处理中再使用该预设搜索次数。编码器中并未有该过程。
[0150]
s1046、在邻居区域中,按照预设搜索次数遍历与邻居父节点的莫顿码对应的点,得到候选邻居集合。
[0151]
s1047、从候选邻居集合中,确定出与当前层数据的当前点对应的最近邻点集合。
[0152]
在本技术实施例中,在邻居区域中,按照预设搜索次数遍历与邻居父节点的莫顿码对应的点,得到候选邻居集合,即候选点集合,再从候选邻居集合中,找到与当前点最近的k个最近邻点,即最近邻点集合。其中,k为大于0的正整数。
[0153]
s1048、将预设搜索次数写入码流。
[0154]
在本技术实施例中,编码器在确定当前点对应的最近邻点的过程中,需要将采用的预设搜索次数写入码流,供解码器在解码时使用。
[0155]
需要说明的是,在本技术实施例中,预设搜索次数为候选点的上限值,超过该预设搜索次数还未找到k个最近邻点时,就会采用s105的方式进行k个最近邻点的处理。
[0156]
在本技术实施例中,预设搜索次数可以表示为liftingneighborsearchtimes。
[0157]
示例性的,对于当前父节点,有26个相邻的邻居父节点。通过相邻父节点和当前父节点的坐标差值建立一个查找表,根据这个查找表来计算得到相邻父节点的莫顿码。基于上述莫顿码,可以在o(k)中找到当前父节点以及这些26个邻居或其中部分邻居的莫顿码对
应的索引,遍历这些索引对应的点作为候选点,在其中找到被预测点p(当前点)的k个最近邻点。
[0158]
在本技术的一些实施例中,确定最近邻的方法是,通过计算预测点和被预测点的距离,来找到距离最小的k个预测点,将它们作为被预测点的邻居,即最近邻点,同时最近邻点与被预测点的距离记为被预测点与预测点之间的权值。
[0159]
图6为本技术一示例性实施例提供的编码器的组成结构示意图,如图6所示,编码器1包括:
[0160]
第一获取单元10,用于获取待搜索的点云数据的莫顿码集合;
[0161]
第一划分单元11,用于根据所述莫顿码集合和第一距离阈值,对所述点云数据进行分层,得到当前层数据;
[0162]
第一移位单元12,用于对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
[0163]
第一确定单元13,用于根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述邻居区域中,确定所述当前层数据的最近邻点集合;以及若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
[0164]
在本技术的一些实施例中,所述第一确定单元13,还用于确定所述当前层数据中的当前点在所述第一父节点集合中所属的当前父节点;确定与所述当前父节点相邻接的邻居父节点集合;根据预设查找表、所述当前父节点和所述当前层数据的莫顿码,确定邻居父节点的莫顿码;将所述邻居父节点的莫顿码所对应的区域,确定为所述邻居区域。
[0165]
在本技术的一些实施例中,所述编码器1还包括:写入单元14;
[0166]
所述第一确定单元13,还用于在所述邻居区域中,按照预设搜索次数遍历与所述邻居父节点的莫顿码对应的点,得到候选邻居集合;从所述候选邻居集合中,确定出与当前层数据的当前点对应的所述最近邻点集合;
[0167]
所述写入单元14,用于将所述预设搜索次数写入码流。
[0168]
在本技术的一些实施例中,所述第一确定单元13,还用于从所述第二节点集合中,确定大于所述当前层数据的当前点的当前莫顿码的第一个莫顿码;将所述第一个莫顿码的对应的点设置为所述搜索点。
[0169]
在本技术的一些实施例中,所述第一划分单元11,还用于根据所述莫顿码集合,确定至少包含第一个莫顿码所对应的点的第二集合;如果所述点云数据中当前处理的当前点与所述第二集合中的点的距离小于或等于所述第一距离阈值,将所述当前点放入第一集合;如果所述当前点与所述第二集合中的点的距离大于所述第一距离阈值,将所述当前点放入所述第二集合;确定第二集合中与所述当前点的距离小于或等于第二距离阈值的点,得到所述当前层数据;其中,所述第一距离阈值小于所述第二距离阈值。
[0170]
在本技术的一些实施例中,所述第一预设位数为预设的非负整数。
[0171]
在本技术的一些实施例中,所述第一获取单元10,还用于按照预设间隔对莫顿码集合进行采样,得到采样点集合;其中,所述莫顿码集合包括全部或部分所述预测数据的莫顿码;将所述采样点集合中的点的莫顿码比特右移n位,得到采样父节点集合;确定所述采
样父节点集合所对应的区域中,除所述采样点之外的邻居点;如果所述采样父节点集合中的邻居点的平均数量大于预设的平均值阈值,确定所述n位数为所述第一预设位数的取值,n为非负整数。
[0172]
在本技术的一些实施例中,所述第一获取单元10,还用于获取待搜索的点云数据;确定所述点云数据的莫顿码;将所述点云数据的莫顿码按照升序进行排列,得到包含多个莫顿码的所述莫顿码集合。
[0173]
在本技术的一些实施例中,所述写入单元14,还用于将所述第一预设位数写入码流。
[0174]
在本技术的一些实施例中,所述写入单元14,还用于将所述第一预设位数写入码流中的参数集数据单元。
[0175]
在本技术的一些实施例中,所述参数集数据单元是序列参数集数据单元。
[0176]
在本技术的一些实施例中,所述参数集数据单元中包含了所述点云数据的属性信息,其中,所述属性信息是所述点云数据中点相关联的标量或矢量属性。
[0177]
在本技术的一些实施例中,所述参数集数据单元中包含了所述点云数据的几何信息,其中,所述几何信息是所述点云数据中点相关联的笛卡尔坐标。
[0178]
在本技术的一些实施例中,所述邻居父节点集合包括全部邻居节点的父节点或者部分邻居的父节点。
[0179]
在实际应用中,如图7所示,为本技术一示例性实施例的编码器的硬件实体示意图,包括:
[0180]
第一处理器15以及存储有所述第一处理器15可执行计算机程序的第一存储器16,所述第一存储器16通过第一通信总线17依赖所述第一处理器15执行操作,当所述计算机程序被所述第一处理器15执行时,执行上述编码器侧的最近邻搜索方法。
[0181]
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0182]
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0183]
图8为本技术一示例性实施例提供的解码器的组成结构示意图,如图8所示,解码器2包括:
[0184]
第二获取单元20,用于获取待搜索的点云数据的莫顿码集合;
[0185]
第二划分单元21,用于根据所述莫顿码集合和第一距离阈值,对所述点云数据进
行分层,得到当前层数据;
[0186]
第二移位单元22,用于对所述点云数据中当前层数据对应的预测数据的莫顿码比特右移第一预设位数,得到对应的第一父节点集合;
[0187]
第二确定单元23,用于根据所述当前层数据的莫顿码,在所述第一父节点集合中,确定邻居区域;在所述邻居区域中,确定所述当前层数据的最近邻点集合;以及若未确定出所述邻居区域,则根据第二节点集合,确定出所述当前层数据的搜索点,并从所述搜索点对应的第一预设搜索范围内进行搜索,确定出最近邻点集合;所述第二节点集合为所述点云数据中当前层数据中对应的预测数据集合。
[0188]
在本技术的一些实施例中,所述第二确定单元23,还用于确定所述当前层数据中的当前点在所述第一父节点集合中所属的当前父节点;确定与所述当前父节点相邻接的邻居父节点集合;根据预设查找表、所述当前父节点和所述当前层数据的莫顿码,确定邻居父节点的莫顿码;将所述邻居父节点的莫顿码所对应的区域,确定为所述邻居区域。
[0189]
在本技术的一些实施例中,所述解码器2还包括:解析单元24;
[0190]
所述解析单元24,用于解析码流,得到预设搜索次数;
[0191]
所述第二确定单元23,还用于在所述邻居区域中,按照预设搜索次数遍历与所述邻居父节点的莫顿码对应的点,得到候选邻居集合;从所述候选邻居集合中,确定出与当前层数据的当前点对应的所述最近邻点集合;
[0192]
在本技术的一些实施例中,所述第二确定单元23,还用于从所述第二节点集合中,确定大于所述当前层数据的当前点的当前莫顿码的第一个莫顿码;将所述第一个莫顿码的对应的点设置为所述搜索点。
[0193]
在本技术的一些实施例中,所述第二划分单元21,还用于根据所述莫顿码集合,确定至少包含第一个莫顿码所对应的点的第二集合;如果所述点云数据中当前处理的当前点与所述第二集合中的点的距离小于或等于所述第一距离阈值,将所述当前点放入第一集合;如果所述当前点与所述第二集合中的点的距离大于所述第一距离阈值,将所述当前点放入所述第二集合;确定所述第二集合中与所述当前点的距离小于或等于第二距离阈值的点,得到所述当前层数据;其中,所述第一距离阈值小于所述第二距离阈值。
[0194]
在本技术的一些实施例中,所述解析单元24,还用于解析码流,得到所述第一预设位数;所述第一预设位数为非负整数;
[0195]
所述第二移位单元22,还用于将所述点云数据当前层数据对应的预测数据的莫顿码,右移所述第一预设位数,得到对应的所述第一父节点集合。
[0196]
在本技术的一些实施例中,所述第二获取单元20,还用于按照预设间隔对莫顿码集合进行采样,得到采样点集合;其中,所述莫顿码集合包括全部或部分所述预测数据的莫顿码;将所述采样点集合中的点的莫顿码比特右移n位,得到采样父节点集合;确定所述采样父节点集合所对应的区域中,除所述采样点之外的邻居点;如果所述采样父节点集合中的邻居点的平均数量大于预设的平均值阈值,确定所述n位数为所述第一预设位数的取值,n为非负整数。
[0197]
在本技术的一些实施例中,所述第二获取单元20,还用于获取待搜索的点云数据;确定所述点云数据的莫顿码;将所述点云数据的莫顿码按照升序进行排列,得到包含多个莫顿码的所述莫顿码集合。
[0198]
在本技术的一些实施例中,所述解析单元24,还用于解析码流中的参数集数据单元,得到所述第一预设位数。
[0199]
在本技术的一些实施例中,所述参数集数据单元是序列参数集数据单元。
[0200]
在本技术的一些实施例中,所述参数集数据单元中包含了所述点云数据的属性信息,其中,所述属性信息是所述点云数据中点相关联的标量或矢量属性。
[0201]
在本技术的一些实施例中,所述参数集数据单元中包含了所述点云数据的几何信息,其中,所述几何信息是所述点云数据中点相关联的笛卡尔坐标。
[0202]
在本技术的一些实施例中,所述邻居父节点集合包括全部邻居节点的父节点或者部分邻居的父节点。
[0203]
在实际应用中,如图9所示,为本技术一示例性实施例的解码器的硬件实体示意图,包括:
[0204]
第二处理器25以及存储有所述第二处理器25可执行计算机程序的第二存储器26,所述第二存储器26通过第二通信总线27依赖所述第二处理器25执行操作,当所述计算机程序被所述第二处理器25执行时,执行上述解码器侧的最近邻搜索方法。
[0205]
处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取第一存储器中的信息,结合其硬件完成上述方法的步骤。
[0206]
本技术实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现编码器侧所述的最近邻搜索方法、或者被第二处理器执行时实现解码器侧所述的最近邻搜索方法。
[0207]
需要说明的是,在本技术中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0208]
上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
[0209]
本技术所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
[0210]
本技术所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
[0211]
本技术所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以
任意组合,得到新的方法实施例或设备实施例。
[0212]
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献