CN111434112B - 全局匹配patch的获取方法及装置 - Google Patents

全局匹配patch的获取方法及装置 Download PDF

Info

Publication number
CN111434112B
CN111434112B CN201880078104.0A CN201880078104A CN111434112B CN 111434112 B CN111434112 B CN 111434112B CN 201880078104 A CN201880078104 A CN 201880078104A CN 111434112 B CN111434112 B CN 111434112B
Authority
CN
China
Prior art keywords
patch
matching
point cloud
frame
globalpatch
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
Application number
CN201880078104.0A
Other languages
English (en)
Other versions
CN111434112A (zh
Inventor
张德军
弗莱德斯拉夫·扎克哈成科
陈建乐
刘波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN111434112A publication Critical patent/CN111434112A/zh
Application granted granted Critical
Publication of CN111434112B publication Critical patent/CN111434112B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/597Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding specially adapted for multi-view video sequence encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/97Matching pursuit coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Radiation-Therapy Devices (AREA)

Abstract

一种全局匹配patch的获取方法,包括获取N帧点云的patch集合,N为大于或等于2的整数(S601);对N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合(S602),第i帧点云的匹配patch集合包括n个patch;根据N帧点云的匹配patch集合确定M个全局匹配patch集合(S603),M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,N1帧点云为N帧点云中的全部或部分帧。本方法有利于提高视频编码的效率。

Description

全局匹配patch的获取方法及装置
技术领域
本申请涉及点云领域,具体涉及一种全局匹配patch的获取方法及装置。
背景技术
在动态图像专家组(moving picture experts group,MPEG)点云编码方法中,首先将待编码点云按照一定准则进行分割,分割后会形成很多点云块,每个点云块都是一个连通区域,也称为一个patch,patch包括经过3d到2d的投影形成多个2d图像以及相关辅助信息。整个点云被分为若干个patch,这些patch相互之间没有交叠区域。对于这些形状各异的patch,需要找到一种方法将所有的patch按照某种规则紧密的排列在一张2维图像上,这个排列所有patch的方法称为packing。按照packing的顺序最终形成当前帧深度图、当前帧纹理图和当前帧占用图。然后再对当前帧深度图、当前帧纹理图和当前帧占用图进行编码。
对于动态点云,采用现有技术的packing方法对patch按照一定的规则(例如降序排列或升序排列)直接packing当前帧的所有patch,得到当前帧占用图。但是这种方式没有考虑前后帧的patch在时间和空间上的一致性,可能导致同一个patch在前后帧占用图的占用图上位置不同,降低了视频编码器或者图像编码器编码效率。
发明内容
本发明实施例提供了一种全局匹配patch的获取方法及相关设备,有利于提高视频编码的效率。
第一方面,本发明实施例提供了一种全局匹配patch的获取方法,包括:
获取N帧点云的patch集合,N大于或等于2的整数;对N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,第i帧点云的匹配patch集合包括n个patch,n个patch中的一个patch与第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系,n为大于或等于0的整数;根据N帧点云的匹配patch集合确定M个全局匹配patch集合,M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,M为大于0的整数,N1帧点云为N帧点云中的全部或部分帧。通过获取N帧点云的全局匹配patch(即M个全局匹配patch集合)后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,在后续编码时提高对占用图、深度图和纹理图的编码效率。
其中,第i帧点云的参考帧为在对第i帧处理之前N帧点云中已处理的点云中的一帧。若第i-1帧点云为第i帧点云的参考帧,则相应地第i-1帧点云的匹配patch集合为第i帧点云的参考帧的匹配patch集合;若第i帧点云为第i+1帧点云的参考帧,则相应地第i帧点云的匹配patch集合为第i+1帧点云的参考帧的匹配patch集合。
对N帧点云进行处理过程中,第一个进行处理的点云为N帧点云的任一帧点云,例如第0帧点云。第i帧点云为N帧点云中的一帧,但不为第一个进行处理的点云。
需要说明的是,在对N帧点云的patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第i帧点云的patch集合中未匹配的patch是指在第i帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。
其中,若第i’个全局匹配patch集合为跨Ni’帧点云中具有匹配关系的patch的集合,则该第i’个全局匹配patch集合中patch的个数为Ni’。i’=0,1,2……,M-1。其中M为全局匹配patch集合的个数,Ni’大于或等于N1。换句话说,M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合可以理解为该M个全局匹配patch集合中包括跨N1帧点云中具有匹配关系的patch的集合,还包括跨其他帧点云中具有匹配关系的patch的集合,这里所说的其他帧的帧数大于或等于N1。
对于跨N1帧点云中具有匹配关系的patch的集合,可以理解为:该集合中包括N1个patch,该N1个patch中的每个patch来自于(或所属)一帧点云,且不同patch来自于不同点云,且该N1个patch具有匹配关系。该N1个patch分别来自于N1帧点云的patch集合。比如,一个全局匹配patch集合中有4个patch,分别为patch A,patch B,patch C和patch D,且该4个patch分别来自于4帧点云的patch集合。其中,patch A与patch B具有匹配关系,patch B与patch C具有匹配关系,patch C与patch D具有匹配关系,或者patch A,patch B,patchC和patch D中的任一个与其他3个具有匹配关系,则该4个patch中的每个patch可称为跨4帧点云中具有匹配关系的patch,且包含该4个patch的集合为跨4帧点云中具有匹配关系的patch的集合。
对于第一个进行处理的点云,将该帧点云的patch集合作为该帧的匹配patch集合。
在一个可能的实施例中,M小于或者等于P。第i帧点云的匹配patch集合中patch的个数为Wi,i=0,1,…,N-1,P为Wi的最小值。该N帧点云的匹配patch集合可以为N帧点云的N个匹配patch集合,即每帧点云对应一个匹配patch集合。
在一个可能的实施例中,对第i帧点云的参考帧的匹配patch集合中的一个或多个patch与N帧点云中第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,包括:遍历第i帧点云的参考帧的匹配patch集合,对参考帧的匹配patch集合中的第t1个patch与第i帧点云的patch集合中第w1个的patch执行匹配操作;当第t1个patch与第w1个patch相匹配时,将第w1个patch保存至第i帧点云的匹配patch集合中;其中,第w1个patch的目标索引为第t1个patch的索引;其中,第w1个patch为第i帧点云的patch集合中未匹配的patch。其中,第t1个patch的索引为该第t1个patch在第i帧点云的patch集合中的位置索引,即位置索引为t1。
第w1个patch为未匹配的patch是指第w1个patch的目标索引为缺省值或者第w1个patch的状态标识为第一标识;当第t1个patch与第w1个patch相匹配时,将第w1个patch的目标索引设置为第t1个patch的索引(即目标索引不为缺省值)和/或将第w1个patch的状态标识为第二标识(比如ture或1),该第二标识用于指示第w1个patch为匹配patch。当第w1个patch与第t1个patch不相匹配时,继续对参考帧的patch集合中的第t1+1个patch与第w1个patch执行匹配操作。
在一个可能的实施例中,根据N帧点云的匹配patch集合获取M个全局匹配patch集合,包括:遍历第i帧点云的参考帧的匹配patch集合,判断第t1个patch的索引与第w1个patch的目标索引是否相同;i={N-1,N-2 ,…,1};
当第t1个patch的索引与第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将第t1个patch从参考帧的匹配patch集合中删除;
当第t1个patch的目标索引与第i帧点云的匹配patch集合中的一个patch索引相同时,对第t1个patch不做处理。
当i等于1时,得到M个全局匹配patch集合,M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
第二方面,本发明实施例提供了另一种全局匹配patch的获取方法,包括:
获取N帧点云的patch集合,N为大于或等于2的整数;对N帧点云中的第j帧点云的参考帧的匹配patch集合中的第t2个patch与第j帧点云的patch集合中的第w2个patch执行匹配操作;第w2个patch为第j帧点云的patch集合中未匹配的patch;当第t2个patch与第j帧点云的patch集合中未匹配的patch均不相匹配时,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除;W帧点云为在对第j帧点云的参考帧进行处理之前N帧点云中已处理的点云;并将第t2个patch从第j帧点云的参考帧的匹配patch集合中删除;当N帧点云处理完后,得到M个全局匹配patch集合,M个全局匹配patch集合中一个集合为跨N帧点云中具有匹配关系的patch的集合。通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云中的每帧点云分配相同或者相似的位置,使得产生的每一帧占用图中的全局匹配patch在空间上具有一致性,在后续编码时提高对占用图、深度图和纹理图的编码效率。
需要说明的是,W帧点云包括第0帧点云到第j-2帧点云,其中,第0帧点云为N帧点云中第一个进行处理的点云,第j-2帧点云为N帧点云中第j-1个进行处理的点云。
其中,第j-2帧点云为第j帧点云的参考帧的参考帧,即第j-2帧点云为第j-1帧点云的参考帧,第j-1帧点云为第j帧点云的参考帧。第j-2帧点云、第j-1帧点云和第j帧点云为N帧点云中连续处理的3帧点云,且第j-2帧点云在第j-1帧点云之前处理,j-1帧点云在第j帧点云之前处理。
其中,在对N帧点云的匹配patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第j帧点云的patch集合中未匹配的patch是指在第j帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。
在一个可能的实施例中,当第t2个patch与第w2个patch相匹配时,将第t2个patch保存至第j帧点云的匹配patch集合中,并将第w2个patch的目标索引设置为第w2个patch的索引,和/或将第w2个patch的状态标识设置为第二标识(比如ture或1),该第二标识用于指示patch的为匹配patch。其中,第w2个patch的索引为第w2个patch在其所属的patch集合中的位置索引。
假设第j帧点云的参考帧为第j-1帧,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除具体是:根据第t2个patch的目标索引在第j-1帧点云的参考帧点云的匹配patch集合中寻找第t2’个patch,第t2个patch的目标索引为第t2’个patch的索引,将该第t2’个patch从第j-1帧点云的参考帧的匹配patch集合中删除,该第j-1帧点云的参考帧可为第j-2帧点云;然后再根据第t2’个patch的目标索引在第j-1帧点云的参考帧的参考帧的匹配patch集合中寻找索引为t2’个patch的目标索引的patch,并将该patch从第j-1帧点云的参考帧的参考帧的匹配patch集合中删除,其中,第j-1帧点云的参考帧的参考帧可以为第j-3帧点云。依次类推,直至将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除。
第三方面,本发明实施例提供了另一种全局匹配patch的获取方法,包括:
获取N帧点云的patch集合;N为大于或者等于2的整数;对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合;sq个候选全局匹配patch集合中的至少一个候选全局匹配patch集合为跨N1帧点云中具有匹配关系的patch的集合;N1帧点云为N帧点云中的全部帧或者部分帧;q={1,2,…,N-1};当q=N-1时,对sN-2个候选全局匹配patch集合中的patch与第N-1帧点云的patch集合中未匹配的patch执行匹配操作,以得到sN-1个候选全局匹配patch集合;
当对N帧点云处理后,基于sN-1个候选全局匹配patch集合获取M个全局匹配patch集合,M个全局匹配patch集合中的一个集合为跨N2帧点云中具有匹配关系的patch的集合,M为小于或等于sN-1的整数,N2帧点云为N帧点云中的部分帧或者全部帧。通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再对非全局匹配patch进行打包,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云中的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,在后续编码时提高对占用图、深度图和纹理图的编码效率。
其中,在对N帧点云的patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第q帧点云的patch集合中未匹配的patch是指在第q帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。
需要说明的是,在N帧点云中,第一个进行处理的点云为N帧点云中的任一帧,例如第0帧。对N帧点云中第一个进行处理的点云具体是将该帧点云的patch集合中所有的patch分别存储在s0个候选全局匹配pathc集合中,即该帧点云的patch集合中有s0个patch。
其中,若第q’个全局匹配patch集合为跨Nq’帧点云中具有匹配关系的patch的集合,则该第q’个全局匹配patch集合中patch的个数为Nq’。q’=0,1,2……,M-1。其中M为全局匹配patch集合的个数,Nq’大于或等于N2。换句话说,M个全局匹配patch集合中的一个集合为跨N2帧点云中具有匹配关系的patch的集合,可以理解为M个全局匹配patch集合中包括跨N2帧点云中具有匹配关系的patch的集合,还包括跨其他帧点云中具有匹配关系的patch的集合,这里所说的其他帧的帧数大于或等于N2。
对于跨N2帧点云中具有匹配关系的patch的集合,可以理解为:该集合中包括N2个patch,该N2个patch中的每个patch来自于(或所属)一帧点云,且不同patch来自于不同点云,且该N2个patch具有匹配关系。该N2个patch分别来自于N2帧点云的patch集合。比如,一个全局匹配patch集合中有4个patch,分别为patch A,patch B,patch C和patch D,且该4个patch分别来自于4帧点云的patch集合。其中,patch A与patch B具有匹配关系,patch B与patch C具有匹配关系,patch C与patch D具有匹配关系,或者patch A、patch B,patchC和patch D中的任一个与其他3个具有匹配关系,则该4个patch中的每个patch可称为跨4帧点云中具有匹配关系的patch,且包含该4个patch的集合为跨4帧点云中具有匹配关系的patch的集合。
在一个可能的实施例中,对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合,包括:
遍历sq-1个候选全局匹配patch集合,将第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,第w3个patch为第q帧点云的patch集合中未匹配的patch;k的取值范围为0到sq-1-1;
当第t3个patch与第w3个patch相匹配时,将第w3个patch保存至第k个候选全局匹配patch集合中,第k个候选全局匹配patch集合包含于sq个候选全局匹配patch集合中,第t3个patch为一个或多个patch中的任一个。
当第t3个patch与第w3个patch匹配时,将第w3个patch的状态标识设置为第二标识(比如ture或1),该第二标识用于表示第w3个patch为匹配patch;和/或将第w3个patch的目标索引设置为第t3个patch的索引。
需要说明的是,第k个候选全局匹配patch集合中的一个patch为第k个候选全局匹配patch集合中的任一个patch,例如:一个patch可以为在处理第q-1帧点云的patch集合时更新到第k个候选全局匹配patch集合中的patch;第q-1帧点云在第q帧点云之前处理;第k个候选全局匹配patch集合中的多个patch可以为第k个候选全局匹配patch集合中的部分或者全部patch。
在一个可能的实施例中,为了保留非全局匹配patch,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,对第k个候选全局匹配patch集合中patch不做处理。此时sq=sq-1其中,保留非全局匹配patch的目的是为了在打包时对于N帧点云中每帧点云的非全局匹配patch分配相同或相似的位置,使得产生的每帧点云中的非全局匹配patch在空间上也具有一致性,进而也可以提高后续对占用图、深度图和纹理图进行编码的效率。
在一个可能的实施例中,为了节省硬件的存储空间和为了直接得到全局匹配patch,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,清空或删除第k个候选全局匹配patch集合。全局匹配patch为跨N帧点云中具有匹配关系的patch。当清空第k个候选全局匹配patch集合时,sq=sq-1;当删除第k个候选全局匹配patch集合中,sq<sq-1
在一个可能的实施例中,在对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作后,若第q帧点云的patch集合中还存在d个未匹配的patch,则新增d个候选全局匹配patch集合,将d个patch分别保存至新增的d个候选全局匹配patch集合中;其中,sq个候选全局匹配patch集合包括新增的d个候选全局匹配patch集合和sq-1个候选全局匹配patch集合。此时sq>sq-1
在一个可能的实施例中,基于sN-1个候选全局匹配patch集合得到M个全局匹配patch集合,包括:确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合;或者,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
需要说明的是,在遍历sq-1个候选全局匹配patch集合,对第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,删除第k个候选全局匹配patch集合。在处理完N帧点云的patch集合后,得到的sN-1个候选全局匹配patch集合中的patch均为全局匹配patch,则可直接确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合。按照第三方面其他的方法处理完N帧点云后,得到的sN-1个候选全局匹配patch集合中的patch包括全局匹配patch和非全局匹配patch,此时需要通过设置第一阈值,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
第四方面,本发明实施例提供了另一种全局匹配patch的获取方法,包括:
获取N帧点云的patch集合,N为大于或者等于2的整数;
从Ng帧点云中选一帧点云作为参考帧;Ng帧点云为N帧点云中的部分帧或者全部帧;对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合;Ng-1帧点云为Ng帧点云中除了参考帧之外的点云;候选全局匹配patch集合为跨Ng’帧点云中具有匹配关系的patch集合,Sg大于或等于Sg-1,Sg和Sg-1分别为经过g次迭代和g-1次迭代得到的候选全局匹配patch集合的个数,Ng’帧点云为Ng帧点云中的部分帧或者全部;
从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,M个候选全局匹配patch集合中至少一个全局匹配patch集合为跨N’帧点云中具有匹配关系的patch集合,M为小于或者等于Sg的整数,g的取值范围为1到N-2;N’帧点云为N帧点云中的部分帧或者全部帧。
其中,若第g’个全局匹配patch集合为跨Ng’帧点云中具有匹配关系的patch的集合,则该第g’个全局匹配patch集合中patch的个数为Ng’。g’=0,1,2……,M-1。其中M为全局匹配patch集合的个数,Ng’大于或等于N’。换句话说,M个全局匹配patch集合中的一个集合为跨N’帧点云中具有匹配关系的patch的集合,可以理解为M个全局匹配patch集合中包括跨N’帧点云中具有匹配关系的patch的集合,还包括跨其他帧点云中具有匹配关系的patch的集合,这里所说的其他帧的帧数大于或等于N’。
对于跨N’帧点云中具有匹配关系的patch的集合,可以理解为:该集合中包括N’个patch,该N’个patch中的每个patch来自于(或所属)一帧点云,且不同patch来自于不同点云,且该N’个patch具有匹配关系。该N’个patch分别来自于N’帧点云的patch集合。比如,一个全局匹配patch集合中有4个patch,分别为patch A,patch B,patch C和patch D,且该4个patch分别来自于4帧点云的patch集合。其中,patch A与patch B具有匹配关系,patch B与patch C具有匹配关系,patch C与patch D具有匹配关系,或者patch A、patch B,patchC和patch D中的任一个与其他3个具有匹配关系,则该4个patch中的每个patch可称为跨4帧点云中具有匹配关系的patch,且包含该4个patch的集合为跨4帧点云中具有匹配关系的patch的集合。
需要说明的是,进行第一次迭代的点云为N帧点云中的任一帧,比如第0帧。
对第一次进行迭代的点云的处理方式具体是将第一次进行迭代的点云的patch集合中所有的patch分别存储在s0个候选全局匹配pathc集合中,即该帧点云的patch集合中有s0个patch。
其中,在对N帧点云的patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(例如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,未匹配的patch是指状态标识为第一标识的patch或者是目标索引为缺省值的patch。
对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作之前,将参考帧的patch集合中未匹配的patch分别保存至新增的s个patch候选全局匹配patch集合中,s为参考帧的patch集合中未匹配的patch的个数。
在一个可能的实施例中,对参考帧的patch集合中的未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合包括:
遍历参考帧的patch集合,对参考帧的patch集合中的第w4个patch与第p帧点云的patch集合中第t4个patch执行匹配操作,第t4个patch为第p帧点云的patch集合中未匹配的patch;第w4个patch为参考帧的patch集合中未匹配的patch;
当第w4个patch与第t4个patch相匹配时,将第t4个patch保存至第w4个patch所属的候选全局匹配patch集合中;Sg个候选全局匹配patch集合包括第w4个patch所属的候选全局匹配patch集合;其中,第p帧点云为Ng-1帧点云中的全部或部分帧中的一帧点云。
在一个可能的实施例中,从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,包括:
确定Sg个候选全局匹配patch集合中patch的数量大于或等于第二阈值的候选全局匹配patch集合为M个全局匹配patch集合。
在一个可能的实施例中,M个全局匹配patch集合中部分集合中的patch为非全局匹配patch,部分集合中的patch为全局匹配patch。非全局匹配patch为跨N帧点云中的部分帧中具有匹配关系的patch,全局匹配patch为跨N帧点云中具有匹配关系的patch。
第五方面,本发明实施例提供了另一种全局匹配patch的获取方法,包括:
获取N帧点云的匹配patch集合,N为大于或者等于2的整数;N帧点云的每帧点云的匹配patch集合中的一个patch R的边信息包括第一索引和第二索引,第一索引为与当前帧相邻的前一帧的匹配patch集合中与patch R具有匹配关系patch的索引;第二索引为与当前帧相邻的后一帧的匹配patch集合中与patch R具有匹配关系patch的索引;
遍历N-2帧点云的匹配patch集合,判断每帧点云的匹配patch集合中每个patch的第一索引和第二索引中的至少一个是否为预设值;N-2帧点云为N帧点云中除了第0帧点云和第N-1帧点云之外的点云;
当第x帧点云的匹配patch集合中的第y个patch的第一索引和第二索引中的至少一个等于预设值时,将第0帧至第x-1帧点云的匹配patch集合中与第y个patch具有匹配关系的patch删除,并将第y个patch从第x帧点云的patch集合中删除,以得到全局匹配patch集合;其中,全局匹配patch集合中的patch为跨N帧点云中具有匹配关系的patch。
通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,在后续编码时提高后续对占用图、深度图和纹理图的编码效率。
第六方面,本申请实施例中还提供一种全局匹配patch的获取装置,包括:
获取单元,用于获取N帧点云的patch集合,N大于或等于2的整数;
匹配单元,用于对N帧点云中第i帧点云的参考帧的匹配patch集合中的patch与第i帧点云的patch集合中未匹配的patch执行匹配操作,以获取第i帧点云的匹配patch集合,第i帧点云的匹配patch集合包括n个patch,该n个patch中的一个patch与第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系,n为大于或等于0的整数;
确定单元,用于根据N帧点云的匹配patch集合确定M个全局匹配patch集合,M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,M为大于0的整数,N1帧点云为N帧点云中的全部或部分帧。
在一个可能的实施例中,M小于或者等于P,P表示N个匹配patch集合中包含匹配patch数量最小的匹配patch集合中patch的个数。
在一个可能的实施例中,匹配单元具体用于:遍历第i帧点云的参考帧的匹配patch集合,对参考帧的匹配patch集合中的第t1个patch与第i帧点云的patch集合中第w1个的patch执行匹配操作;当第t1个patch与第w1个patch相匹配时,将第w1个patch保存至第i帧点云的匹配patch集合中;其中,第w1个patch的目标索引为第t1个patch的索引;其中,第w1个patch为第i帧点云的patch集合中未匹配的patch。
在一个可能的实施例中,确定单元具体用于:遍历第i帧点云的参考帧的匹配patch集合,判断第t1个patch的索引与第w1个patch的目标索引是否相同;i={N-1,N-2,…,1};
当第t1个patch的索引与第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将第t1个patch从参考帧的匹配patch集合中删除;
当i等于1时,得到M个全局匹配patch集合,M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
第七方面,本申请实施例中还提供一种全局匹配patch的获取装置,包括:
获取单元,用于获取N帧点云的patch集合,N为大于或等于2的整数;
匹配单元,用于对N帧点云中的第j帧点云的参考帧的匹配patch集合中的第t2个patch与第j帧点云的patch集合中的第w2个patch执行匹配操作;第w2个patch为第j帧点云的patch集合中未匹配的patch;
删除单元,用于当第t2个patch与第j帧点云的patch集合中未匹配的patch均不相匹配时,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除;将第t2个patch从第j帧点云的参考帧的匹配patch集合中删除;
当N帧点云处理完后,得到M个全局匹配patch集合,M个全局匹配patch集合中一个集合为跨N帧点云中具有匹配关系的patch的集合。
在一个可能的实施例中,匹配单元还用于:当第t2个patch与第w2个patch相匹配时,将第w2个patch保存至第j帧点云的匹配patch集合中。
第八方面,本申请实施例中还提供一种全局匹配patch的获取装置,包括:
获取单元,用于获取N帧点云的patch集合;N为大于或者等于2的整数;
匹配单元,用于对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合;sq个候选全局匹配patch集合中的至少一个候选全局匹配patch集合为跨N1帧点云中具有匹配关系的patch的集合;N1帧点云为N帧点云中的全部帧或者部分帧;q={1,2,…,N-1};
确定单元,还用于当对N帧点云处理后,基于sN-1个候选全局匹配patch集合得到M个全局匹配patch集合,M个全局匹配patch集合中的一个集合为跨N2帧点云中具有匹配关系的patch的集合,M为小于或等于sN-1的整数,N2帧点云为N帧点云中的部分帧或者全部帧。
在一个可能的实施例中,匹配单元具体用于:遍历sq-1个候选全局匹配patch集合,对第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,第w3个patch为第q帧点云的patch集合中未匹配的patch;
当第t3个patch与第w3个patch相匹配时,将第w3个patch保存至第k个候选全局匹配patch集合中,第k个候选全局匹配patch集合包含于sq个候选全局匹配patch集合中,第t3个patch为一个或多个patch中的任一个。
在一个可能的实施例中,匹配单元还用于:当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,清空第k个候选全局匹配patch集合。
在一个可能的实施例中,匹配单元还用于:当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,删除第k个候选全局匹配patch集合。
在一个可能的实施例中,匹配单元还用于:在对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作后,若第q帧点云的patch集合中还存在d个未匹配的patch,则新增d个候选全局匹配patch集合,将d个patch分别保存至新增的d个候选全局匹配patch集合中;其中,sq个候选全局匹配patch集合包括新增的d个候选全局匹配patch集合和sq-1个候选全局匹配patch集合。
在一个可能的实施例中,确定单元具体用于:确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合;或者,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
第九方面,本申请实施例中还提供一种全局匹配patch的获取装置,包括:
获取单元,用于获取N帧点云的patch集合,N为大于或者等于2的整数;
匹配单元,用于从Ng帧点云中选一帧点云作为参考帧;Ng帧点云为N帧点云中的部分帧或者全部帧;对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合;Ng-1帧点云为Ng帧点云中除了参考帧之外的点云;候选全局匹配patch集合为跨Ng’帧点云中具有匹配关系的patch集合,Sg大于或等于Sg-1,Sg和Sg-1分别为经过g次迭代和g-1次迭代得到的候选全局匹配patch集合的个数,Ng’帧点云为Ng帧点云中的部分帧或者全部;
确定单元,用于从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,M个候选全局匹配patch集合中至少一个全局匹配patch集合为跨N’帧点云中具有匹配关系的patch集合,M为小于或者等于Sg的整数,g的取值范围为1到N-2;N’帧点云为 N帧点云中的部分或者全部。
在一个可能的实施例中,匹配单元具有用于:遍历参考帧的patch集合,对参考帧的patch集合中的第w4个patch与第p帧点云的patch集合中第t4个patch执行匹配操作,第t4个patch为第p帧点云的patch集合中未匹配的patch;第w4个patch为参考帧的patch集合中未匹配的patch;
当第w4个patch与第t4个patch相匹配时,将第t4个patch保存至第w4个patch所属的候选全局匹配patch集合中,Sg个候选全局匹配patch集合包括第w4个patch所属的候选全局匹配patch集合;其中,第p帧点云为Ng-1帧点云中的全部或部分帧中的一帧点云。
在一个可能的实施例中,确定单元具体用于:确定Sg个候选全局匹配patch集合中patch的数量大于或等于第二阈值的候选全局匹配patch集合为M个全局匹配patch集合。
第十方面,本申请实施例中还提供一种全局匹配patch的获取装置,包括:
获取单元,用于获取N帧点云的匹配patch集合,N为大于或者等于2的整数;每帧点云的匹配patch集合中的一个patch R的边信息包括第一索引和第二索引,第一索引为与当前帧相邻的前一帧的匹配patch集合中与patch R具有匹配关系patch的索引;第二索引为与当前帧相邻的后一帧的匹配patch集合中与patch R具有匹配关系patch的索引;
匹配单元,用于遍历N-2帧点云的匹配patch集合,判断每帧点云的匹配patch集合中每个patch的第一索引和第二索引中的至少一个是否为预设值;N-2帧点云为N帧点云中除了第0帧点云和第N-1帧点云之外的点云;
删除单元,用于当第x帧点云的匹配patch集合中的第y个patch的第一索引和第二索引中的至少一个等于预设值时,将第0帧至第x-1帧点云的匹配patch集合中与第y个patch具有匹配关系的patch删除,并将第y个patch从第x帧点云的patch集合中删除,以得到全局匹配patch集合;
其中,全局匹配patch集合中的patch为跨N帧点云中具有匹配关系的patch。
第十一方面,本申请实施例提供一种编码装置,包括:
打包模块,用于根据第一方面至第五方面中任一方面所述的方法获取N帧点云的全局匹配patch;打包时优先打包N帧点云中每帧点云的全局匹配patch,再打包非全局匹配patch,获取N帧点云中每帧点云的占用图;
编码模块,用于对N帧点云中每帧点云的占用图进行编码,以得到N帧点云的占用图的码流。
第十二方面,本申请实施例提供一种全局匹配patch的获取装置,该装置可以包括:
存储器,用于存储点云的patch集合。
处理器,用于执行上述第一方面至第五方面提供的任意一种全局匹配patch的获取方法。
第十三方面,本申请实施例提供一种全局匹配patch的获取装置,包括:相互耦合的非易失性存储器和处理器,处理器调用存储在存储器中的程序代码以执行第一方面至第五方面任一种方法的部分或全部步骤。
第十四方面,本申请实施例提供一种全局匹配patch的获取装置,该装置包括存储器和处理器。存储器用于存储程序代码;处理器用于调用所述程序代码,以执行第一方面至第五方面的任一种全局匹配patch的获取方法。
第十五方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质存储了程序代码,当该程序代码在计算机上运行时,使得该计算机执行第一方面至第五方面的任一种方法的部分或全部步骤。
第十六方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行第一方面至第五方面的任一种方法的部分或全部步骤。
应当理解的是,第六方面至第十六方面提供的相关装置/计算机可读存储介质/计算机程序产品的有益效果均可以对应参考对应方面提供的方法实施例的有益效果,此处不再赘述。
可以看出,在本技术方案中,通过获取N帧点云的全局匹配patch,使得在打包的过程中为该N帧点云的每一帧点云中的具有匹配关系的全局匹配patch分配相同(或相似)的位置,进而使得所产生的每一帧点云的占用图中具有匹配关系的全局匹配patch在空间上具有一致性。也就是说,本技术方案在考虑了不同点云间的时间和空间上的相关性的基础上,使得不同点云中具有匹配关系的patch在空间上具有一致性。由于点云的占用图可以用于指导该点云的深度图和纹理图的生成,并且对点云的深度图和纹理图的编码技术是视频/图像编码技术,而视频/图像编码技术中经码流传输的通常是帧间的差异数据,因此,不同点云中具有匹配关系的patch在空间上具有一致性,有助于提高编码效率,以及节省码流传输开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为可用于本申请实施例的一种实例的点云译码系统的框图;
图2为可用于本申请实施例的一种实例的编码器的示意性框图;
图3为可适用于本申请实施例的一种点云、点云的patch以及点云的占用图的示意图;
图4为可用于本申请实施例的一种实例的解码器的示意性框图;
图5为MPEG点云编码技术中提供的一种打包方法的流程示意图;
图6为本申请实施例提供的一种全局匹配patch的获取方法的流程示意图;
图7为本申请实施例提供的一种获取匹配patch的示意图;
图8为本申请实施例提供的一种获取全局匹配patch的示意图;
图9为本申请实施例提供的另一种获取全局匹配patch的示意图;
图10为本申请实施例提供的另一种全局匹配patch的获取方法的流程示意图;
图11a为本申请实施例提供的另一种获取全局匹配patch的示意图;
图11b为本申请实施例提供的另一种获取全局匹配patch的示意图;
图12为本申请实施例提供的另一种全局匹配patch的获取方法的流程示意图;
图13为本申请实施例提供的另一种获取全局匹配patch的示意图;
图14为本申请实施例提供的另一种获取全局匹配patch的示意图;
图15为本申请实施例提供的另一种获取全局匹配patch的示意图;
图16为本申请实施例提供的一种全局匹配patch获取装置的结构示意图;
图17为本申请实施例提供的另一种全局匹配patch获取装置的结构示意图;
图18为本申请实施例提供的另一种全局匹配patch获取装置的结构示意图;
图19为本申请实施例提供的另一种全局匹配patch获取装置的结构示意图;
图20为本申请实施例提供的另一种全局匹配patch获取装置的结构示意图;
图21为本申请实施例提供的一种编码装置的结构示意图;
图22为本申请实施例提供的另一种编码装置的结构示意图。
具体实施方式
本申请实施例中的术语“至少一个(种)”包括一个(种)或多个(种)。“多个(种)”是指两个(种)或两个(种)以上。例如,A、B和C中的至少一种,包括:单独存在A、单独存在B、同时存在A和B、同时存在A和C、同时存在B和C,以及同时存在A、B和C。本申请实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本申请实施例中的术语字符“/”,一般表示前后关联对象是一种“或”的关系。在公式中,字符“/” 表示除法运算,如A/B表示A除以B。本申请实施例中的术语“第一”、“第二”等是为了区分不同的对象,并不限定该不同对象的顺序。
图1为可用于本申请实施例的一种实例的点云译码系统1的示意性框图。术语“点云译码”或“译码”可一般地指代点云编码或点云解码。点云译码系统1的编码器100可以根据本申请提出的任一种点云编码方法对待编码点云进行编码。点云译码系统1的解码器200可以根据本申请提出的与编码器使用的点云编码方法相对应的点云解码方法对待解码点云进行解码。
如图1所示,点云译码系统1包含源装置10和目的地装置20。源装置10产生经编码点云数据。因此,源装置10可被称为点云编码装置。目的地装置20可对由源装置10所产生的经编码的点云数据进行解码。因此,目的地装置20可被称为点云解码装置。源装置10、目的地装置20或两个的各种实施方案可包含一或多个处理器以及耦合到所述一或多个处理器的存储器。所述存储器可包含但不限于随机存取存储器(random access memory,RAM)、只读存储器(read-only memory,ROM)、带电可擦可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM)、快闪存储器或可用于以可由计算机存取的指令或数据结构的形式存储所要的程序代码的任何其它媒体,如本文所描述。
源装置10和目的地装置20可以包括各种装置,包含桌上型计算机、移动计算装置、笔记型(例如,膝上型)计算机、平板计算机、机顶盒、例如所谓的“智能”电话等电话手持机、电视机、相机、显示装置、数字媒体播放器、视频游戏控制台、车载计算机或其类似者。
目的地装置20可经由链路30从源装置10接收经编码点云数据。链路30可包括能够将经编码点云数据从源装置10移动到目的地装置20的一或多个媒体或装置。在一个实例中,链路30可包括使得源装置10能够实时将经编码点云数据直接发送到目的地装置20的一或多个通信媒体。在此实例中,源装置10可根据通信标准(例如无线通信协议)来调制经编码点云数据,且可将经调制的点云数据发送到目的地装置20。所述一或多个通信媒体可包含无线和/或有线通信媒体,例如射频(radio frequency,RF)频谱或一或多个物理传输线。所述一或多个通信媒体可形成基于分组的网络的一部分,基于分组的网络例如为局域网、广域网或全球网络(例如,因特网)。所述一或多个通信媒体可包含路由器、交换器、基站或促进从源装置10到目的地装置20的通信的其它设备。
在另一实例中,可将经编码数据从输出接口140输出到存储装置40。类似地,可通过输入接口240从存储装置40存取经编码点云数据。存储装置40可包含多种分布式或本地存取的数据存储媒体中的任一者,例如硬盘驱动器、蓝光光盘、数字多功能光盘(digitalversatile disc,DVD)、只读光盘(compact disc read-only memory,CD-ROM)、快闪存储器、易失性或非易失性存储器,或用于存储经编码点云数据的任何其它合适的数字存储媒体。
在另一实例中,存储装置40可对应于文件服务器或可保持由源装置10产生的经编码点云数据的另一中间存储装置。目的地装置20可经由流式传输或下载从存储装置40存取所存储的点云数据。文件服务器可为任何类型的能够存储经编码的点云数据并且将经编码的点云数据发送到目的地装置20的服务器。实例文件服务器包含网络服务器(例如,用于网站)、文件传输协议(file transfer protocol,FTP)服务器、网络附属存储(networkattached storage,NAS)装置或本地磁盘驱动器。目的地装置20可通过任何标准数据连接(包含因特网连接)来存取经编码点云数据。这可包含无线信道(例如,Wi-Fi连接)、有线连接(例如,数字用户线路(digital subscriber line,DSL)、电缆调制解调器等),或适合于存取存储在文件服务器上的经编码点云数据的两者的组合。经编码点云数据从存储装置40的传输可为流式传输、下载传输或两者的组合。
图1中所说明的点云译码系统1仅为实例,并且本申请的技术可适用于未必包含点云编码装置与点云解码装置之间的任何数据通信的点云译码(例如,点云编码或点云解码)装置。在其它实例中,数据从本地存储器检索、在网络上流式传输等等。点云编码装置可对数据进行编码并且将数据存储到存储器,和/或点云解码装置可从存储器检索数据并且对数据进行解码。在许多实例中,由并不彼此通信而是仅编码数据到存储器和/或从存储器检索数据且解码数据的装置执行编码和解码。
在图1的实例中,源装置10包含数据源120、编码器100和输出接口140。在一些实例中,输出接口140可包含调节器/解调器(调制解调器)和/或发送器(或称为发射器)。数据源120可包括点云捕获装置(例如,摄像机)、含有先前捕获的点云数据的点云存档、用以从点云内容提供者接收点云数据的点云馈入接口,和/或用于产生点云数据的计算机图形系统,或点云数据的这些来源的组合。
编码器100可对来自数据源120的点云数据进行编码。在一些实例中,源装置10经由输出接口140将经编码点云数据直接发送到目的地装置20。在其它实例中,经编码点云数据还可存储到存储装置40上,供目的地装置20以后存取来用于解码和/或播放。
在图1的实例中,目的地装置20包含输入接口240、解码器200和显示装置220。在一些实例中,输入接口240包含接收器和/或调制解调器。输入接口240可经由链路30和/或从存储装置40接收经编码点云数据。显示装置220可与目的地装置20集成或可在目的地装置20外部。一般来说,显示装置220显示经解码点云数据。显示装置220可包括多种显示装置,例如,液晶显示器(liquid crystal display,LCD)、等离子显示器、有机发光二极管(organic light-emitting diode,OLED)显示器或其它类型的显示装置。
尽管图1中未图示,但在一些方面,编码器100和解码器200可各自与音频编码器和解码器集成,且可包含适当的多路复用器-多路分用器(multiplexer-demultiplexer,MUX-DEMUX)单元或其它硬件和软件,以处置共同数据流或单独数据流中的音频和视频两者的编码。在一些实例中,如果适用的话,那么MUX-DEMUX单元可符合ITU H.223多路复用器协议,或例如用户数据报协议(user datagram protocol,UDP)等其它协议。
编码器100和解码器200各自可实施为例如以下各项的多种电路中的任一者:一个或多个微处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)、离散逻辑、硬件或其任何组合。如果部分地以软件来实施本申请,那么装置可将用于软件的指令存储在合适的非易失性计算机可读存储媒体中,且可使用一或多个处理器在硬件中执行所述指令从而实施本申请技术。前述内容(包含硬件、软件、硬件与软件的组合等)中的任一者可被视为一或多个处理器。编码器100和解码器200中的每一者可包含在一或多个编码器或解码器中,所述编码器或解码器中的任一者可集成为相应装置中的组合编码器/解码器(编码解码器)的一部分。
本申请可大体上将编码器100称为将某些信息“发信号通知”或“发送”到例如解码器200的另一装置。术语“发信号通知”或“发送”可大体上指代用以对经压缩点云数据进行解码的语法元素和/或其它数据的传送。此传送可实时或几乎实时地发生。替代地,此通信可经过一段时间后发生,例如可在编码时在经编码位流中将语法元素存储到计算机可读存储媒体时发生,解码装置接着可在所述语法元素存储到此媒体之后的任何时间检索所述语法元素。
如图2所示,为可用于本申请实施例的一种实例的编码器100的示意性框图。图2是以MPEG(moving picture expert group)点云压缩(point cloud compression,PCC)编码框架为例进行说明的。在图2的实例中,编码器100可以包括patch信息生成模块101、打包模块102、深度图生成模块103、纹理图生成模块104、第一填充模块105、基于图像或视频的编码模块106、占用图编码模块107、辅助信息编码模块108和复用模块109等。另外,编码器100还可以包括点云滤波模块110、第二填充模块111和点云重构模块112等。其中:
patch信息生成模块101,用于采用某种方法将一帧点云分割产生多个patch,以及获得所生成的patch的相关信息等。其中,patch是指一帧点云中部分点构成的集合,通常一个连通区域对应一个patch。patch的相关信息可以包括但不限于以下信息中的至少一项:点云所分成的patch的个数、每个patch在三维空间中的位置信息、每个patch的法线坐标轴的索引、每个patch从三维空间投影到二维空间产生的深度图、每个patch的深度图大小(例如深度图的宽和高)、每个patch从三维空间投影到二维空间产生的占用图等。该相关信息中的部分,如点云所分成的patch的个数,每个patch的法线坐标轴的索引,每个patch的深度图大小、每个patch在点云中的位置信息、每个patch的占用图的尺寸信息等,可以作为辅助信息被发送到辅助信息编码模块108,以进行编码(即压缩编码)。每个patch的占用图可以被发送到打包模块102进行打包,具体的,首先基于本申请所述全局匹配patch的获取方法获取点云的全局匹配patch,在打包时优先打包每帧点云的全局patch,然后再打包非全局匹配patch,以得到该点云的占用图。再一方面,各patch在该点云占用图中的具体位置信息和各patch的深度图等可以被发送到深度图生成模块103。
打包模块102获得该点云的占用图后,一方面可以将该点云的占用图经第二填充模块111进行填充后发送到占用图编码模块107以进行编码。另一方面可以利用该点云的占用图指导深度图生成模块103生成该点云的深度图和指导纹理图生成模块104生成该点云的纹理图。
如图3所示,为可适用于本申请实施例的一种点云、点云的patch以及点云的占用图的示意图。其中,图3中的(a)为一帧点云的示意图,图3中的(b)为基于图3中的(a)获得的点云的patch的示意图,图3中的(c)为图3中的(b)所示的各patch映射到二维平面上所得到的各patch的占用图经打包得到的该点云的占用图的示意图。
深度图生成模块103,用于根据点云的占用图、该点云的各patch的占用图和深度信息,生成该点云的深度图,并将所生成的深度图发送到第一填充模块105,以对深度图中的空白像素进行填充,得到经填充的深度图。
纹理图生成模块104,用于根据点云的占用图、该点云的各patch的占用图和纹理信息,生成该点云的纹理图,并将所生成的纹理图发送到第一填充模块105,以对纹理图中的空白像素进行填充,得到经填充的纹理图。
经填充的深度图和经填充的纹理图被第一填充模块105发送到基于图像或视频的编码模块106,以进行基于图像或视频的编码。后续:
一方面,基于图像或视频的编码模块106、占用图编码模块107、辅助信息编码模块108,将所得到的编码结果(即码流)发送到复用模块109,以合并成一个码流,该码流可以被发送到输出接口140。
另一方面,基于图像或视频的编码模块106所得到的编码结果(即码流)发送到点云重构模块112进行点云重构,以得到经重构的点云(即得到重构的点云几何信息)。具体的,对基于图像或视频的编码模块106所得到的经编码的深度图进行视频解码,获得点云的解码深度图,利用解码深度图、该点云的占用图和各patch的辅助信息,获得重构的点云几何信息。其中,点云的几何信息是指点云中的点(例如点云中的每个点)在三维空间中的坐标值。
可选的,点云重构模块112还可以将点云的纹理信息和重构的点云几何信息发送到着色模块,着色模块用于对重构点云进行着色,以获得重构点云的纹理信息。
可选的,纹理图生成模块104还可以基于经点云滤波模块110对重构的点云几何信息进行滤波得到的信息,生成该点云的纹理图。
如图4所示,为可用于本申请实施例的一种实例的解码器200的示意性框图。其中,图4中是以MPEG PCC解码框架为例进行说明的。在图4的实例中,解码器200可以包括解复用模块201、基于图像或视频的解码模块202、占用图解码模块203、辅助信息解码模块204、点云的几何信息重构模块205、点云滤波模块206和点云的纹理信息重构模块207。其中:
解复用模块201用于将输入的码流(即合并的码流)发送到相应解码模块。具体的,将包含经编码的纹理图的码流和经编码的深度图的码流发送给基于图像或视频的解码模块202;将包含经编码的占用图的码流发送给占用图解码模块203,将包含经编码的辅助信息的码流发送给辅助信息解码模块204。
基于图像或视频的解码模块202,用于对接收到的经编码的纹理图和经编码的深度图进行解码;然后,将解码得到的纹理图信息发送给点云的纹理信息重构模块207,将解码得到的深度图信息发送给点云的几何信息重构模块205。占用图解码模块203,用于对接收到的包含经编码的占用图的码流进行解码,并将解码得到的占用图信息发送给点云的几何信息重构模块205。辅助信息解码模块204,用于对接收到的经编码的辅助信息进行解码,并将解码得到的指示辅助信息的信息发送给点云的几何信息重构模块205。
点云的几何信息重构模块205,用于根据接收到的占用图信息和辅助信息对点云的几何信息进行重构。经重构的点云的几何信息经点云滤波模块206滤波之后,被发送到点云的纹理信息重构模块207。
点云的纹理信息重构模块207,用于对点云的纹理信息进行重构,得到经重构的点云。
可以理解的,图4所示的解码器200仅为示例,具体实现时,解码器200可以包括比图4中所示的更多或更少的模块。本申请实施例对此不进行限定。
为了便于理解本申请实施例提供的技术方案,以下对本申请实施例涉及的技术及术语进行说明。
在MPEG点云编码方法中,编码器首先将待编码点云(即当前帧或者当前帧点云)按照一定准则分割成若干个patch,这些patch相互之间没有交叠区域。然后,将每个patch从三维空间投影到二维平面,得到一个二维图像(即patch的占用图)。接着,将所有patch的占用图(或者降低分辨率后的patch的占用图)按照某种规则紧密的排列在一张二维图像上,得到当前帧占用图。这种排列patch的占用图的方法称为打包(packing)。后续,按照打包顺序生成当前帧深度图和当前帧纹理图。其中,当前帧深度图是各patch经过投影得到的深度按照打包顺序产生的一张二维图像。当前帧纹理图是各patch经过投影得到的纹理图按照打包顺序产生的一张二维图像。当前帧占用图是一张2值二维图像,用于表示该二维图像的各像素位置是否被点云中某点占据。通常,为了节约编码比特,当前帧占用图的分辨率低于当前帧深度图和当前帧纹理图的分辨率。
以下给出patch的信息(或者称为patch的边信息)的示例及描述,具体如表1所示。
patch的信息 描述
u0 patch(或patch的占用图)在当前帧占用图中的坐标位置x
v0 patch(或patch的占用图)在当前帧占用图中的坐标位置y
sizeU0 patch(或patch的占用图)在当前帧占用图上的宽度
sizeV0 patch(或patch的占用图)在当前帧占用图上的高度
occupancyResolution 当前帧占用图的分辨率,例如为16
sizeU patch的占用图的宽度
sizeV patch的占用图的高度
Occupancy patch的占用图
patchIndex Patch索引
bestMatchedIndex 与patch匹配的参考帧中patch的索引
preBestMatchIndex 与patch匹配的前一帧的patch索引
nextBestMatchIndex 与patch匹配的后一帧的patch索引
表1
其中,patch(或patch的占用图)在当前帧占用图中的坐标可以表示为(x,y),x是该patch的占用图的各点在X轴上的最小坐标值,y是该patch的占用图的各点在Y轴上的最小坐标值,当然本申请实施例不限于此。其中,当前帧占用图的坐标系是X-Y坐标系,X轴是水平方向上的坐标轴,Y轴是竖直方向上的坐标轴。
在MPEG点云编码技术中,打包方法的流程示意图如图5所示。其中,图5所示的方法的执行主体可以是编码器中的打包模块。图5所示的方法中假设编码器将当前帧分割成patchCount个patch,这些patch通常以patch集合形式保存。图5所示的方法包括:
步骤1:将当前帧的patch集合按照patch的占用图的宽度(sizeU)的大小、高度(sizeV)的大小或者patch索引(patchIndex)的大小进行降序排列,得到一个序列。下文中将该序列中的第i个patch集合标记为patch[i],i= 0、1、…、patchCount-1。
步骤2:计算当前帧占用图的宽度和高度的初始值。
例如,根据max{minimumImageWidth/occupancyResolution,patch[0].sizeU0},得到当前帧占用图的宽度的初始值。其中,minimumImageWidth表示当前帧占用图的宽度的最小值,patch[0].sizeU0表示patch[0]的占用图的宽度。
根据公式max{minimumImageHeight/occupancyResolution, patch[0].sizeV0},得到当前帧占用图的高度的初始值。其中,minimumImageHeight表示当前帧占用图的高度的最小值,patch[0].sizeV0表示patch[0]的占用图的高度。
步骤3:在当前帧占用图中从左向右,从上向下寻找可以放入patch[i]的占用图的位置。其中当前帧占用图中被已放入patch的占用图占据的位置,不可再放入新的patch的占用图。可以理解的,步骤3中的patch[i]的占用图可以替换为降低分辨率后的patch[i]的占用图。
如果找到patch[i]的占用图的可用位置,则执行步骤4。
如果当前帧占用图中没有找到patch[i]的占用图的可用位置,则执行步骤5。
步骤4:记录下patch[i]的占用图在当前帧占用图中的存放位置u0和v0。
执行步骤4之后,则结束。
步骤5:将当前帧占用图的高度occupancySizeV加倍,基于更新后(即加倍后)的当前帧继续执行上述步骤3。
可以理解的,遍历当前帧的各patch集合,执行上述步骤3,得到最终的当前帧占用图。
可以理解的,执行打包的过程可以认为是对当前帧占用图的更新过程。如果不加说明,下文中所描述的当前帧占用图均是指最终的当前帧占用图。执行打包操作之后可以确定当前帧中所有patch在当前帧占用图中的位置信息。
后续,基于该位置信息,对当前帧深度图和当前帧纹理图进行视频/图像编码。
图5所示的打包方法通过降序排列后直接打包所有patch的占用图,实现简单,但是,可能导致同一个patch的占用图在前后帧占用图上位置不同。这会导致基于视频/图像编码模块编码性能的损失较大,且导致在编码patch边信息时需要更多比特。
为此,本申请实施例提供了点云的全局匹配patch的获取方法、获取装置和编码装置。可选的,本申请实施例中的点云为动态点云,前后帧点云在时间和空间上具有相关性,其中,该相关性具体可以体现为点云组中存在全局匹配patch。
在对本申请实施例进行详细说明之前,需要说明的是,在本申请实施例中对patch处理的过程中,涉及的全局匹配patch集合、候选全局匹配patch集合、匹配patch集合和patch集合中保存的可以为patch信息,该patch信息可以包括patch的本身、patch的索引、patch所在帧的索引和patch的辅助信息中的部分或者全部,但不限定于此,还可以是patch的其他表现形式。在本申请的实施例中主要以patch为例进行说明。
在本申请中,在对N帧点云的patch集合中patch进行处理之前,N帧点云中每帧点云的patch集合中的每个patch的状态标识为第一标识(例如false或0)和/或每个patch的目标索引为缺省值。在执行匹配操作之前可根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。
对于N帧点云,M个全局匹配patch集合中的至少一个集合为跨N1帧点云中具有匹配关系的patch的集合且N1帧点云为N帧点云中的全部帧或者部分帧。其中,若第i’个全局匹配patch集合为跨Ni’帧点云中具有匹配关系的patch的集合,则该第i’个全局匹配patch集合中patch的个数为Ni’。i’=0,1,2……,M-1。其中M为全局匹配patch的个数,Ni’大于或等于N1。
M个全局匹配patch集合中的至少一个集合为跨N1帧点云中具有匹配关系的patch的集合且N1帧点云为N帧点云中的全部帧或者部分帧可以理解为M个全局匹配patch集合中包括跨N1帧点云中具有匹配关系的patch的集合,还包括跨其他帧点云中具有匹配关系的patch的集合,这里所说的其他帧的帧数大于或等于N1。比如N=4,M个全局匹配patch集合中包括跨4帧点云中具有匹配关系的patch的集合,还可以包括跨4帧点云中的3帧中具有匹配关系的patch的集合,还可以包括跨4帧点云中的2帧中具有匹配关系的patch的集合,N1=2。
对于跨N1帧点云中具有匹配关系的patch的集合,可以理解为:该集合中包括N1个patch,该N1个patch中的每个patch来自于(或所属)一帧点云,且不同patch来自于不同点云,且该N1个patch具有匹配关系。该N1个patch分别来自于N1帧点云的patch集合。比如有4个patch,分别为patch A,patch B,patch C和patch D,且该4个patch分别来自于4帧点云的patch集合。其中,patch A与patch B具有匹配关系,patch B与patch C具有匹配关系,patch C与patch D具有匹配关系,或者patch A,patch B,patch C和patch D中的任一个与其他3个具有匹配关系,则该4个patch中的每个patch可称为跨4帧点云中具有匹配关系的patch,且包含该4个patch的集合为跨4帧点云中具有匹配关系的patch的集合。对于上述patch A,patch B,patch C和patch D的匹配情况并不限定于上述两种方式。
可以理解的,跨N1帧点云中具有匹配关系的patch的集合,这一特征不仅描述了一个全局匹配patch集合中包括的N1个全局匹配patch的特征,还描述了全局匹配patch的概念,即一帧点云中的全局匹配patch是指该帧点云中的且在N1帧点云中除该帧点云之外的各帧点云中均能找到具有匹配关系的patch的patch。
对于N帧点云,全局匹配patch为跨N帧点云具有全局匹配关系的patch。例如,假设N=4,即有4帧点云(分别标记为点云1~4),对于点云1中的任意一个patch来说,如果在点云2~4的patch集合中均能找到与该patch具有匹配关系的patch,如与点云1中的patch11具有匹配关系的patch分别是:点云2中的patch21、点云3中的patch31和点云4中的patch41,那么,patch11、21、31、41均是全局匹配patch,且patchq1是点云q中的全局匹配patch,1≤q≤4,q是整数。
点云的匹配patch是指该点云的patch集合中的patch,且该patch在该点云的参考帧的patch集合中有与之具有匹配关系的patch。点云的匹配patch集合中的元素为点云的匹配patch。
patch的状态标识用于指示该patch是否为匹配patch,当patch的状态标识为第一标识时,该patch为未匹配patch,则该patch会参与后续匹配过程;当patch的状态标识为第二标识时,该patch为匹配patch,该patch不参与后续匹配过程。
以下结合附图对本申请实施例提供的全局匹配patch的获取方法和相关设备进行说明。
参见图6,图6为本申请实施例提供的一种全局patch的获取方法的流程示意图。如图6所示,该方法包括:
S601、获取N帧点云的patch集合,N为大于或等于2的整数。
可选的,上述N帧点云可以是一个帧组(group of frame, GOF),或者该N帧点云为一个GOF中的在时间上连续相邻的N帧点云,当然本申请实施例不限于此。
S602、对N帧点云中第i帧点云(亦称为当前帧点云)的参考帧的匹配patch集合中的一个或多个patch与第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合。
其中,第i帧点云的匹配patch集合包括n个patch,该patch与第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系, n为大于或等于0的整数;第i帧点云为N帧点云中的一帧且第i帧不为第一个进行处理的点云。
其中,上述第i帧点云的参考帧为在对第i帧处理之前N帧点云中已处理的点云中的一帧。若第i-1帧点云为第i帧点云的参考帧,则相应地第i-1帧点云的匹配patch集合为第i帧点云的参考帧的匹配patch集合;若第i帧点云为第i+1帧点云的参考帧,则相应地第i帧点云的匹配patch集合为第i+1帧点云的参考帧的匹配patch集合。
对N帧点云进行处理过程中,第一个进行处理的点云为N帧点云的任一帧点云,例如第0帧点云。第i帧点云为N帧点云中的一帧,但不为第一个进行处理的点云。
对于第一个进行处理的点云,对该帧点云的patch集合作为该帧的匹配patch集合。
需要说明的是,在对N帧点云的patch集合中的patch执行匹配操作之前,N帧点云中每帧的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第i帧点云的patch集合中未匹配的patch是指在第i帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。其中,目标索引即为表1中的bestMatchedIndex。
具体地,对N帧点云中第i帧点云的patch集合中未匹配的一个或多个patch与第i帧点云的参考帧的匹配patch集合中的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,包括:
遍历第i帧点云的参考帧的匹配patch集合,对参考帧的匹配patch集合中的第t1个patch与第i帧点云的patch集合中第w1个的patch执行匹配操作;。当第t1个patch与第w1个patch相匹配时,将第w1个patch保存至第i帧点云的匹配patch集合中;其中,第w1个patch的目标索引为第t1个patch的索引;其中,第w1个patch为第i帧点云的patch集合中未匹配的patch。其中,第t1个patch的索引为该第t1个patch在第i帧点云的patch集合中的位置索引,即位置索引为t1。
第w1个patch为未匹配的patch是指第w1个patch的目标索引为缺省值或者第w1个patch的状态标识为第一标识;当第w1个patch与第t1个patch相匹配时,将第w1个patch的目标索引设置为第t1个patch的索引(即目标索引不为缺省值)和/或将第w1个patch的状态标识为第二标识(比如ture或1),该第二标识用于指示第w1个patch为匹配patch。当第w1个patch与第t1个patch不相匹配时,继续对参考帧的patch集合中的第t1+1个patch与第w1个patch执行匹配操作。
举例说明,如图7中的a图所示,假设第i帧点云的参考帧的匹配patch集合包括5个patch,第i帧点云的patch集合中未匹配的patch有5个,即第i帧点云的patch集合中的第0,1,2,3,4个patch。将第i帧点云的patch集合的5个patch中每个patch的状态标识设置为第一标识(false或0)和/或每个patch的目标索引设置为缺省值。遍历参考帧的匹配patch集合,对第0个patch与第i帧点云的patch集合中未匹配的patch执行匹配操作;当确定参考帧的匹配patch集合中的第0个patch与第i帧点云的patch集合中的第1个patch相匹配时,将第i帧点云的patch集合中的第1个patch保存至第i帧点云的匹配patch集合中,并且将第i帧点云的patch集合中的第1个patch的状态标识设置为第二标识(例如ture或1)和/或将第1个patch的目标索引设置为参考帧的匹配patch集合中的第0个patch的索引(比如0);然后再对参考帧的匹配patch集合中的第1个patch与第i帧点云patch集合中的每个未匹配的patch(包括第0,2,3,4个patch)执行匹配操作;当确定参考帧的匹配patch集合中的第1个patch与第i帧点云的patch集合中的第0个patch相匹配时,将第i帧点云的patch集合中的第0个patch保存至第i帧点云的匹配patch集合中,并且将第i帧点云的patch集合中的第0个patch的状态标识设置为第二标识和/或将第1个patch的目标索引设置为参考帧的匹配patch集合中的第1个patch的索引(比如1),以此类推,确定参考帧的匹配patch集合中的第2个patch和第3个patch分别与第i帧点云的patch集合中的第2个patch和第4个patch相匹配,第i帧点云的patch集合中的第3个patch与参考帧的匹配patch集合中的patch均不相匹配,将第i帧点云的patch集合中的第2个patch和第4个patch匹配均保存至第i帧点云的匹配patch集合中,并将第i帧点云的patch集合中的第2个patch的状态标识设置为第二标识和/或将第2个patch的目标索引设置为参考帧的匹配patch集合中的第2个patch的索引(比如2), 将第i帧点云的patch集合中的第4个patch的状态标识设置为第二标识和/或将第4个patch的目标索引设置为参考帧的匹配patch集合中的第3个patch的索引(比如3)。此时,第i帧点云的匹配patch集合中包括第0,1,2,4个patch,如图7的b图所示。
S603、根据N帧点云的匹配patch集合确定M个全局匹配patch集合。
其中,M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,M为大于0的整数,N1帧点云为所述N帧点云中的全部或部分帧。
在一个可能的实施例中,M小于或者等于P,且P表示N个匹配patch集合中包含匹配patch数量最小的匹配patch集合中patch的个数。该N帧点云的匹配patch集合可以为N帧点云的N个匹配patch集合,即每帧点云对应一个匹配patch集合。
需要说明的是,由于当前帧都是在其参考帧的匹配patch集合中寻找与当前帧的patch集合中的patch相匹配的patch,因此按照处理的顺序,N帧点云中每帧点云的匹配patch集合中的patch的个数依次减少。其中,N帧点云中最后一次处理的点云的匹配patch集合中的patch为全局匹配patch。接下来只需要将其他帧点云的匹配patch集合中的非全局匹配patch删除,就可以得到全局匹配patch集合。
具体地,根据N帧点云的匹配patch集合获取M个全局匹配patch集合,包括:遍历第i帧点云的参考帧的匹配patch集合,判断第t1个patch的索引与第w1个patch的目标索引是否相同;i={N-1,N-2 ,…,1};
当第t1个patch的索引与第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将第t1个patch从参考帧的匹配patch集合中删除;
当第t1个patch的索引与第i帧点云的匹配patch集合中的一个patch的目标索引相同时,对第t1个patch不做处理。
当i等于1时,得到M个全局匹配patch集合,M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
需要说明的是,第N-1帧点云的匹配patch集合中的patch为全局匹配patch。从第N-1帧点云的参考帧的匹配patch集合开始,对第N-2帧到第0帧点云的匹配patch集合中的非全局匹配patch进行过滤。当i等于1时,已完成对第0帧到第N-2帧点云的匹配patch集合中的非全局匹配patch的过滤,第0帧到第N-2帧点云的匹配patch集合中的patch均为全局匹配patch。此时N帧点云中每帧点云的匹配patch集合中的patch均为全局匹配patch,且每帧点云的匹配patch集合中patch的个数相等。由于N帧点云的第i1帧点云的匹配patch集合中的第m个patch与第i2帧点云的匹配patch集合中的第m个patch相匹配,第i1帧点云和第i2帧点云为N帧点云中的点云,且在处理顺序上第i1帧点云和第i2帧点云是相邻的,因此将N帧点云的每帧点云的匹配patch集合中的第m个patch保存在一个全局匹配patch集合中,m=1,2,…,M,其中M为N帧点云中任一点云的匹配patch集合中patch的个数。此时可以得到M个全局匹配patch集合,且每个全局匹配patch集合中包括N个patch,N个patch分别来自于N帧点云。
在一个具体的实施例中,如图8所示,假设上述N=3,即有3帧点云,每帧点云的patch集合中均有6个patch。再假设在3帧点云中第一个进行处理的点云为第0帧点云,将第0帧点云的patch集合中所有的patch均保存至第0帧点云的匹配patch集合中。
在此需要说明的是,第i帧点云的patch集合中的patch[z]表示第i帧点云的patch集合中的第z个patch。对3帧点云进行处理之前,3帧点云中每帧的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。
对第1帧点云的patch集合进行处理时,将第0帧点云作为第1帧点云的参考帧。遍历第0帧点云的匹配patch集合,对第0帧点云中的匹配patch集合中的patch[0]与第1帧点云的patch集合中的未匹配的patch执行匹配操作,确定第0帧点云的匹配patch集合中的patch[0]与第1帧点云的patch集合中的patch[1]匹配,将第1帧点云的patch集合中的patch[1]保存至第1帧点云的匹配patch集合中,并将第1帧点云的patch集合中的patch[1]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[1]的目标索引设置为第0帧点云的匹配patch集合中的patch[0]的索引(比如0);再对第0帧点云的匹配patch集合中的patch[1]与第1帧点云的patch集合中的未匹配的patch执行匹配操作,确定第0帧点云的匹配patch集合中的patch[1]与第1帧点云的patch集合中的patch[0]匹配,将第1帧点云的patch集合中的patch[0]保存至第1帧点云的匹配patch集合中,并将第1帧点云的patch集合中的patch[1]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[1]的目标索引设置为第0帧点云的匹配patch集合中的patch[0]的索引(比如0);以此类推,当遍历完第0帧点云的匹配patch集合,还确定第0帧点云的匹配patch集合中的patch[2]、patch[3]和patch[4]分别与第1帧点云的patch集合中的patch[2]、patch[3]和patch[4]匹配,第0帧点云的匹配patch集合中的每个patch均与第1帧点云的匹配patch集合中的patch[5]不相匹配,将第1帧点云的patch集合中的patch[2]、patch[3]和patch[4]保存至第1帧点云的匹配patch集合中,,并将第1帧点云的patch集合中的patch[2]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[2]的目标索引设置为第0帧点云的匹配patch集合中的patch[2]的索引(比如2);将第1帧点云的patch集合中的patch[3]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[3]的目标索引设置为第0帧点云的匹配patch集合中的patch[3]的索引(比如3);并将第1帧点云的patch集合中的patch[4]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[4]的目标索引设置为第0帧点云的匹配patch集合中的patch[4]的索引(比如4)。此时第1帧点云的匹配patch集合中包括5个patch,分别为patch[0]、patch[1]、patch[2]、patch[3]和patch[4]。
对第2帧点云的patch集合进行处理时,将第1帧点云作为第2帧点云的参考帧。遍历第1帧点云的匹配patch集合,对第1帧点云中的匹配patch集合中的patch[0]与第2帧点云的patch集合中的每个patch执行匹配操作,确定第1帧点云的匹配patch集合中的patch[0]与第2帧点云的patch集合中的patch[0]匹配,将第2帧点云的patch集合中的patch[0]保存至第2帧点云的匹配patch集合中,并将第2帧点云的patch集合中的patch[0]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[0]的目标索引设置为第1帧点云的匹配patch集合中的patch[0]的索引(比如0);再对第1帧点云中的匹配patch集合中的patch[1]与第2帧点云的patch集合中的未匹配的patch执行匹配操作,确定第1帧点云的匹配patch集合中的patch[1]与第2帧点云的patch集合中未匹配的patch均不相匹配,继续对第1帧点云的匹配patch集合中的patch[2]与第2帧点云的patch集合中未匹配的patch执行匹配操作,确定第1帧点云的匹配patch集合中的patch[2]与第2帧点云的patch集合中的patch[3]相匹配,将第2帧点云的patch集合中的patch[3]保存至第2帧点云的匹配patch集合中,并将第2帧点云的patch集合中的patch[3]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[3]的目标索引设置为第1帧点云的匹配patch集合中的patch[2]的索引(比如2);以此类推,当遍历完第1帧点云的匹配patch集合,还确定第1帧点云的匹配patch集合中的patch[3]和patch[4]分别与第2帧点云的patch集合中的patch[4]和patch[5]匹配,将第2帧点云的patch集合中的patch[4]和patch[5]保存至第2帧点云的匹配patch集合中,并将第2帧点云的patch集合中的patch[4]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[4]的目标索引设置为第1帧点云的匹配patch集合中的patch[3]的索引(比如3),将第2帧点云的patch集合中的patch[5]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[5]的目标索引设置为第1帧点云的匹配patch集合中的patch[4]的索引(比如4)。此时第2帧点云的匹配patch集合中包括4个patch,分别为patch[0]、patch[3]、patch[4]和patch[5]。
第0帧的匹配patch集合为:matchPatch[0]:patch[0],patch[1],patch[2],patch[3],patch[4],patch[5];
第1帧的匹配patch集合为:matchPatch[1]:patch[0],patch[1],patch[2],patch[3],patch[4];
第2帧的匹配patch集合为:matchPatch[2]:patch[0],patch[3],patch[4],patch[5]。
按照处理的顺序的逆序,对3帧点云的匹配patch集合中的patch进行过滤。需要说明的是,第2帧点云的匹配patch集合中的每个patch均为全局匹配patch。
遍历第1帧点云的匹配patch集合,从第1帧点云的匹配patch集合中寻找与第2帧的匹配patch集合中patch相匹配的patch。具体方法是判断第1帧点云的匹配patch集合中的每个patch的索引与第2帧点云的匹配patch集合中patch的目标索引是否相同。其中,第1帧点云的匹配patch集合中的patch[0]、patch[1]、patch[2]、patch[3]和patch[4]的索引分别为0、1、2、3和4;第2帧点云中匹配patch集合中的patch[0]、patch[3]、patch[4]和patch[5]的目标索引分别为0,2,3和4。遍历完第1帧点云的匹配patch集合,确定第1帧点云的匹配patch集合中的patch[1]的索引(即1)与第2点云的匹配patch集合中所有patch的目标索引均不相等,因此将patch[0]从第1帧点云的匹配patch集合中删除,此时第1帧点云的匹配patch集合包括patch[0],patch[2],patch[3]和patch[4],均为全局匹配patch。
遍历第0帧的匹配patch集合,从第0帧点云的匹配patch集合中寻找与第1帧的匹配patch集合中patch相匹配的patch。具体方法是判断第0帧点云的匹配patch集合中的每个patch的索引与第1帧点云的匹配patch集合中patch的目标索引是否相同。其中,第0帧点云的匹配patch集合中的patch[0]、patch[1]、patch[2]、patch[3]、patch[4]和patch[5]的索引分别为0、1、2、3、4和5;第1帧点云中匹配patch集合中的patch[0]、patch[2]、patch[3]和patch[4]的目标索引分为1,2,3和4。遍历完第0帧点云的匹配patch集合,确定第0帧点云的匹配patch集合中的patch[0]的索引(即0)和patch[5]的索引(即5)与第1点云的匹配patch集合中所有patch的目标索引均不相等,因此将patch[0]和patch[5]从第0帧点云的匹配patch集合中删除,此时第0帧点云的匹配patch集合包括patch[1],patch[2],patch[3]和patch[4]均为全局匹配patch。
将3帧点云的匹配patch集合中的非全局匹配patch过滤后,得到的3帧匹配patch集合中的patch分别为:
第0帧的匹配patch集合为:matchPatch[0]:patch[1],patch[2],patch[3],patch[4];
第1帧的匹配patch集合为:matchPatch[1]:patch[0],patch[2],patch[3],patch[4];
第2帧的匹配patch集合为:matchPatch[2]:patch[0],patch[3],patch[4],patch[5]。
根据3帧点云的匹配patch集合得到全局匹配patch集合为:
全局匹配patch集合0:frame[0].patch[1], frame[1].patch[0], frame[2].patch[0]
全局匹配patch集合1:frame[0].patch[2], frame[1].patch[2], frame[2].patch[3]
全局匹配patch集合2:frame[0].patch[3], frame[1].patch[3], frame[2].patch[4]
全局匹配patch集合3:frame[0].patch[4], frame[1].patch[4], frame[2].patch[5]
其中,frame[i].patch[z]表示第i帧点云的patch集合中的第z个patch。上述4个全局匹配patch集合中的第m个全局匹配patch集合包括3帧点云中每帧点云的匹配patch集合中的第m个patch。
可以看出,在本申请实施例的方案中,通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云中每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,从而提高后续对占用图、深度图和纹理图的编码效率。
在另一个实施例中,本申请实施例还提供另一种全局匹配patch的获取方法,包括:
获取N帧点云的patch集合,N为大于或等于2的整数;对N帧点云中的第j帧点云的参考帧的匹配patch集合中的第t2个patch与第j帧点云的patch集合中的第w2个patch执行匹配操作;第w2个patch为第j帧点云的patch集合中未匹配的patch;当第t2个patch与第j帧点云的patch集合中未匹配的patch均不相匹配时,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除;W帧点云为在对第j帧点云的参考帧进行处理之前N帧点云中已处理的点云;并将第t2个patch从第j帧点云的参考帧的匹配patch集合中删除;当N帧点云处理完后,得到M个全局匹配patch集合,M个全局匹配patch集合中一个集合为跨N帧点云中具有匹配关系的patch的集合。通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云中的每帧点云分配相同或者相似的位置,使得产生的每一帧占用图中的全局匹配patch在空间上具有一致性,在后续编码时提高对占用图、深度图和纹理图的编码效率。
需要说明的是,W帧点云包括第0帧点云到第j-2帧点云,其中,第0帧点云为N帧点云中第一个进行处理的点云,第j-2帧点云为N帧点云中第j-1个进行处理的点云。
其中,第j-2帧点云为第j帧点云的参考帧的参考帧,即第j-2帧点云为第j-1帧点云的参考帧,第j-1帧点云为第j帧点云的参考帧。第j-2帧点云、第j-1帧点云和第j帧点云为N帧点云中连续处理的3帧点云,且第j-2帧点云在第j-1帧点云之前处理,j-1帧点云在第j帧点云之前处理。
其中,在对N帧点云的匹配patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识设置为第一标识(比如false或0)和/或将每个patch的目标索引设置为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第j帧点云的patch集合中未匹配的patch是指在第j帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。
在一个可能的实施例中,当第t2个patch与第w2个patch相匹配时,将第t2个patch保存至第j帧点云的匹配patch集合中,并将第w2个patch的目标索引设置为第w2个patch的索引,和/或将第w2个patch的状态标识设置为第二标识(比如ture或1),该第二标识用于指示patch的为匹配patch。其中,第w2个patch的索引为第w2个patch在其所属的patch集合中的位置索引。
假设第j帧点云的参考帧为第j-1帧,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除具体是:根据第t2个patch的目标索引在第j-1帧点云的参考帧点云的匹配patch集合中寻找第t2’个patch,第t2个patch的目标索引为第t2’个patch的索引,将该第t2’个patch从第j-1帧点云的参考帧的匹配patch集合中删除,该第j-1帧点云的参考帧可为第j-2帧点云;然后再根据第t2’个patch的目标索引在第j-1帧点云的参考帧的参考帧的匹配patch集合中寻找索引为t2’个patch的目标索引的patch,并将该patch从第j-1帧点云的参考帧的参考帧的匹配patch集合中删除,其中,第j-1帧点云的参考帧的参考帧为第j-3帧点云。依次类推,直至将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除。
举例说明,如图9所示,假设上述N=4,即有4帧点云,每帧点云的patch集合中均有6个patch。再假设在4帧点云中第一个进行处理的点云为第0帧点云,将第0帧点云的patch集合中所有的patch均保存至第0帧点云的匹配patch集合中,此时第0帧点云的匹配patch集合中包括patch[0],patch[1],patch[2],patch[3],patch[4]和patch[5],该5个patch的索引分别为0,1, 2,3,4和5。
需要说明的是,对4帧点云进行处理之前,4帧点云中每帧的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。
对第1帧点云的patch集合进行处理时,将第0帧点云作为第1帧点云的参考帧。遍历第0帧点云的匹配patch集合,对第0帧点云的匹配patch集合中的patch[0]与第1帧点云的patch集合中未patch执行匹配操作,确定第0帧点云的匹配patch集合中的patch[0]与第1帧点云的patch集合中patch[1]相匹配,则将第1帧点云的patch集合中的patch[1]保存至第1点云的匹配patch集合中,并将第1帧点云的patch集合中的patch[1]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[1]的目标索引设置为第0帧点云的匹配patch集合中的patch[0]的索引(比如0);再对第0帧点云的匹配patch集合中的patch[1]与第1帧点云的patch集合中未匹配patch执行匹配操作,确定第0帧点云的匹配patch集合中的patch[1]与第1帧点云的patch集合中patch[0]相匹配,则将第1帧点云的patch集合中的patch[0]保存至第1点云的匹配patch集合中,并将第1帧点云的patch集合中的patch[0]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[0]的目标索引设置为第0帧点云的匹配patch集合中的patch[1]的索引(比如1);以此类推,当遍历完第0帧点云的匹配patch集合,还确定第0帧点云的匹配patch集合中的patch[2]、patch[3]和patch[4]分别与第1帧点云的patch集合中的patch[2]、patch[3]和patch[4]相匹配,将第1帧点云的patch集合中的patch[2]、patch[3]和patch[4]保存至第1点云的匹配patch集合中,并将第1帧点云的patch集合中的patch[2]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[2]的目标索引设置为第0帧点云的匹配patch集合中的patch[2]的索引(比如2);将第1帧点云的patch集合中的patch[3]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[3]的目标索引设置为第0帧点云的匹配patch集合中的patch[3]的索引(比如3);将第1帧点云的patch集合中的patch[4]的状态标识设置为第二标识(例如ture或1)和/或将第1帧点云的patch集合中的patch[4]的目标索引设置为第0帧点云的匹配patch集合中的patch[4]的索引(比如4);确定第0帧点云的匹配patch集合中的patch[5]与第1帧点云的patch集合中的patch均不相匹配,则将patch[5]从第0帧点云的匹配patch集合中删除,此时第0帧点云的匹配patch集合中包括patch[0],patch[1],patch[2],patch[3]和patch[4];第1帧点云的匹配patch集合中包括patch[1],patch[0],patch[2],patch[3]和patch[4]。
对第2帧点云的patch集合进行处理时,将第1帧点云作为第2帧点云的参考帧。遍历第1帧点云的匹配patch集合,对第1帧点云的匹配patch集合中的patch[1]与第2帧点云的patch集合中每个patch执行匹配操作,确定第1帧点云的匹配patch集合中的patch[1]与第2帧点云的patch集合中的patch均不相匹配,将第1帧点云的匹配patch集合中的patch[1]从第1帧点云的匹配patch集合中删除,由于与第1帧点云的匹配patch集合中的patch[1]的目标索引为第0帧点云的匹配patch集合中的patch[0]的索引,因此将第0帧点云的匹配patch集合中的patch[0]从第0帧点云的匹配patch集合中删除。再对第1帧点云的匹配patch集合中的patch[0]与第2帧点云的patch集合中未匹配patch执行匹配操作,确定第1帧点云的匹配patch集合中的patch[0]与第2帧点云的patch集合中patch[0]相匹配,则将第2帧点云的patch集合中的patch[0]保存至第2点云的匹配patch集合中,并将第2帧点云的patch集合中的patch[0]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[0]的目标索引设置为第1帧点云的匹配patch集合中的patch[0]的索引(比如0);以此类推,当遍历完第1帧点云的匹配patch集合,还确定第1帧点云的匹配patch集合中的patch[2]、patch[3]和patch[4]分别与第2帧点云的patch集合中的patch[3]、patch[4]和patch[5]相匹配,将第2帧点云的patch集合中的patch[3]、patch[4]和patch[5]保存至第2点云的匹配patch集合中,并将第2帧点云的patch集合中的patch[3]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[3]的目标索引设置为第1帧点云的匹配patch集合中的patch[2]的索引(比如2),将第2帧点云的patch集合中的patch[4]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[4]的目标索引设置为第1帧点云的匹配patch集合中的patch[3]的索引(比如3),将第2帧点云的patch集合中的patch[5]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[5]的目标索引设置为第1帧点云的匹配patch集合中的patch[4]的索引(比如4);此时第0帧点云的匹配patch集合中包括patch[1],patch[2],patch[3]和patch[4];第1帧点云的匹配patch集合中包括patch[0],patch[2],patch[3]和patch[4],第2帧点云的匹配patch集合中包括patch[0],patch[3],patch[4]和patch[5]。
对第3帧点云的patch集合进行处理时,将第2帧点云作为第3帧点云的参考帧。遍历第2帧点云的匹配patch集合,对第2帧点云的匹配patch集合中的patch[0]与第3帧点云的patch集合中每个patch执行匹配操作,确定第2帧点云的匹配patch集合中的patch[0]与第3帧点云的patch集合中patch[2]相匹配,则将第3帧点云的patch集合中的patch[2]保存至第3点云的匹配patch集合中,将第3帧点云的patch集合中的patch[2]的状态标识设置为第二标识(例如ture或1)和/或将第2帧点云的patch集合中的patch[2]的目标索引设置为第2帧点云的匹配patch集合中的patch[0]的索引(比如0);再对第2帧点云的匹配patch集合中的patch[3]与第3帧点云的patch集合中未匹配patch执行匹配操作,确定第2帧点云的匹配patch集合中的patch[3]与第3帧点云的patch集合中patch[4]相匹配,则将第3帧点云的patch集合中的patch[4]保存至第3点云的匹配patch集合中,将第3帧点云的patch集合中的patch[4]的状态标识设置为第二标识(例如ture或1)和/或将第3帧点云的patch集合中的patch[4]的目标索引设置为第2帧点云的匹配patch集合中的patch[3]的索引(比如3);以此类推,当遍历完第0帧点云的匹配patch集合,还确定第2帧点云的匹配patch集合中的patch[4]与第3帧点云的patch集合中的patch[5]相匹配,将第3帧点云的patch集合中的patch[5]保存至第3点云的匹配patch集合中,将第3帧点云的patch集合中的patch[5]的状态标识设置为第二标识(例如ture或1)和/或将第3帧点云的patch集合中的patch[5]的目标索引设置为第2帧点云的匹配patch集合中的patch[4]的索引(比如4);确定第2帧点云的匹配patch集合中的patch[5]与第3帧点云的patch集合中的未匹配的patch均不相匹配,则将第2帧点云的匹配patch集合中的patch[5]从第2帧点云的匹配patch集合中删除,由于第2帧点云的匹配patch集合中的patch[5]的目标索引为第1帧点云的匹配patch集合中的patch[4]的索引,第1帧点云的匹配patch集合中的patch[4]的目标索引为第0帧点云的匹配patch集合中的patch[4]的索引,因此将第0帧点云的匹配patch集合中的patch[4]、第1帧点云的匹配patch集合中的patch[4]和第2帧点云的匹配patch集合中的patch[5]分别从对应的匹配patch集合中删除。此时第0帧点云的匹配patch集合中包括patch[1],patch[2]和patch[3];第1帧点云的匹配patch集合中包括patch[0],patch[2]和patch[3];第2帧点云的匹配patch集合中包括patch[0],patch[3]和patch[4];第3帧点云的匹配patch集合中包括patch[2],patch[4]和patch[5]。
此时,4帧点云的匹配patch集合中的匹配patch集合中存储的patch均为全局匹配patch,而且patch存放的顺序是一一对应的。一一对应的含义为第i1帧点云的匹配集合中的第z个patch与第i2帧点云的匹配patch集合中的第z个patch具有匹配关系,i1=1,2,3,4,i2=1,2,3,4且i与j不相等。
基于4帧点云的匹配patch集合中的patch可以得到3个全局匹配patch集合,该3个全局匹配patch集合可以表示为:
全局匹配patch集合0:frame[0].patch[1], frame[1].patch[0], frame[2].patch[0], frame[3].patch[2]
全局匹配patch集合1:frame[0].patch[2], frame[1].patch[2], frame[2].patch[3], frame[3].patch[4]
全局匹配patch集合2:frame[0].patch[3], frame[1].patch[3], frame[2].patch[4], frame[3].patch[5]
其中,frame[i].patch[z]表示第i帧点云的patch集合中的第z个patch。上述3个全局匹配patch集合中的第m个全局匹配patch集合包括3帧点云中每帧点云的匹配patch集合中的第m个patch,此时m等于0,1,2。
可以看出,在本申请实施例的方案中,通过获取N帧点云的全局匹配patch后,在打包(packing)时,优先打包每一帧中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云中每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,从而提高后续对占用图、深度图和纹理图的编码效率。
参见图10、图10为本申请实施例提供的一种全局patch的获取方法的流程示意图。如图10所示,该方法包括:
S1001、获取N帧点云的patch集合;N为大于或者等于2的整数。
可选的,上述N帧点云可以是一个帧组(group of frame, GOF),或者该N帧点云为GOF中的在时间上连续N帧点云,当然本申请实施例不限于此。
S1002、对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合。
其中,sq个候选全局匹配patch集合中的至少一个候选全局匹配patch集合为跨N1帧点云中具有匹配关系的patch的集合;N1帧点云为N帧点云中的全部帧或者部分帧;q={1,2,…,N-1}。
其中,在对N帧点云的patch集合中的patch进行处理之前,N帧点云中的每帧点云的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,第q帧点云的patch集合中未匹配的patch是指在第q帧点云的patch集合中状态标识为第一标识的patch或者是目标索引为缺省值的patch。
需要说明的是,在N帧点云中,第一个进行处理的点云为N帧点云中的任一帧,例如第0帧。对N帧点云中第一个进行处理的点云具体是将该帧点云的patch集合中所有的patch分别存储在s0个候选全局匹配pathc集合中,即该帧点云的patch集合中有s0个patch。
在一个可能的实施例中对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合,包括:
遍历sq-1个候选全局匹配patch集合,对第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,第w3个patch为第q帧点云的patch集合中未匹配的patch;k的取值范围为0到sq-1-1;
当第t3个patch与第w3个patch相匹配时,将第w3个patch保存至第k个候选全局匹配patch集合中,第k个候选全局匹配patch集合包含于sq个候选全局匹配patch集合中,第t3个patch为一个或多个patch中的任一个。
当第t3个patch与第w3个patch匹配时,将第w3个patch的状态标识设置为第二标识(比如ture或1),该第二标识用于表示第w3个patch为匹配patch;和/或将第w3个patch的目标索引设置为第t3个patch的索引。
需要说明的是,第k个候选全局匹配patch集合中的一个patch为第k个候选全局匹配patch集合中的任一个patch,例如:一个patch可以为在处理第q-1帧点云的patch集合时更新到第k个候选全局匹配patch集合中的patch;第q-1帧点云在第q帧点云之前处理;第k个候选全局匹配patch集合中的多个patch可以为第k个候选全局匹配patch集合中的部分或者全部patch。
在一个可能的实施例中,为了保留非全局匹配patch,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,对第k个候选全局匹配patch集合中patch不做处理。此时sq=sq-1其中,保留非全局匹配patch的目的是为了在打包时对于N帧点云中每帧点云的非全局匹配patch分配相同或相似的位置,使得产生的每帧点云中的非全局匹配patch在空间上也具有一致性,进而也可以提高后续对占用图、深度图和纹理图进行编码的效率。
在一个可能的实施例中,为了节省硬件的存储空间和为了直接得到全局匹配patch,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,清空或删除第k个候选全局匹配patch集合。全局匹配patch为跨N帧点云中具有匹配关系的patch。当清空第k个候选全局匹配patch集合时,sq=sq-1;当删除第k个候选全局匹配patch集合中,sq<sq-1
在一个可能的实施例中,在对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作后,若第q帧点云的patch集合中还存在d个未匹配的patch,则新增d个候选全局匹配patch集合,将d个patch分别保存至新增的d个候选全局匹配patch集合中;其中,sq个候选全局匹配patch集合包括新增的d个候选全局匹配patch集合和sq-1个候选全局匹配patch集合。此时sq>sq-1
当q=N-1时,对sN-2个候选全局匹配patch集合中的patch与第N-1帧点云的patch集合中未匹配的patch执行匹配操作,以得到sN-1个候选全局匹配patch集合。
S1003、当对N帧点云处理后,基于sN-1个候选全局匹配patch集合获取M个全局匹配patch集合。
需要说明的是,在按照步骤S1002所描sN-1述的相关方式对N帧点云进行处理后,即可得到sN-1个候选全局匹配patch集合。该sN-1个候选全局匹配patch集合中,部分候选全局匹配patch集合中的patch为非全局匹配patch,部分候选全局匹配patch集合中的patch为全局匹配patch。
在一个可能的实施例中,基于sN-1个候选全局匹配patch集合得到M个全局匹配patch集合,包括:确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合;或者,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
M个全局匹配patch集合包括跨N帧点云中具有匹配关系的patch的集合和跨N2帧点云中具有匹配关系的patch的集合。
需要说明的是,在遍历sq-1个候选全局匹配patch集合,对第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,删除第k个候选全局匹配patch集合。在处理完N帧点云的patch集合后,得到的sN-1个候选全局匹配patch集合中的patch均为全局匹配patch,则可直接确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合。按照第三方面其他的方法处理完N帧点云后,得到的sN-1个候选全局匹配patch集合中的patch包括全局匹配patch和非全局匹配patch,此时需要通过设置第一阈值,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
在一个具体的实施例中,如图11a所示,N=3即有3帧点云,分别为第0帧点云、第1帧电源和第2帧点云。该3帧点云中的每帧点云的patch集合中均包括8个patch。首先将第0帧点云的patch数据中的8个patch分别保存至8个候选全局匹配patch集合中,此时8个候选全局匹配patch集合(global patch set)保存了以下元素:
globalpatchset[0]:globalpatch<0,0>
globalpatchset[1]:globalpatch<0,1>
globalpatchset[2]:globalpatch<0,2>
globalpatchset[3]:globalpatch<0,3>
globalpatchset[4]:globalpatch<0,4>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
需要指出的是, 8个候选全局匹配patch集合分别为globalpatchset[0]、globalpatchset[1]、globalpatchset[2]、globalpatchset[3]、globalpatchset[4]、globalpatchset[5]、globalpatchset[6]和globalpatchset[7]。该8个候选全局匹配patch集合中存储的元素为patch。
需要说明的是,globalpatch<i,z>表示第i帧点云的patch集合中第z个patch。比如globalpatch<2,4>表示第2帧点云的patch集合中的第4个patch,globalpatch<1,0>表示第1帧点云的patch集合中的第0个patch。对3帧点云进行处理之前,3帧点云中每帧的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。
然后对8个候选全局匹配patch集合中的每个候选全局匹配patch集合中的patch与第1帧点云的patch集合中的未匹配的patch执行匹配操作;如图11a所示,确定第0个候选全局匹配patch集合中的globalpatch<0,0>与globalpatch<1,1>相匹配,将globalpatch<1,1>保存至上述第0个候选全局匹配patch集合中,并将globalpatch<1,1>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,1>的目标索引设置为globalpatch<0,0>的索引(比如0);确定第0个候选全局匹配patch集合中的globalpatch<0,1>与globalpatch<1,0>相匹配,将globalpatch<1,0>保存至上述第1个候选全局匹配patch集合中,并将globalpatch<1,0>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,0>的目标索引设置为globalpatch<0,1>的索引(比如1);确定第2个候选全局匹配patch集合中的globalpatch<0,2>与globalpatch<1,2>相匹配,将globalpatch<1,2>保存至上述第2个候选全局匹配patch集合中,并将globalpatch<1,2>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,2>的目标索引设置为globalpatch<0,2>的索引(比如2);确定第3个候选全局匹配patch集合中的globalpatch<0,3>与globalpatch<1,3>相匹配,将globalpatch<1,3>保存至上述第3个候选全局匹配patch集合中,并将globalpatch<1,3>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,3>的目标索引设置为globalpatch<0,3>的索引(比如3);确定第4个候选全局匹配patch集合中的globalpatch<0,4>与globalpatch<1,1>相匹配,将globalpatch<1,1>保存至上述第4个候选全局匹配patch集合中,并将globalpatch<1,4>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,4>的目标索引设置为globalpatch<0,4>的索引(比如4)。确定第5个候选全局匹配patch集合中的globalpatch<0,5>、第5个候选全局匹配patch集合中的globalpatch<0,6>和第7个候选全局匹配patch集合中的globalpatch<0,7>与上述第1帧点云的patch集合中未匹配的patch均不相匹配。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
再对上述8个候选全局匹配patch集合中的每个候选全局匹配patch集合中的patch与上述第2帧点云的patch集合中的每个patch执行匹配操作。如图11a所示,确定第1个候选全局匹配patch集合中的globalpatch<1,0>与globalpatch<2,0>相匹配,将globalpatch<2,0>保存至上述第1个候选全局匹配patch集合中,并将globalpatch<2,0>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,0>的目标索引设置为globalpatch<1,0>的索引(比如0)。确定第2个候选全局匹配patch集合中的globalpatch<1,2>与globalpatch<2,3>相匹配,将globalpatch<2,3>保存至上述第2个候选全局匹配patch集合中,并将globalpatch<2,3>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,3>的目标索引设置为globalpatch<1,2>的索引(比如2)。确定第3个候选全局匹配patch集合中的globalpatch<1,3>与globalpatch<2,4>相匹配,将globalpatch<2,4>保存至上述第3个候选全局匹配patch集合中,并将globalpatch<2,4>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,4>的目标索引设置为globalpatch<1,3>的索引(比如3)。确定第4个候选全局匹配patch集合中的globalpatch<1,4>与globalpatch<2,5>相匹配,将globalpatch<2,5>保存至上述第4个候选全局匹配patch集合中,并将globalpatch<2,5>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,5>的目标索引设置为globalpatch<1,4>的索引(比如4)。第1,5,6,7个候选全局匹配patch集合中的patch均与第2帧点云的patch集合中的patch不相匹配,对第1,5,6,7个候选全局匹配patch集合均不做处理。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
最后再根据第一阈值从候选全局匹配patch集合中确定全局匹配patch集合。假设第一阈值为2时,从以上8个候选全局匹配patch集合中确定全局匹配patch集合。根据第一阈值(2)从8个候选全局匹配patch集合中确定的全局匹配patch集合中为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
其中,globalpatchset[0]为跨2帧点云中具有匹配关系的patch的集合,globalpatchset[1]、globalpatchset[2]、globalpatchset[3]和globalpatchset[4]均为跨3帧点云中具有匹配关系的patch的集合。
假设第一阈值为3时,从以上8个候选全局匹配patch集合中确定全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>。
其中,globalpatchset[1]、globalpatchset[2]、globalpatchset[3]和globalpatchset[4]均为跨3帧点云中具有匹配关系的patch的集合。
在一个实施例中,在对用于分别保存第0帧点云的patch集合中的8个patch的8个候选全局匹配patch集合中的patch分别与第1帧点云集合中patch执行匹配操作的过程中,当存在与第1帧点云的patch集合中的patch均不相匹配的候选全局匹配patch集合时,将该候选全局匹配patch集合清空。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
globalpatchset[5]:空
globalpatchset[6]:空
globalpatchset[7]:空
同理,在8个候选全局匹配patch集合中,当存在与第2帧点云的patch集合中的patch均不相匹配的候选全局匹配patch集时,将该候选全局匹配patch集合清空。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:空
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[5]:空
globalpatchset[6]:空
globalpatchset[7]:空
在从8个候选全局匹配patch集合中确定全局匹配patch集合过程中,将8个候选全局匹配patch集合中非空集合确定为全局匹配patch集合,得到4个全局匹配patch集合,可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>。
在一个实施例中,在对用于分别保存第0帧点云的patch集合中的8个patch的8个候选全局匹配patch集合中的patch分别与第1帧点云集合中patch执行匹配操作的过程中,当存在与第1帧点云的patch集合中的patch均不相匹配的候选全局匹配patch集时,将该候选全局匹配patch集合删除。此时剩下的5个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
再对上述5个候选全局匹配patch集合中的patch与第2帧点云的patch集合中未匹配的patch执行匹配操作,确定第0个候选全局匹配patch集合中的globalpatch<1,1>与第2帧点云的patch集合中未匹配的patch均不相匹配时,将第0个候选全局匹配patch集合删除。此时剩下的4个候选全局匹配patch集合均为全局匹配patch集合。该4个全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>。
在另一个具体的实施例中,如图11b所示,N=3即有3帧点云,分别为第0帧点云、第1帧电源和第2帧点云。该3帧点云中的每帧点云的patch集合均包括8个patch。首先将第0帧点云的patch数据中的8个patch分别保存至8个候选全局匹配patch集合中,此时8个候选全局匹配patch集合(global patch set)保存了以下元素:
globalpatchset[0]:globalpatch<0,0>
globalpatchset[1]:globalpatch<0,1>
globalpatchset[2]:globalpatch<0,2>
globalpatchset[3]:globalpatch<0,3>
globalpatchset[4]:globalpatch<0,4>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
需要说明的是,globalpatch<i,z>表示第i帧点云中patch集合中第z个patch。比如globalpatch<2,4>表示第2帧点云的patch集合中的第4个patch,globalpatch<1,0>表示第1帧点云的patch集合中的第0个patch。
对3帧点云进行处理之前,3帧点云中每帧的patch集合中每个patch的状态标识为第一标识(比如false或0)和/或将每个patch的目标索引为缺省值。然后对8个候选全局匹配patch集合中的每个候选全局匹配patch集合中的patch与第1帧点云的patch集合中的未匹配的patch执行匹配操作;具体参见图11a所示实施例的相关描述得到8个候选全局匹配patch集合。如图11b所示,确定上述8个候选全局匹配patch集合中的全部patch与globalpatch<1,5>、globalpatch<1,6>和globalpatch<1,7>均不相匹配时,新增3个候选全局匹配patch集合,将globalpatch<1,5>、globalpatch<1,6>和globalpatch<1,7>分别保存至新增的3个候选全局匹配patch集合中。此时共得到11个候选全局匹配patch集合,此时11个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>,globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
globalpatchset[8]:globalpatch<1,5>
globalpatchset[9]:globalpatch<1,6>
globalpatchset[10]:globalpatch<1,7>
再对上述11个候选全局匹配patch集合中的每个候选全局匹配patch集合中的patch与第2帧点云的patch集合中的未匹配的patch执行匹配操作。如图11b所示,确定第1个候选全局匹配patch集合中的globalpatch<1,0>与globalpatch<2,0>相匹配,将globalpatch<2,0>保存至上述第1个候选全局匹配patch集合中,并将globalpatch<2,0>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,0>的目标索引设置为globalpatch<1,0>的索引(比如0)。确定第2个候选全局匹配patch集合中的globalpatch<1,2>与globalpatch<2,3>相匹配,将globalpatch<2,3>保存至上述第2个候选全局匹配patch集合中,并将globalpatch<2,3>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,3>的目标索引设置为globalpatch<1,2>的索引(比如2)。确定第3个候选全局匹配patch集合中的globalpatch<1,3>与globalpatch<2,4>相匹配,将globalpatch<2,4>保存至上述第3个候选全局匹配patch集合中,并将globalpatch<2,4>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,4>的目标索引设置为globalpatch<1,3>的索引(比如3)。确定第4个候选全局匹配patch集合中的globalpatch<1,4>与globalpatch<2,5>相匹配,将globalpatch<2,5>保存至上述第4个候选全局匹配patch集合中,并将globalpatch<2,5>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,5>的目标索引设置为globalpatch<1,4>的索引(比如4)。确定第9个候选全局匹配patch集合中的globalpatch<1,6>与globalpatch<2,1>相匹配,将globalpatch<2,1>保存至上述第9个候选全局匹配patch集合中,并将globalpatch<2,1>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,1>的目标索引设置为globalpatch<1,6>的索引(比如6)。确定第10个候选全局匹配patch集合中的globalpatch<1,7>与globalpatch<2,6>相匹配,将globalpatch<2,6>保存至上述第10个候选全局匹配patch集合中,并将globalpatch<2,6>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,6>的目标索引设置为globalpatch<1,7>的索引(比如7)。第1,5,6,7,8个候选全局匹配patch集合中的patch均与第2帧点云的patch集合中的未匹配的patch均不相匹配,对第1,5,6,7个候选全局匹配patch集合均不做处理。确定globalpatch<2,7>与上述11个候选全局匹配patch集合中全部patch均不相匹配时,新增1个候选全局匹配patch集合,将globalpatch<2,7>保存至新的候选全局匹配patch集合,此时共得到12个候选全局匹配patch集合,该12个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
globalpatchset[8]:globalpatch<1,5>
globalpatchset[9]:globalpatch<1,6>,globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>,globalpatch<2,6>
globalpatchset[11]:globalpatch<2,7>
最后再根据第一阈值从以上12个候选全局匹配patch集合中确定全局匹配patch集合。假设第一阈值为2时,从以上12个候选全局匹配patch集合中确定全局匹配patch集合。根据第一阈值(2)从12个候选全局匹配patch集合中确定得到7个全局匹配patch集合,该7个全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[9]:globalpatch<1,6>,globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>,globalpatch<2,6>
其中,该7个全局匹配patch集合中,globalpatchset[0]、globalpatchset[9]和globalpatchset[10]为跨2帧点云中具有匹配关系的集合,globalpatchset[1]、globalpatchset[2]、globalpatchset[3]和globalpatchset[4]中的patch跨3帧点云中具有匹配关系的集合。
假设第一阈值为3时,从以上12个候选全局匹配patch集合中确定全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
在一个可能的实施例中,在将用于分别保存在对第0帧点云的patch集合中的8个patch的8个候选全局匹配patch集合中的patch分别与第1帧点云集合中patch执行匹配操作的过程中,当存在与第1帧点云的patch集合中未匹配的patch均不相匹配的候选全局匹配patch集合时,将该候选全局匹配patch集合清空。此时得到11个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
globalpatchset[5]:空
globalpatchset[6]:空
globalpatchset[7]:空
globalpatchset[8]:globalpatch<1,5>
globalpatchset[9]:globalpatch<1,6>
globalpatchset[10]:globalpatch<1,7>
同理,在上述11个候选全局匹配patch集合中,当存在与第2帧点云的patch集合中未匹配的patch均不相匹配的候选全局匹配patch集时,将该候选全局匹配patch集合清空。此时得到的12个候选全局匹配patch集合可表示为:
globalpatchset[0]:空
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[5]:空
globalpatchset[6]:空
globalpatchset[7]:空
globalpatchset[8]:空
globalpatchset[9]:globalpatch<1,6>,globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>,globalpatch<2,6>
globalpatchset[11]:globalpatch<2,7>
再根据第一阈值从以上12个候选全局匹配patch集合中确定全局匹配patch集合。假设第一阈值为2时,可根据第一阈值(2)从12个候选全局匹配patch集合中确定6个全局匹配patch集合,该6个全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[9]:globalpatch<1,6>,globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>,globalpatch<2,6>
假设第一阈值为3时,可根据第一阈值(3)从12个候选全局匹配patch集合中确定4个全局匹配patch集合,该4个全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
在一个可能的实施例中,在将用于分别保存在对第0帧点云的patch集合中的8个patch的8个候选全局匹配patch集合中的patch分别与第1帧点云集合中patch执行匹配操作的过程中,当存在与第1帧点云的patch集合中的patch均不相匹配的候选全局匹配patch集时,将该候选全局匹配patch集合删除。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>
globalpatchset[8]:globalpatch<1,5>
globalpatchset[9]:globalpatch<1,6>
globalpatchset[10]:globalpatch<1,7>
再对上述8个候选全局匹配patch集合中的patch与第2帧点云的patch集合中未匹配的patch执行匹配操作,确定集合globalpatchset[0]中的globalpatch<1,1>和globalpatchset[8]中的globalpatch<1,5>第与第2帧点云的patch集合中未匹配的patch均不相匹配时,将集合globalpatchset[0]和globalpatchset[8]删除。此时得到的7个候选全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[9]:globalpatch<1,6>, globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>, globalpatch<2,6>
globalpatchset[11]:globalpatch<2,7>
再根据第一阈值从以上7个候选全局匹配patch集合中确定全局匹配patch集合。假设第一阈值为2时,可根据第一阈值(2)从7个候选全局匹配patch集合中确定6个全局匹配patch集合,该6个全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
globalpatchset[9]:globalpatch<1,6>,globalpatch<2,1>
globalpatchset[10]:globalpatch<1,7>,globalpatch<2,6>
其中,集合globalpatchset[1]、globalpatchset[2]、globalpatchset[3]和globalpatchset[4]均为跨3帧点云中具有匹配关系的patch的集合;集合globalpatchset[9]和globalpatchset[10]均为跨2帧点云中具有匹配关系的patch的集合。
假设第一阈值为3时,可根据第一阈值(3)从7个候选全局匹配patch集合中确定4个全局匹配patch集合,该4个全局匹配patch集合可表示为:
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,0>, globalpatch<2,0>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1,2>, globalpatch<2,3>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,3>, globalpatch<2,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,4>, globalpatch<2,5>
此时该4个集合均为跨3帧点云中具有匹配关系的patch的集合。
进一步地,假设第q帧点云为上述N帧点云的最后一个进行处理的点云,且完成对第q帧点云的patch集合中的patch与sq-1个候选全局匹配patch集合中的patch的匹配,若第q帧点云的patch集合中仍包含未匹配的patch时,不会新增候选全局匹配patch集合来保存第q帧点云中patch集合中未匹配的patch。
可以看出,通过本申请实施例的方案获取N帧点云的全局匹配patch后,在打包过程中,优先打包每帧点云中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,从而提高后续对占用图、深度图和纹理图的编码效率。
参见图12、图12为本申请实施例提供的一种全局patch的获取方法的流程示意图。如图11所示,该方法包括:
S1201、获取N帧点云的patch集合, N为大于或者等于2的整数。
可选的,上述N帧点云可以是一个帧组(group of frame, GOF),或者该N帧点云为GOF中的在时间上连续N帧点云,当然本申请实施例不限于此。
S1202、从Ng帧点云中选一帧点云作为参考帧;对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合。
其中,Ng帧点云为所述N帧点云中的部分帧或者全部帧;所述Ng-1帧点云为所述Ng帧点云中除了所述参考帧之外的点云;所述候选全局匹配patch集合为跨Ng’帧点云中具有匹配关系的patch集合,所述Sg大于或等于Sg-1,所述Sg和Sg-1分别为经过g次迭代和g-1次迭代得到的候选全局匹配patch集合的个数,所述Ng’帧点云为所述Ng帧点云中的部分帧或者全部。
需要说明的是,进行第一次迭代的点云为N帧点云中的任一帧,比如第0帧。
对第一次进行迭代的点云的处理方式具体是将第一次进行迭代的点云的patch集合中所有的patch分别保存在s0个候选全局匹配pathc集合中,即该帧点云的patch集合中有s0个patch。
其中,在对N帧点云的patch集合中的patch进行处理之前,N帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(例如false或0)和/或将每个patch的目标索引为缺省值。在执行匹配操作时就是根据patch的状态标识是否为第一标识或者该patch的目标索引是否为缺省值来判断其是否为未匹配的patch。换言之,未匹配的patch是指状态标识为第一标识的patch或者是目标索引为缺省值的patch。
对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作之前,将参考帧的patch集合中未匹配的patch分别保存至新增的s个patch候选全局匹配patch集合中,s为参考帧的patch集合中未匹配的patch的个数。
在一个可能的实施例中,对参考帧的patch集合中的未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合包括:
遍历参考帧的patch集合,对参考帧的patch集合中的第w4个patch与第p帧点云的patch集合中第t4个patch执行匹配操作,第t4个patch为第p帧点云的patch集合中未匹配的patch;第w4个patch为参考帧的patch集合中未匹配的patch;
当第w4个patch与第t4个patch相匹配时,将第t4个patch保存至第w4个patch所属的候选全局匹配patch集合中;Sg个候选全局匹配patch集合包括第w4个patch所属的候选全局匹配patch集合;其中,第p帧点云为Ng-1帧点云中的全部或部分帧中的一帧点云。
在一个可能的实施例中,从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,包括:
确定Sg个候选全局匹配patch集合中patch的数量大于或等于第二阈值的候选全局匹配patch集合为M个全局匹配patch集合。
需要说明的是,由于候选全局匹配patch集合中的patch包括跨Ni帧点云中具有匹配关系的patch或者跨Ng帧点云的部分帧中具有匹配关系的patch,因此Ng’小于或者等于Ng。由于Sg和Sg-1分别为经过i次迭代和i-1次迭代得到的候选全局匹配patch集合的个数,即Si=Si-1+T,其中T为第i次迭代时得到候选全局匹配patch的个数,T大于0,因此,Si大于Si-1
在一个可能的实施例中,在对参考帧的patch集合中的未匹配的patch与Ng-1帧点云的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合的过程中,首先对参考帧的patch集合中未匹配patch与Ng-1帧点云中的部分帧的patch集合中未匹配的patch执行匹配操作,然后再对参考帧的patch集合中未匹配的patch与Ng-1帧点云中未执行匹配操作的点云中的部分帧的patch集合中未匹配的patch执行匹配操作,以此类推,直至对参考帧的patch集合中未匹配的patch与Ng-1帧点云中每帧点云的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合。具体patch匹配过程可参见上述实施例的相关描述,在此不再叙述。
换句话说,将Ng-1帧点云分成若干组,每组中的点云的帧数相同或者不同。再对参考帧点云的patch集合中未匹配的patch与每组中的每帧点云的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合。
在一个可能的实施例中,在进行完第g次迭代处理后,从Ng-1帧点云中选取出W1帧点云,其中,W1帧点云中每帧点云的patch集合均包括未匹配patch。从W1帧点云中选取一帧作为参考帧,然后再按照上述方法对参考帧的patch集合中未匹配的patch与W1-1帧点云的patch集合中未匹配patch执行匹配操作,以得到Sg+1-Sg个候选全局匹配patch集合。其中,W1-1帧点云为W1帧点云中除了参考帧之外的点云。
S1203、从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合。
其中,M个全局匹配patch集合中的至少一个集合为跨N’帧点云中具有匹配关系的patch集合,M为小于或者等于Sg的整数,g的取值范围为1到N-2;N’帧点云为N帧点云中的全部帧或全部帧。
在一个可能的实施例中,从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,包括:
确定Sg个候选全局匹配patch集合中patch的数量大于或等于第二阈值的候选全局匹配patch集合为M个全局匹配patch集合。
在一个具体的实施例中,如图13所示,上述N=3即有3帧点云,分别为第0帧点云、第1帧点云和第2帧点云。该3帧点云中的每帧点云的patch数据均包括8个patch。首先将第0帧点云确定为第一参考帧,然后将第一参考帧的patch集合中的patch保存至8个候选全局匹配patch集合中,即每个候选全局匹配patch集合包括一个patch。此时8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>
globalpatchset[1]:globalpatch<0,1>
globalpatchset[2]:globalpatch<0,2>
globalpatchset[3]:globalpatch<0,3>
globalpatchset[4]:globalpatch<0,4>
globalpatchset[5]:globalpatch<0,5>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
需要说明的是,上述过程为第1次迭代过程,即S1=8。
需要说明的是,globalpatch<i,z>表示第i帧点云的patch集合中第z个patch。比如globalpatch<2,4>表示第2帧点云的patch集合中的第4个patch,globalpatch<1,0>表示第1帧点云的patch集合中的第0个patch。在对3帧点云的patch集合中的patch进行处理之前,3帧点云中每帧点云的patch集合中每个patch的状态标识为第一标识(例如false或0)和/或将每个patch的目标索引为缺省值。
然后对第一参考帧的patch集合中的patch与上述第1帧点云的patch集合中的8个patch和上述第2帧点云的集合中的8个patch执行匹配操作。如图13所示,确定第一参考帧的patch集合中的第0个patch(第0个候选全局匹配ptach集合中的globalpatch<0,0>)与globalpatch<1,0>和globalpatch<2,1>均相匹配,将globalpatch<1,0>和globalpatch<2,1>保存至第0个候选全局匹配patch集合中,并将globalpatch<1,0>和globalpatch<2,1>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,0>和globalpatch<2,1>的目标索引设置为globalpatch<0,0>的索引(比如0);确定第一参考帧的patch集合中的第1个patch(第0个候选全局匹配ptach集合中的globalpatch<0,1>)与globalpatch<1,2>相匹配,将globalpatch<1,2>保存至第1个候选全局匹配patch集合中,并将globalpatch<1,2>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,2>的目标索引设置为globalpatch<0,1>的索引(比如1);确定第一参考帧的patch集合中的第2个patch(第2个候选全局匹配ptach集合中的globalpatch<0,2>)与globalpatch<1,3>和globalpatch<2,0>均相匹配,将globalpatch<1,3>和globalpatch<2,0>保存至第2个候选全局匹配patch集合中,并将globalpatch<1,3>和globalpatch<2,0>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,3>和globalpatch<2,0>的目标索引设置为globalpatch<0,2>的索引(比如2);确定第一参考帧的patch集合中的第3个patch(第3个候选全局匹配ptach集合中的globalpatch<0,3>)与globalpatch<1,4>,则将globalpatch<1,4>保存至第3个候选全局匹配patch集合中,并将globalpatch<1,4>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,4>的目标索引设置为globalpatch<0,3>的索引(比如3);确定第一参考帧的patch集合中的第4个patch(即第4个候选全局匹配ptach集合中的globalpatch<0,4>)与globalpatch<1,6>和globalpatch<2,2>均相匹配,将globalpatch<1,6>和globalpatch<2,2>保存至第4个候选全局匹配patch集合中,并将globalpatch<1,6>和globalpatch<2,2>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,6>和globalpatch<2,2>的目标索引设置为globalpatch<0,4>的索引(比如4);确定第一参考帧的patch集合中的第5个patch(即第5个候选全局匹配ptach集合中的globalpatch<0,5>)与globalpatch<1,7>和globalpatch<2,3>均相匹配,将globalpatch<1,7>和globalpatch<2,3>保存至第5个候选全局匹配patch集合中,并将globalpatch<1,7>和globalpatch<2,3>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<1,7>和globalpatch<2,3>的目标索引设置为globalpatch<0,5>的索引(比如5);确定第一参考帧的patch集合中的第6个patch(即第6个候选全局匹配ptach集合中的globalpatch<0,6>)和第7个patch(第7个候选全局匹配ptach集合中的globalpatch<0,7>)与第1帧点云的patch集合中未匹配的patch和第2帧点云的patch集合中未匹配的patch均不相匹配。
此时,8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,2>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>。
需要说明的是,上述过程为第2次迭代过程,即S2=8。
在一个实施例中,根据第一阈值从上述8个候选全局匹配patch集合中获取多个全局匹配patch集合,其中每个全局匹配patch集合中patch的个数大于或者等于第一阈值。假设第一阈值为2时,从8个候选全局匹配patch集合中的确定的全局匹配patch集合为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,2>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>
其中,第1个候选全局匹配patch集合中的patch和第3个候选全局匹配patch集合中均为跨2帧点云中具有匹配关系的patch的集合;第0个候选全局匹配patch集合中的patch、第2个候选全局匹配patch集合中的patch、第4个候选全局匹配patch集合中的patch和第5个候选全局匹配patch集合均为跨3帧点云中具有匹配关系的patch的集合。
假设第一阈值为3时,根据该第一阈值(3)从8个候选全局匹配patch集合中的确定的全局匹配patch集合为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>。
在一个实施例中,如图14所示,第1帧点云的patch集合和第2帧点云的patch集合中均存在未匹配的patch(可通过patch的状态标识或目标索引来确定patch是否为未匹配的patch,其中灰色块为已匹配的patch,白色块为未匹配的patch),其中,上述第1帧点云的patch集合中未匹配的patch包括globalpatch<1,1>和globalpatch<1,5>,第2帧点云的patch集合中未匹配的patch包括globalpatch<2,4>、globalpatch<2,5>、globalpatch<2,6>和globalpatch<2,7>。然后将上述第1帧点云作为第二参考帧,将第二参考帧的patch集合中的globalpatch<1,1>和globalpatch<1,5>保存至2个新增的候选全局匹配patch集合(第8个候选全局匹配patch集合和第9个候选全局匹配patch集合)中,此时2个新增的候选全局匹配patch集合可表示为: globalpatchset[8]:globalpatch<1,1>
globalpatchset[9]:globalpatch<1,5>
然后对第二参考帧的patch集合中的第1个patch(即第8个候选全局匹配ptach集合中的globalpatch<1,1>)和第二参考帧的patch集合中的第5个patch(即第9个候选全局匹配ptach集合中的globalpatch<1,5>)与第2帧点云的patch集合中未匹配的patch执行匹配操作。此时如图14所示,第8个候选全局匹配patch集合中的globalpatch<1,1>与globalpatch<2,4>相匹配,则将globalpatch<2,4>保存至第8个候选全局匹配patch集合中,并将globalpatch<2,4>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,4>的目标索引设置为globalpatch<1,1>的索引(比如1);第9个候选全局匹配patch集合中的globalpatch<1,5>与globalpatch<2,5>相匹配,则将globalpatch<2,5>保存至第9个候选全局匹配patch集合中,并将globalpatch<2,5>的状态标识设置为第二标识(例如ture或1)和/或将globalpatch<2,5>的目标索引设置为globalpatch<1,5>的索引(比如3)。此时第1帧点云的patch集合中不存在未匹配的patch。
此时第8个候选全局匹配patch集合和第9个候选全局匹配patch集合:
globalpatchset[8]:globalpatch<1,1>, globalpatch<2,4>
globalpatchset[9]:globalpatch<1,5>, globalpatch<2,5>
需要说明的是,上述过程为第3次迭代过程,即S3= S2+2=10,即经过3次迭代过程得到10个候选全局匹配patch集合。10个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,2>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>
globalpatchset[6]:globalpatch<0,6>
globalpatchset[7]:globalpatch<0,7>
globalpatchset[8]:globalpatch<1,1>, globalpatch<2,4>
globalpatchset[9]:globalpatch<1,5>, globalpatch<2,5>
然后再根据第二阈值从上述10个候选全局匹配patch集合中获取多个全局匹配patch集合。具体地,根据上述第二阈值将从上述10个候选全局匹配patch集合中选取出patch个数大于或者等于上述第二阈值的候选全局匹配patch集合,作为上述全局匹配patch集合。
假设上述第二阈值为2时,上述10个候选全局匹配patch集合中的8个候选全局匹配patch集合满足上述条件,该8个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[1]:globalpatch<0,1>, globalpatch<1,2>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[3]:globalpatch<0,3>, globalpatch<1,4>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>
globalpatchset[8]:globalpatch<1,1>, globalpatch<2,4>
globalpatchset[9]:globalpatch<1,5>, globalpatch<2,5>。
实际上,上述8个候选全局匹配patch集合中的第1,3,8,9个候选全局匹配patch集合为均为跨2帧点云中具有匹配关系的patch的集合,保留跨2帧点云中具有匹配关系的patch的集合的目的是使得在进行后续packing时该局部匹配集合中的patch能够分配相同或者相似的空间位置,对后续编码效率有一定的提高。
假设上述上述第二阈值为3时,上述10个候选全局匹配patch集合中的4个候选全局匹配patch集合满足上述条件,该4个候选全局匹配patch集合可表示为:
globalpatchset[0]:globalpatch<0,0>, globalpatch<1,0>, globalpatch<2,1>
globalpatchset[2]:globalpatch<0,2>, globalpatch<1, 3>, globalpatch<2,0>
globalpatchset[4]:globalpatch<0,4>, globalpatch<1,6>, globalpatch<2,2>
globalpatchset[5]:globalpatch<0,5>, globalpatch<1,7>, globalpatch<2,3>
该4个全局匹配patch集合均为跨3帧点云中具有匹配关系的patch的集合。
可以看出,通过本申请实施例的方案获取N帧点云的全局匹配patch后,在打包过程中,优先打包每一帧点云中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,从而提高后续对占用图、深度图和纹理图的编码效率。
在一个可能的实施例中,本申请实施例还提供另一种全局匹配patch的获取方法,包括:
获取N帧点云的匹配patch集合,N为大于或者等于2的整数;每帧点云的匹配patch集合中的一个patch R的边信息包括第一索引和第二索引,第一索引为与当前帧相邻的前一帧的匹配patch集合中与patch R具有匹配关系patch的索引;第二索引为与当前帧相邻的后一帧的匹配patch集合中与patch R具有匹配关系patch的索引;
遍历N-2帧点云的匹配patch集合,判断每帧点云的匹配patch集合中每个patch的第一索引和第二索引中的至少一个为预设值;N-2帧点云为N帧点云中除了第0帧点云和第N-1帧点云之外的点云;
当第x帧点云的匹配patch集合中的第y个patch的第一索引和第二索引中的至少一个等于预设值时,将第0帧至第x-1帧点云的匹配patch集合中与第y个patch具有匹配关系的patch删除,并将第y个patch从第x帧点云的patch集合中删除,以得到全局匹配patch集合;
其中,全局匹配patch集合中的patch均为跨N帧点云中具有匹配关系的patch。
举例说明,如图14所示,假设上述N=4,即有4帧点云,每帧点云的匹配patch集合中包括6个patch,预设值为-1。
需要说明的是,frame[x].matchedPatch[y].preBestMatchedIndex表示在第x帧点云的前一帧点云的匹配patch集合中与第x帧点云的匹配patch集合中第y个patch具有匹配关系的patch的索引,即第x帧点云的匹配patch集合中第y个patch的第一索引;frame[x].matchedPatch[y].nextBestMatchedIndex表示在第x帧点云的后一帧点云的匹配patch集合中与第x帧点云的匹配patch集合中第y个patch具有匹配关系的patch的索引,即第x帧点云的匹配patch集合中第y个patch的第二索引。
当frame[x].matchedPatch[y].preBestMatchedIndex为-1表示在第x帧点云的前一帧点云的匹配patch集合中没有与第x帧点云的匹配patch集合中第y个patch相匹配的patch;当frame[x].matchedPatch[y].nextBestMatchedIndex为-1表示在第x帧点云的前一帧点云的匹配patch集合中没有与第x帧点云的匹配patch集合中第y个patch相匹配的patch。
对于第1帧点云,其前一帧点云为第0帧点云,后一帧点云为第2帧点云。遍历第1帧点云的匹配patch集合,判断frame[1].matchedPatch[y].preBestMatchedIndex和frame[1]. matchedPatch[y].nextBestMatchedIndex的至少一个是否为-1,其中j=1,2,3,4,5;确定frame[1].matchedPatch[1].nextBestMatchedIndex和frame[1].matchedPatch[5].nextBestMatched Index均为-1(即在第2帧点云的匹配patch集合中没有与第1帧点云的匹配patch集合中的第1个patch和第5个patch匹配的patch),由于第0帧点云的匹配patch集合中的第0个patch和第5个patch分别与第1帧点云的匹配patch集合中的第1个patch和第5个patch相匹配,因此将第0帧点云的匹配patch集合中的第0个patch和第5个patch从其匹配patch集合中删除,将第1帧点云的匹配patch集合中的第1个patch和第5个patch从其匹配patch集合中删除。
对于第2帧点云,其前一帧点云为第1帧点云,后一帧点云为第3帧点云。遍历第2帧点云的匹配patch集合,判断frame[2].matchedPatch[y].preBestMatchedIndex和frame[2]. matchedPatch[y].nextBestMatchedIndex中的至少一个是否为-1;确定frame[2].matchedPatch[1].preBestMatchedIndex和frame[2].matchedPatch[2].preBestMatchedIndex均为-1(即在第1帧点云的匹配patch集合中没有与第2帧点云的匹配patch集合中的第1个patch和第2个patch匹配的patch),由于第3帧点云的匹配patch集合中的第0个patch和第3个patch分别与第2帧点云的匹配patch集合中的第1个patch和第2个patch相匹配,因此将第2帧点云的匹配patch集合中的第1个patch和第2个patch从其匹配patch集合中删除,将第3帧点云的匹配patch集合中的第0个patch分和第3个patch从其匹配patch集合中删除。确定frame[2].matchedPatch[5].nextBestMatchedIndex为-1(即在第3帧点云的匹配patch集合中没有与第2帧点云的匹配patch集合中的第5个patch相匹配的patch),由于第0帧点云的匹配patch集合中的第4个patch和第1帧点云的匹配patch集合中的第4个patch均与第2帧点云的匹配patch集合中的第5个patch存在匹配关系,因此将第0帧点云的匹配patch集合中的第4个patch、第1帧点云的匹配patch集合中的第4个patch和第2帧点云的匹配patch集合中的第5个patch分别从其匹配patch集合中删除。
此时第0帧点云的匹配patch集合包括第1个patch、第2个patch和第3个patch;第1帧点云的匹配patch集合包括第0个patch、第2个patch和第3个patch;第2帧点云的匹配patch集合包括第0个patch、第3个patch和第4个patch;第4帧点云的匹配patch集合包括第2个patch、第4个patch和第5个patch。
在一个可能的实施例中,patch R的第一索引为与第t帧点云的匹配patch集合中与patch R具有匹配关系的patch的索引,patch R的第二索引为与第t’帧点云的匹配patch集合中与patch R具有匹配关系的patch的索引,其中patch R为第x帧点云的匹配patch集合中的一个patch,第t帧点云、第x帧点云和第t’帧点云为在时间上连续处理的3帧点云,且第t帧点云在第x帧点云之前处理,第x帧点云在第t’帧点云之前处理。
可以看出,通过本申请实施例的方案获取N帧点云的全局匹配patch后,在打包过程中,优先打包每帧点云中的全局匹配patch,再打包非全局匹配patch,以得到N帧点云的每帧的占用图。由于在打包过程中为N帧点云的每帧点云的全局匹配patch分配相同或相似的位置,使得产生的每一帧占用图中全局匹配patch在空间上具有一致性,从而提高后续对占用图、深度图和纹理图的编码效率。
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对全局匹配patch的获取装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
参见图16,图16为本申请实施例中还提供一种全局匹配patch的获取装置的结构示意图。如图16所示,该获取装置1600包括:
获取单元1601,用于获取N帧点云的patch集合,N大于或等于2的整数;
匹配单元1602,用于对N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,第i帧点云的匹配patch集合包括n个patch,该n个patch中的一个patch与第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系,n为大于或等于0的整数;
确定单元1603,用于根据N帧点云的匹配patch集合确定M个全局匹配patch集合,M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,M为大于0的整数,N1帧点云为N帧点云中的全部或部分帧。
在一个可能的实施例中,M小于或者等于P,P表示N个匹配patch集合中包含匹配patch数量最小的匹配patch集合中patch的个数。
在一个可能的实施例中,匹配单元1602具体用于:遍历第i帧点云的参考帧的匹配patch集合,对参考帧的匹配patch集合中的第t1个patch与第i帧点云的patch集合中第w1个的patch执行匹配操作;当第t1个patch与第w1个patch相匹配时,将第w1个patch保存至第i帧点云的匹配patch集合中;其中,第w1个patch的目标索引为第t1个patch的索引;其中,第w1个patch为第i帧点云的patch集合中未匹配的patch。
在一个可能的实施例中,确定单元1603具体用于:遍历第i帧点云的参考帧的匹配patch集合,判断第t1个patch的索引与第w1个patch的目标索引是否相同;i={N-1,N-2,…,1};
当第t1个patch的索引与第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将第t1个patch从参考帧的匹配patch集合中删除;
当i等于1时,得到M个全局匹配patch集合,M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
需要说明的是,获取单元1601用于执行图6所示实施例的步骤S601的相关内容,匹配单元1602用于执行图6所示实施例的步骤S602的相关内容,确定单元1603用于执行图6所示实施例的步骤S603的相关内容。作为一个示例,该获取装置1600的位置对应于图2中的打包模块102,换言之,获取单元1601、匹配单元1602和确定单元1603的功能可以由图2中的打包模块102来实现。当然本申请不限于此。
参见图17,图17为本申请实施例中还提供一种全局匹配patch的获取装置的结构示意图。如图17所示,该获取装置1700包括:
获取单元1701,用于获取N帧点云的patch集合,N为大于或等于2的整数;
匹配单元1702,用于对N帧点云中的第j帧点云的参考帧的匹配patch集合中的第t2个patch与第j帧点云的patch集合中的第w2个patch执行匹配操作;第w2个patch为第j帧点云的patch集合中未匹配的patch;
删除单元1703,用于当第t2个patch与第j帧点云的patch集合中未匹配的patch均不相匹配时,将W帧点云的匹配patch集合中与第t2个patch具有匹配关系的patch从W帧点云各自匹配patch集合中删除;将第t2个patch从第j帧点云的参考帧的匹配patch集合中删除;
当N帧点云处理完后,得到M个全局匹配patch集合,M个全局匹配patch集合中一个集合为跨N帧点云中具有匹配关系的patch的集合。
在一个可能的实施例中,匹配单元1702还用于:当第t2个patch与第w2个patch相匹配时,将第w2个patch保存至第j帧点云的匹配patch集合中。
需要说明的是,获取单元1701、匹配单元1702和删除单元1703执行图9所示实施例的相关内容。作为一个示例,该获取装置1700的位置对应于图2中的打包模块102,换言之,获取单元1701、匹配单元1702和删除单元1703的功能可以由图2中的打包模块102来实现。当然本申请不限于此。
参见图18,图18为本申请实施例中还提供一种全局匹配patch的获取装置的结构示意图。如图18所示,该获取装置1800包括:
获取单元1801,用于获取N帧点云的patch集合;N为大于或者等于2的整数;
匹配单元1802,用于对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作,以得到sq个候选全局匹配patch集合;sq个候选全局匹配patch集合中的至少一个候选全局匹配patch集合为跨N1帧点云中具有匹配关系的patch的集合;N1帧点云为N帧点云中的全部帧或者部分帧;q={1,2,…,N-1};
确定单元1803,还用于当对N帧点云处理后,基于sN-1个候选全局匹配patch集合得到M个全局匹配patch集合,M个全局匹配patch集合中的一个集合为跨N2帧点云中具有匹配关系的patch的集合,M为小于或等于sN-1的整数,N2帧点云为N帧点云中的部分帧或者全部帧。
在一个可能的实施例中,匹配单元1802具体用于:遍历sq-1个候选全局匹配patch集合,对第k个候选全局匹配patch集合中的一个或多个patch与第q帧点云的patch集合中第w3个patch执行匹配操作,第w3个patch为第q帧点云的patch集合中未匹配的patch;
当第t3个patch与第w3个patch相匹配时,将第w3个patch保存至第k个候选全局匹配patch集合中,第k个候选全局匹配patch集合包含于sq个候选全局匹配patch集合中,第t3个patch为一个或多个patch中的任一个。
在一个可能的实施例中,匹配单元1802还用于:当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,清空第k个候选全局匹配patch集合。
在一个可能的实施例中,匹配单元1802还用于:当第k个候选全局匹配patch集合中一个或多个patch与第q帧点云的patch集合中的未匹配的patch均不相匹配时,删除第k个候选全局匹配patch集合。
在一个可能的实施例中,匹配单元1802还用于:在对sq-1个候选全局匹配patch集合中的patch与第q帧点云的patch集合中未匹配的patch执行匹配操作后,若第q帧点云的patch集合中还存在d个未匹配的patch,则新增d个候选全局匹配patch集合,将d个patch分别保存至新增的d个候选全局匹配patch集合中;其中,sq个候选全局匹配patch集合包括新增的d个候选全局匹配patch集合和sq-1个候选全局匹配patch集合。
在一个可能的实施例中,确定单元1803具体用于:确定sN-1个候选全局匹配patch集合为M个全局匹配patch集合;或者,确定sN-1个候选全局匹配patch集合中patch的数量大于或者等于第一阈值的候选全局匹配patch集合为M个全局匹配patch集合。
需要说明的是,获取单元1801用于执行图10所示实施例的步骤S1001的相关内容,匹配单元1802用于执行图10所示实施例的步骤S1002的相关内容,确定单元1803用于执行图10所示实施例的步骤S1003的相关内容。作为一个示例,该获取装置1800的位置对应于图2中的打包模块102,换言之,获取单元1801、匹配单元1802和确定单元1803的功能可以由图2中的打包模块102来实现。当然本申请不限于此。
参见图19,图19为本申请实施例中还提供一种全局匹配patch的获取装置的结构示意图。如图19所示,该获取装置1900包括:
获取单元1901,用于获取N帧点云的patch集合,N为大于或者等于2的整数;
匹配单元1902,用于从Ng帧点云中选一帧点云作为参考帧;Ng帧点云为N帧点云中的部分帧或者全部帧;对参考帧的patch集合中未匹配的patch与Ng-1帧点云中的全部或部分帧的patch集合中未匹配的patch执行匹配操作,以得到Sg个候选全局匹配patch集合;Ng-1帧点云为Ng帧点云中除了参考帧之外的点云;候选全局匹配patch集合为跨Ng’帧点云中具有匹配关系的patch集合,Sg大于或等于Sg-1,Sg和Sg-1分别为经过g次迭代和g-1次迭代得到的候选全局匹配patch集合的个数,Ng’帧点云为Ng帧点云中的部分帧或者全部;
确定单元1903,用于从Sg个候选全局匹配patch集合中确定M个全局匹配patch集合,M个候选全局匹配patch集合中至少一个全局匹配patch集合为跨N’帧点云中具有匹配关系的patch集合,M为小于或者等于Sg的整数,g的取值范围为1到N-2;N’帧点云为 N帧点云中的部分或者全部。
在一个可能的实施例中,匹配单元1902具有用于:遍历参考帧的patch集合,对参考帧的patch集合中的第w4个patch与第p帧点云的patch集合中第t4个patch执行匹配操作,第t4个patch为第p帧点云的patch集合中未匹配的patch;第w4个patch为参考帧的patch集合中未匹配的patch;
当第w4个patch与第t4个patch相匹配时,将第t4个patch保存至第w4个patch所属的候选全局匹配patch集合中,Sg个候选全局匹配patch集合包括第w4个patch所属的候选全局匹配patch集合;其中,第p帧点云为Ng-1帧点云中的全部或部分帧中的一帧点云。
在一个可能的实施例中,确定单元1903具体用于:确定Sg个候选全局匹配patch集合中patch的数量大于或等于第二阈值的候选全局匹配patch集合为M个全局匹配patch集合。
需要说明的是,获取单元1901用于执行图12所示实施例的步骤S1201的相关内容,匹配单元1902用于执行图12所示实施例的步骤S1202的相关内容,确定单元1903用于执行图12所示实施例的步骤S1203的相关内容。作为一个示例,该获取装置1900的位置对应于图2中的打包模块102,换言之,获取单元1901、匹配单元1902和确定单元1903的功能可以由图2中的打包模块102来实现。当然本申请不限于此。
参见图20,图20为本申请实施例中还提供一种全局匹配patch的获取装置的结构示意图。如图20所示,该获取装置2000包括:
获取单元2001,用于获取N帧点云的匹配patch集合,N为大于或者等于2的整数;每帧点云的匹配patch集合中的一个patch R的边信息包括第一索引和第二索引,第一索引为与当前帧相邻的前一帧的匹配patch集合中与patch R具有匹配关系patch的索引;第二索引为与当前帧相邻的后一帧的匹配patch集合中与patch R具有匹配关系patch的索引;
匹配单元2002,用于遍历N-2帧点云的匹配patch集合,判断每帧点云的匹配patch集合中每个patch的第一索引和第二索引中的至少一个是否为预设值;N-2帧点云为N帧点云中除了第0帧点云和第N-1帧点云之外的点云;
删除单元2003,用于当第x帧点云的匹配patch集合中的第y个patch的第一索引和第二索引中的至少一个等于预设值时,将第0帧至第x-1帧点云的匹配patch集合中与第y个patch具有匹配关系的patch删除,并将第y个patch从第x-1帧点云的patch集合中删除,以得到全局匹配patch集合;
其中,全局匹配patch集合中的patch为跨N帧点云中具有匹配关系的patch。
需要说明的是,获取单元2001、匹配单元2002和删除单元2003执行图15所示实施例的相关内容。作为一个示例,该获取装置2000的位置对应于图2中的打包模块102,换言之,获取单元2001、匹配单元2002和删除单元2003的功能可以由图2中的打包模块102来实现。当然本申请不限于此。
参见图21,图21为本申请实施例提供一种编码装置的结构示意图。如图21所示,该编码装置2100包括:
打包模块2101,用于基于如图6-图15所示实施例中任一实施例获取N帧点云的全局匹配patch,打包时优先打包N帧点云中每帧点云的全局匹配patch,再打包非全局匹配patch,以获取N帧点云中每帧点云的占用图;
编码模块2102,用于根据N帧点云中每帧点云的占用图得到N帧点云的占用图的码流。
具体地,编码模块2102首先对N帧点云中每帧点云的占用图进行填充,以得到填充后的占用图;然后再对填充后的占用图进行编码,以得到N帧点云的占用图的码流。
需要说明的是,打包模块2101的位置对应于图2中的打包模块102,换言之,打包模块2102的功能可由图2中的打包模块102来实现;
相应地,编码模块2102可以对应于图2中的一个或多个模块的组合,例如,编码模块2102可以对应于图2中的接收点云的占用图的模块(例如深度图生成模块103、纹理图生成模块104、第二填充模块111)以及与其相连接或相通信的模块。当然本申请不限于此。
图22为用于本申请实施例的编码装置2200的一种实现方式的示意性框图。其中,获取装置2200可以包括处理器2201、存储器2202和总线系统2203。其中,处理器2201和存储器2202通过总线系统2203相连,该存储器2202用于存储指令,该处理器2201用于执行该存储器2202存储的指令,以执行本申请描述的各种点云编码或解码方法,尤其是基于当前图像块的块尺寸对当前图像块进行滤波的方法。为避免重复,这里不再详细描述。
在本申请实施例中,该处理器2201可以是中央处理单元(central processingunit,CPU),该处理器2201还可以是其他通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器2202可以包括ROM设备或者RAM设备。任何其他适宜类型的存储设备也可以用作存储器2202。存储器2202可以包括由处理器2201使用总线2203访问的代码和数据22021。存储器2202可以进一步包括操作系统22023和应用程序22022,该应用程序22022包括允许处理器2201执行本申请描述的点云编码或解码方法(尤其是本申请描述的全局匹配patch的获取方法)的至少一个程序。例如,应用程序22022可以包括应用1至N,其进一步包括执行在本申请描述的点云编码或解码方法的点云编码或解码应用(简称点云译码应用)。
该总线系统2203除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统2203。
可选的,编码装置2200还可以包括一个或多个输出设备,诸如显示器2204。在一个示例中,显示器2204可以是触感显示器,其将显示器与可操作地感测触摸输入的触感单元合并。显示器2204可以经由总线2203连接到处理器 2201。
本领域技术人员能够领会,结合本文公开描述的各种说明性逻辑框、模块和算法步骤所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么各种说明性逻辑框、模块、和步骤描述的功能可作为一或多个指令或代码在计算机可读媒体上存储或传输,且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于有形媒体,例如数据存储媒体,或包括任何促进将计算机程序从一处传送到另一处的媒体(例如,根据通信协议)的通信媒体。以此方式,计算机可读媒体大体上可对应于(1)非暂时性的有形计算机可读存储媒体,或(2)通信媒体,例如信号或载波。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本申请中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可包含计算机可读媒体。
作为实例而非限制,此类计算机可读存储媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可用来存储指令或数据结构的形式的所要程序代码并且可由计算机存取的任何其它媒体。并且,任何连接被恰当地称作计算机可读媒体。举例来说,如果使用同轴缆线、光纤缆线、双绞线、数字订户线(DSL)或例如红外线、无线电和微波等无线技术从网站、服务器或其它远程源传输指令,那么同轴缆线、光纤缆线、双绞线、DSL或例如红外线、无线电和微波等无线技术包含在媒体的定义中。但是,应理解,所述计算机可读存储媒体和数据存储媒体并不包括连接、载波、信号或其它暂时媒体,而是实际上针对于非暂时性有形存储媒体。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、DVD和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。
可通过例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一或多个处理器来执行指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的各种说明性逻辑框、模块、和步骤所描述的功能可以提供于经配置以用于编码和解码的专用硬件和/或软件模块内,或者并入在组合编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。在一种示例下,编码器100及解码器200中的各种说明性逻辑框、单元、模块可以理解为对应的电路器件或逻辑元件。
本申请的技术可在各种各样的装置或设备中实施,包含无线手持机、集成电路(IC)或一组IC(例如,芯片组)。本申请中描述各种组件、模块或单元是为了强调用于执行所揭示的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可结合合适的软件和/或固件组合在编码解码器硬件单元中,或者通过互操作硬件单元(包含如上文所描述的一或多个处理器)来提供。
以上所述,仅为本申请示例性的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。

Claims (10)

1.一种全局匹配patch的获取方法,其特征在于,包括:
获取N帧点云的patch集合,所述N大于2的整数;
对所述N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与所述第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以得到第i帧点云的匹配patch集合,所述第i帧点云的匹配patch集合包括n个patch,所述n个patch中的一个patch与所述第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系,所述n为大于或等于0的整数;所述第i帧点云的参考帧为在对第i帧处理之前N帧点云中已处理的点云中的一帧;
根据N帧点云的匹配patch集合确定M个全局匹配patch集合,所述M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,所述M为大于0的整数,所述N1帧点云为所述N帧点云中的全部或部分帧,所述N1为大于2的整数。
2.根据权利要求1所述的方法,其特征在于,所述M小于或者等于P,所述P表示所述N帧点云的匹配patch集合中包含匹配patch数量最小的匹配patch集合中patch的个数。
3.根据权利要求1或2所述的方法,其特征在于,所述对所述N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与所述第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,包括:
遍历所述第i帧点云的参考帧的匹配patch集合,将所述参考帧的匹配patch集合中的第t1个patch与所述第i帧点云的patch集合中第w1个的patch执行匹配操作;
当所述第t1个patch与所述第w1个patch相匹配时,将所述第w1个patch保存至所述第i帧点云的匹配patch集合中;其中,所述第w1个patch的目标索引为所述第t1个patch的索引;
其中,所述第w1个patch为所述第i帧点云的patch集合中未匹配的patch。
4.根据权利要求3所述的方法,其特征在于,所述根据所述N帧点云的匹配patch集合确定M个全局匹配patch集合,包括:
遍历所述第i帧点云的参考帧的匹配patch集合,判断所述第t1个patch的索引与所述第w1个patch的目标索引是否相同;i={N-1,N-2,…,1};
当所述第t1个patch的索引与所述第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将所述第t1个patch从所述参考帧的匹配patch集合中删除;
当所述i等于1时,得到所述M个全局匹配patch集合,所述M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
5.一种全局匹配patch的获取装置,其特征在于,包括:
获取单元,用于获取N帧点云的patch集合,所述N大于2的整数;
匹配单元,用于对所述N帧点云中第i帧点云的参考帧的匹配patch集合中的一个或多个patch与所述第i帧点云的patch集合中未匹配的一个或多个patch执行匹配操作,以获取第i帧点云的匹配patch集合,所述第i帧点云的匹配patch集合包括n个patch,所述n个patch中的一个patch与所述第i帧点云的参考帧的匹配patch集合中的patch具有匹配关系,所述n为大于或等于0的整数;所述第i帧点云的参考帧为在对第i帧处理之前N帧点云中已处理的点云中的一帧;
确定单元,用于根据N帧点云的匹配patch集合确定所述M个全局匹配patch集合,所述M个全局匹配patch集合中的至少一个集合为在跨N1帧点云中具有匹配关系的patch的集合,所述M为大于0的整数,所述N1帧点云为所述N帧点云中的全部或部分帧,所述N1为大于2的整数。
6.根据权利要求5所述的装置,其特征在于,所述M小于或者等于P,所述P表示N个匹配patch集合中包含匹配patch数量最小的匹配patch集合中patch的个数。
7.根据权利要求5或6所述的装置,其特征在于,所述匹配单元具体用于:
遍历所述第i帧点云的参考帧的匹配patch集合,对所述参考帧的匹配patch集合中的第t1个patch与所述第i帧点云的patch集合中第w1个的patch执行匹配操作;
当所述第t1个patch与所述第w1个patch相匹配时,将所述第w1个patch保存至所述第i帧点云的匹配patch集合中;其中,所述第w1个patch的目标索引为所述第t1个patch的索引;
其中,所述第w1个patch为所述第i帧点云的patch集合中未匹配的patch。
8.根据权利要求7所述的装置,其特征在于,所述确定单元具体用于:
遍历所述第i帧点云的参考帧的匹配patch集合,判断所述第t1个patch的索引与所述第w1个patch的目标索引是否相同;i={N-1,N-2,…,1};
当所述第t1个patch的索引与所述第i帧点云的匹配patch集合中的全部patch的目标索引均不相同时,将所述第t1个patch从所述参考帧的匹配patch集合中删除;
当所述i等于1时,得到所述M个全局匹配patch集合,所述M个全局匹配patch集合中第m个集合包括处理后的第0帧到第N-2帧的匹配patch集合中每个集合中的第m个patch和第N-1帧的匹配patch集合中的第m个patch。
9.一种全局匹配patch的获取装置,其特征在于,所述装置包括:存储器和处理器;其中,所述存储器用于存储程序代码;所述处理器用于调用所述程序代码,以执行如权利要求1至4任一项所述的全局匹配patch的获取方法。
10.一种计算机可读存储介质,其特征在于,包括程序代码,当所述程序代码在计算机上运行时,使得如权利要求1至4任一项所述的全局匹配patch的获取方法。
CN201880078104.0A 2018-04-09 2018-12-13 全局匹配patch的获取方法及装置 Active CN111434112B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862655019P 2018-04-09 2018-04-09
US62/655,019 2018-04-09
PCT/CN2018/120981 WO2019196475A1 (zh) 2018-04-09 2018-12-13 全局匹配patch的获取方法及装置

Publications (2)

Publication Number Publication Date
CN111434112A CN111434112A (zh) 2020-07-17
CN111434112B true CN111434112B (zh) 2022-08-09

Family

ID=68163049

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880078104.0A Active CN111434112B (zh) 2018-04-09 2018-12-13 全局匹配patch的获取方法及装置

Country Status (4)

Country Link
US (1) US20210029381A1 (zh)
EP (1) EP3772853A4 (zh)
CN (1) CN111434112B (zh)
WO (1) WO2019196475A1 (zh)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10861196B2 (en) 2017-09-14 2020-12-08 Apple Inc. Point cloud compression
US11818401B2 (en) 2017-09-14 2023-11-14 Apple Inc. Point cloud geometry compression using octrees and binary arithmetic encoding with adaptive look-up tables
US10897269B2 (en) 2017-09-14 2021-01-19 Apple Inc. Hierarchical point cloud compression
US10909725B2 (en) 2017-09-18 2021-02-02 Apple Inc. Point cloud compression
US11113845B2 (en) 2017-09-18 2021-09-07 Apple Inc. Point cloud compression using non-cubic projections and masks
US10607373B2 (en) 2017-11-22 2020-03-31 Apple Inc. Point cloud compression with closed-loop color conversion
US10699444B2 (en) 2017-11-22 2020-06-30 Apple Inc Point cloud occupancy map compression
US10909726B2 (en) 2018-04-10 2021-02-02 Apple Inc. Point cloud compression
US10909727B2 (en) 2018-04-10 2021-02-02 Apple Inc. Hierarchical point cloud compression with smoothing
US10939129B2 (en) 2018-04-10 2021-03-02 Apple Inc. Point cloud compression
US11010928B2 (en) 2018-04-10 2021-05-18 Apple Inc. Adaptive distance based point cloud compression
US11017566B1 (en) 2018-07-02 2021-05-25 Apple Inc. Point cloud compression with adaptive filtering
US11202098B2 (en) 2018-07-05 2021-12-14 Apple Inc. Point cloud compression with multi-resolution video encoding
US11012713B2 (en) 2018-07-12 2021-05-18 Apple Inc. Bit stream structure for compressed point cloud data
US11386524B2 (en) 2018-09-28 2022-07-12 Apple Inc. Point cloud compression image padding
US11367224B2 (en) * 2018-10-02 2022-06-21 Apple Inc. Occupancy map block-to-patch information compression
US11430155B2 (en) 2018-10-05 2022-08-30 Apple Inc. Quantized depths for projection point cloud compression
CN111327902B (zh) 2018-12-13 2022-11-22 华为技术有限公司 点云的编解码方法及装置
CN111327897B (zh) 2018-12-13 2022-01-14 华为技术有限公司 点云编码方法和编码器
US11348284B2 (en) 2019-01-08 2022-05-31 Apple Inc. Auxiliary information signaling and reference management for projection-based point cloud compression
US11057564B2 (en) 2019-03-28 2021-07-06 Apple Inc. Multiple layer flexure for supporting a moving image sensor
US11711544B2 (en) 2019-07-02 2023-07-25 Apple Inc. Point cloud compression with supplemental information messages
US11562507B2 (en) 2019-09-27 2023-01-24 Apple Inc. Point cloud compression using video encoding with time consistent patches
US11627314B2 (en) 2019-09-27 2023-04-11 Apple Inc. Video-based point cloud compression with non-normative smoothing
US11538196B2 (en) 2019-10-02 2022-12-27 Apple Inc. Predictive coding for point cloud compression
US11895307B2 (en) 2019-10-04 2024-02-06 Apple Inc. Block-based predictive coding for point cloud compression
US11798196B2 (en) 2020-01-08 2023-10-24 Apple Inc. Video-based point cloud compression with predicted patches
US11475605B2 (en) 2020-01-09 2022-10-18 Apple Inc. Geometry encoding of duplicate points
US11615557B2 (en) 2020-06-24 2023-03-28 Apple Inc. Point cloud compression using octrees with slicing
US11620768B2 (en) 2020-06-24 2023-04-04 Apple Inc. Point cloud geometry compression using octrees with multiple scan orders
US11948338B1 (en) 2021-03-29 2024-04-02 Apple Inc. 3D volumetric content encoding using 2D videos and simplified 3D meshes
US11683523B2 (en) 2021-07-07 2023-06-20 Tencent America LLC Group of pictures based patch packing for video based point cloud coding

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106600686A (zh) * 2016-12-06 2017-04-26 西安电子科技大学 一种基于多幅未标定图像的三维点云重建方法
CN106971403A (zh) * 2017-04-27 2017-07-21 武汉数文科技有限公司 点云图像处理方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100204964A1 (en) * 2009-02-09 2010-08-12 Utah State University Lidar-assisted multi-image matching for 3-d model and sensor pose refinement
CN103227888B (zh) * 2013-04-21 2016-09-14 中国科学技术大学 一种基于经验模式分解和多种评价准则的视频去抖动方法
CN105992009A (zh) * 2015-02-05 2016-10-05 袁琳琳 基于运动补偿和分块的视频压缩感知的处理方法
CN105678748B (zh) * 2015-12-30 2019-01-15 清华大学 三维监控系统中基于三维重构的交互式标定方法和装置
CN105657432A (zh) * 2016-01-12 2016-06-08 湖南优象科技有限公司 一种面向微型无人机的视频稳像方法
CN107197278B (zh) * 2017-05-24 2019-08-23 西安万像电子科技有限公司 屏幕图像的全局运动向量的处理方法和装置
WO2019185985A1 (en) * 2018-03-26 2019-10-03 Nokia Technologies Oy An apparatus, a method and a computer program for volumetric video

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106600686A (zh) * 2016-12-06 2017-04-26 西安电子科技大学 一种基于多幅未标定图像的三维点云重建方法
CN106971403A (zh) * 2017-04-27 2017-07-21 武汉数文科技有限公司 点云图像处理方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"A new patch side information encoding method for PCC TMC2";Dejun Zhang;《MOTION PICTURE EXPERT GROUP OR ISO/IEC JTC1/SC29/WG11》;20180122;第1-5节 *
"PCC Core Experiments for Category 2";Madhukar Budagavi;《MOTION PICTURE EXPERT GROUP OR ISO/IEC JTC1/SC29/WG11》;20180323;第5节,附图5-6 *

Also Published As

Publication number Publication date
CN111434112A (zh) 2020-07-17
EP3772853A4 (en) 2021-06-02
WO2019196475A1 (zh) 2019-10-17
EP3772853A1 (en) 2021-02-10
US20210029381A1 (en) 2021-01-28

Similar Documents

Publication Publication Date Title
CN111434112B (zh) 全局匹配patch的获取方法及装置
CN110944187B (zh) 点云编码方法和编码器
US20200280718A1 (en) Image encoding and decoding method and device
CN110662087B (zh) 点云编解码方法和编解码器
CN112335241B (zh) 对视频样本的变换块编码和解码的方法、设备和系统
CN110971912B (zh) 点云编解码方法、编解码器、编解码装置和存储介质
US11961265B2 (en) Point cloud encoding and decoding method and apparatus
CN111479114B (zh) 点云的编解码方法及装置
EP3343446A1 (en) Method and apparatus for encoding and decoding lists of pixels
CN111726615B (zh) 点云编解码方法及编解码器
US20210304444A1 (en) Point Cloud Encoding Method and Encoder
CN111327906B (zh) 点云编解码方法和编解码器
CN114051730A (zh) 处理点云数据的设备和方法
CN115086658B (zh) 点云数据的处理方法、装置、存储介质及编解码设备
US20220327744A1 (en) Apparatus and method for processing point cloud data
WO2020057338A1 (zh) 点云编码方法和编码器
JP2020530229A (ja) 動き補償参照フレーム圧縮
WO2022257150A1 (zh) 点云编解码方法、装置、点云编解码器及存储介质
CN112017292A (zh) 网格译码方法和装置

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