掌桥专利:专业的专利平台
掌桥专利
首页

编码方法、装置、设备及存储介质

文献发布时间:2023-06-19 12:00:51


编码方法、装置、设备及存储介质

技术领域

本公开涉及图像技术领域,尤其涉及编码方法、装置、设备及存储介质。

背景技术

计算机合成图像有其独特性,即一帧画面中经常出现大片像素值完全相同的区域,不同帧之间也经常有颜色完全相同的区域。这种情况在自然图像序列(例如摄像机录制的自然视频)中是极少出现的。

相关技术中,基于计算机合成图像的这个特点,通常采用帧间参考技术对采集的图像帧进行编码,无需对每个图像帧一一进行单独编码,从而可以降低码流。

但上述编码方法中,在帧间参考方面利用合成图像的自身特点并不充分,会保存多个帧参考信息,占用内存大,导致内存空间利用不充分。

发明内容

本公开实施例提供一种编码方法、装置、设备及存储介质,能够解决现有技术中导致内存空间利用不充分的问题。所述技术方案如下:

根据本公开实施例的第一方面,提供一种编码方法,应用于编码设备,所述方法包括:

接收图像采集模块发送的待编码帧;所述待编码帧包括多个待编码宏块;

在确定预先创建的三维参考矩阵为非空矩阵时,确定所述待编码帧与上一编码帧相比的变化区域;所述三维参考矩阵包括N个参考层;所述N为大于等于2的整数;每个所述参考层用于存放一帧编码数据;

在所述待编码帧的变化区域内和每个参考层i内进行搜索,确定出所述变化区域内的每个待编码宏块的类型;所述i为已存放编码数据的参考层的标号,所述i为大于或等于0的整数;

在确定所述变化区域内的待编码宏块为非参考宏块时,在所述目标参考层的对应位置处存放所述非参考宏块编码后的像素块;

在确定所述变化区域内的待编码宏块为目标参考宏块时,在目标参考层上将所述目标参考宏块的指向坐标填充为所述目标参考宏块参考的宏块的位置坐标;所述目标参考宏块包括帧间参考宏块或者帧内参考宏块,所述目标参考层为第(i+1)%N个参考层,所述位置坐标用于指示宏块在所在参考层的位置,所述指向坐标用于指示需要参考的宏块的位置坐标。

本公开实施例提供一种编码方法,在确定预先创建的三维参考矩阵为非空矩阵时,确定接收到的待编码帧与上一编码帧相比的变化区域,在待编码帧的变化区域内和每个参考层i内进行搜索,确定出待编码帧中的每个待编码宏块的类型,在确定待编码宏块为非参考宏块时,在目标参考层的对应位置出存放非参考宏块编码后的像素块;在确定待编码宏块的类型为帧间参考宏块或者帧内参考宏块时,不存放实际像素块,只在目标参考层上将帧间参考宏块或者帧内参考宏块的指向坐标填充为各自参考的宏块的位置坐标。可知,本公开中是基于三维参考矩阵,针对相同内容的宏块在三维参考矩阵中真正存放一个实际编码后的像素块的内容,其余相同宏块只需要填充指向坐标即可,从而极大的节省了内存占用,充分利用了内存空间。

在一个实施例中,在确定所述变化区域内的待编码宏块为非参考宏块时,还包括:

将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,还包括:

将所述待编码帧的变化区域外的每个待编码宏块标记为帧间参考宏块,并在所述目标参考层上将每个所述帧间参考宏块的指向坐标填充为所述帧间参考宏块参考的宏块的位置坐标。

在一个实施例中,还包括:

在确定所述三维参考矩阵为空矩阵时,在所述待编码帧内进行搜索,确定出每个待编码宏块的类型;

在确定所述待编码宏块为帧内参考宏块时,在首个参考层上将所述帧内参考宏块的指向坐标填充为所述帧内参考宏块参考的宏块的位置坐标;

在确定所述待编码宏块为非参考宏块时,在所述首个参考层的对应位置处存放所述非参考宏块编码后的像素块,并将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,在所述接收图像采集模块发送的待编码帧之前,还包括:

创建所述三维参考矩阵。

在一个实施例中,所述创建所述三维参考矩阵包括:

创建三维坐标;所述三维坐标包括相互垂直的X方向、Y方向和Z方向;

沿着所述Z方向设置N个所述参考层;其中,每个所述参考层由多个基本单元组成,所述基本单元的大小与所述待编码宏块的大小相同;

在每个所述基本单元的第一预设位置处设置位置坐标,并在每个所述基本单元的第二预设位置处设置指向坐标,所述指向坐标和所述位置坐标均为三维坐标的格式。

在一个实施例中,还包括:

在每个所述参考层的第三预设位置处设置参考层标识;所述参考层标识为三维坐标的格式。

根据本公开实施例的第二方面,提供一种编码装置,包括:

接收模块,用于接收图像采集模块发送的待编码帧;所述待编码帧包括多个待编码宏块;

第一确定模块,用于在确定预先创建的三维参考矩阵为非空矩阵时,确定所述待编码帧与上一编码帧相比的变化区域;所述三维参考矩阵包括N个参考层;所述N为大于等于2的整数;每个所述参考层用于存放一帧编码数据;

第二确定模块,用于在所述待编码帧的变化区域内和每个参考层i内进行搜索,确定出所述变化区域内的每个待编码宏块的类型;所述i为已存放编码数据的参考层的标号,所述i为大于或等于0的整数;

存放模块,用于在确定所述变化区域内的待编码宏块为非参考宏块时,在所述目标参考层的对应位置处存放所述非参考宏块编码后的像素块;

第一填充模块,用于在确定所述变化区域内的待编码宏块为目标参考宏块时,在目标参考层上将所述目标参考宏块的指向坐标填充为所述目标参考宏块参考的宏块的位置坐标;所述目标参考宏块包括帧间参考宏块或者帧内参考宏块,所述目标参考层为第(i+1)%N个参考层,所述位置坐标用于指示宏块在所在参考层的位置,所述指向坐标用于指示需要参考的宏块的位置坐标。

本公开实施例提供一种编码装置,在确定预先创建的三维参考矩阵为非空矩阵时,确定接收到的待编码帧与上一编码帧相比的变化区域,在待编码帧的变化区域内和每个参考层i内进行搜索,确定出待编码帧中的每个待编码宏块的类型,在确定待编码宏块为非参考宏块时,在目标参考层的对应位置出存放非参考宏块编码后的像素块;在确定待编码宏块的类型为帧间参考宏块或者帧内参考宏块时,不存放实际像素块,只在目标参考层上将帧间参考宏块或者帧内参考宏块的指向坐标填充为各自参考的宏块的位置坐标。可知,本公开中是基于三维参考矩阵,针对相同内容的宏块在三维参考矩阵中真正存放一个实际编码后的像素块的内容,其余相同宏块只需要填充指向坐标即可,从而极大的节省了内存占用,充分利用了内存空间。

在一个实施例中,在确定所述变化区域内的待编码宏块为非参考宏块时,所述装置还包括第二填充模块;

所述第二填充模块,用于将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,所述装置还包括第三填充模块;

所述第三填充模块,用于将所述待编码帧的变化区域外的每个待编码宏块标记为帧间参考宏块,并在所述目标参考层上将每个所述帧间参考宏块的指向坐标填充为所述帧间参考宏块参考的宏块的位置坐标。

在一个实施例中,所述装置还包括第三确定模块、第四填充模块和第五填充模块;

所述第三确定模块,用于在确定所述三维参考矩阵为空矩阵时,在所述待编码帧内进行搜索,确定出每个待编码宏块的类型;

所述第四填充模块,用于在确定所述待编码宏块为帧内参考宏块时,在首个参考层上将所述帧内参考宏块的指向坐标填充为所述帧内参考宏块参考的宏块的位置坐标;

所述第五填充模块,用于在确定所述待编码宏块为非参考宏块时,在所述首个参考层的对应位置处存放所述非参考宏块编码后的像素块,并将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,所述装置还包括创建模块;

所述创建模块,用于创建所述三维参考矩阵。

在一个实施例中,所述创建模块包括创建子模块、第一设置子模块和第二设置子模块;

所述创建子模块,用于创建三维坐标;所述三维坐标包括相互垂直的X方向、Y方向和Z方向;

所述第一设置子模块,用于沿着所述Z方向设置N个所述参考层;其中,每个所述参考层由多个基本单元组成,所述基本单元的大小与所述待编码宏块的大小相同;

所述第二设置子模块,用于在每个所述基本单元的第一预设位置处设置位置坐标,并在每个所述基本单元的第二预设位置处设置指向坐标,所述指向坐标和所述位置坐标均为三维坐标的格式。

在一个实施例中,所述创建模块还包括第三设置子模块;

所述第三设置子模块,用于在每个所述参考层的第三预设位置处设置参考层标识;所述参考层标识为三维坐标的格式。

根据本公开实施例的第三方面,提供一种编码设备,包括:处理器和存储器,所述存储器中存储有至少一条计算机指令,所述指令由所述处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的编码方法中所执行的步骤。

根据本公开实施例的第四方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条计算机指令,所述指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的编码方法中所执行的步骤。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是本公开实施例提供的一种编码方法的流程图;

图2是本公开实施例提供的一种三维参考矩阵的结构示意图;

图3是本公开实施例提供的一种参考层的结构示意图;

图4是本公开实施例提供的一种已填充参考数据的三维参考矩阵的结构示意图;

图5是本公开实施例提供的一种编码方法的流程图;

图6是本公开实施例提供的一种编码方法的流程图;

图7a是本公开实施例提供的一种编码装置的结构图;

图7b是本公开实施例提供的一种编码装置的结构图;

图7c是本公开实施例提供的一种编码装置的结构图;

图7d是本公开实施例提供的一种编码装置的结构图;

图7e是本公开实施例提供的一种编码装置的结构图;

图7f是本公开实施例提供的一种编码装置的结构图;

图7g是本公开实施例提供的一种编码装置的结构图;

图8是本公开实施例提供的一种编码设备的框架图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

本公开实施例提供一种编码方法,如图1所示,该方法包括以下步骤:

步骤101、接收图像采集模块发送的待编码帧。

其中,所述待编码帧包括多个待编码宏块。

进一步的,在接收图像采集模块发送的待编码帧之前,需要先创建三维参考矩阵。

可选的,创建三维坐标,沿着所述Z方向设置N个所述参考层;在每个所述基本单元的第一预设位置处设置位置坐标,在每个所述基本单元的第二预设位置处设置指向坐标,并在每个所述参考层的第三预设位置处设置参考层标识。

其中,所述三维坐标包括相互垂直的X方向、Y方向和Z方向;每个所述参考层由多个基本单元组成,所述基本单元的大小与所述待编码宏块的大小相同;所述指向坐标和所述位置坐标均为三维坐标的格式。

示例的,如图2所示,其为三维参考矩阵的结构示意图,是以三个参考层为例的,图2中三维参考矩阵有X、Y、Z三个坐标,体现了三维参考矩阵的坐标情况,其中,X坐标和Y坐标的单位是宏块,以1920*1080分辨率为例,宏块大小为最常用的16像素宽高(16*16大小),也就是每个参考层的基本单元的大小为宏块的大小,则一帧中X方向最多有120个宏块,Y方向最多有68个宏块,三维参考矩阵的X轴和Y轴的最小值均为0,X轴的最大值为119,Y轴的最大值为67。Z方向有三个参考层标识,分别为0、1、2对应于三个参考层,即参考层0、参考层1和参考层2。另外,图中有4个黑色实心小黑点,分别标注了对应参考层上该位置的三维坐标。每个基本单元都有一个位置坐标的标记和一个指向坐标的标记,这两个标记都是(x,y,z)格式的三维坐标,位置坐标表示宏块在所在参考层的位置,对于一个宏块来说,宏块的位置坐标是固定不变的,所以位置坐标被填充后,后续位置坐标的值不会变化;指向坐标表示需要参考的宏块的位置坐标,初始值可以设定为(-1,-1,-1),表示无效。

需要说明的是,参考层标识、指向坐标和位置坐标的具体位置可根据需求进行设定,本公开对此不做限定。

需要说明的是,本公开对三维参考矩阵中的参考层的数量不作限定,可根据具体场景和设备能力进行设定。

步骤102、在确定预先创建的三维参考矩阵为非空矩阵时,确定所述待编码帧与上一编码帧相比的变化区域。

其中,所述三维参考矩阵包括N个参考层;所述N为大于等于2的整数;每个所述参考层用于存放一帧编码数据,如图3所示,其为一个参考层的结构示意图,一个参考层上存放基于一帧图像的多个宏块编码数据,例如Ax宏块、Bx宏块、Cx宏块、Dx宏块、Ex宏块,具体x的取值与参考层标识对应。

示例的,编码设备不断接收图像采集模块发送的待编码帧,每个待编码帧是根据预设的宏块大小划分为多个待编码宏块的,在接收到每个待编码帧时,需要先检测预先创建的三维参考矩阵是否为空矩阵,在确定三维参考矩阵为非空矩阵时,说明当前接收到的待编码帧不是首个待编码帧,此时需要结合图像采集模块上报的变化区域信息(当前的待编码帧与上一编码帧相比的变化区域),确定当前接收到的待编码帧中哪些矩形区域发生了变化,从而确定待编码帧与上一编码帧相比的变化区域,变化区域外的宏块是没有发生变化的,变化区域内的宏块是发生变化的。

步骤103、在所述待编码帧的变化区域内和每个参考层i内进行搜索,确定出所述变化区域内的每个待编码宏块的类型。

其中,所述i为已存放编码数据的参考层的标号,所述i为大于或等于0的整数。

示例的,编码设备在确定待编码帧的变化区域时,首先在每个参考层i内依次进行搜索,假设参考层i为参考层1和参考层0,则先在参考层1内搜索,再在参考层0内进行搜索,以确定待编码宏块是否为帧间参考宏块;最后再在确定的待编码帧的变化区域内进行搜索,以确定待编码宏块是否为帧内参考宏块;若待编码宏块既不是帧间参考宏块,又不是帧内参考宏块,则确定待编码宏块为非参考宏块。具体宏块搜索的方法可参考现有技术,本公开在此不再赘述。

需要说明的是,帧间参考宏块指的是待编码帧与上一编码帧有相同的宏块,帧内参考宏块指的是待编码帧内有相同的宏块。

步骤104、在确定所述变化区域内的待编码宏块为非参考宏块时,在所述目标参考层的对应位置处存放所述非参考宏块编码后的像素块。

进一步的,在确定所述变化区域内的待编码宏块为非参考宏块时,将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

示例的,编码设备在确定变化区域内的待编码宏块为非参考宏块时,将该非参考宏块进行非参考编码,例如Huffman编码或者JPEG编码,按照该非参考宏块在该参考层的位置坐标,将编码后的像素块存放在该位置坐标处,并将非参考宏块的指向坐标填充为非参考宏块的位置坐标,表示该非参考宏块没有需要参考的宏块,解码设备直接解码该位置坐标处存放的编码后的像素块即可。

如图4所示,其为已填充了参考数据的三维参考矩阵的结构示意图,不是刚初始化的空矩阵,其中,以参考宏块A0、A1、A2、E0为例,A0的指向坐标=A0的位置坐标=(0,0,0),A0的指向坐标的值表示A0处存储了实际的编码后的像素块,在编码其他帧的时候可被参考;A1的指向坐标=A0的位置坐标=(0,0,0),A1的指向坐标的值实际是A0的位置坐标,表示A1处的宏块并没有实际存储像素,只是指向A0宏块,表示A1处的宏块和A0处的宏块内容相同,不必在A1处再存储一份像素;A2的指向坐标=A1的位置坐标=(0,0,1),A2的指向坐标的值实际是A1的位置坐标,表示A2处的宏块也没有实际存储像素,只是指向A1宏块,最终指向A0宏块,表示A2处的宏块和A0处的宏块内容相同。由此可知,A1、A2和A0不属于一个参考层,但都指向A0的内容,这属于沿三维参考矩阵的Z轴维度的参考宏块扩展。另外,E0的指向坐标=B0的位置坐标=(80,0,0),E0的指向坐标的值实际是B0的位置坐标,表示E0处的宏块实际并没有存储像素块,它的内容和B0处宏块内容相同,E0和B0同属于一层,因此,这属于沿XY平面上的参考宏块扩展,正是由于同时有了沿Z轴和XY平面的参考宏块之间的参考,才构成了本公开中的三维参考矩阵。

步骤105、在确定所述变化区域内的待编码宏块为目标参考宏块时,在目标参考层上将所述目标参考宏块的指向坐标填充为所述目标参考宏块参考的宏块的位置坐标。

其中,所述目标参考宏块包括帧间参考宏块或者帧内参考宏块,所述目标参考层为第(i+1)%N个参考层,所述位置坐标用于指示宏块在所在参考层的位置,所述指向坐标用于指示需要参考的宏块的位置坐标;%表示取余,例如,i=0,N=3时,则第(i+1)%N个参考层为第1层;i=1时,则第(i+1)%N个参考层为第2层;i=2时,则第(i+1)%N个参考层为第0层。

示例的,编码设备在确定变化区域内的待编码宏块为帧间参考宏块时,说明上一编码帧中有与变化区域内的待编码宏块相同的宏块,此时无需存放该帧间参考宏块编码后的像素块,只需在目标参考层上将该帧间参考宏块的指向坐标填充为该帧间参考宏块参考的宏块的位置坐标即可,这样,解码设备在解码时,可根据该帧间参考宏块参考的宏块的位置坐标查找到该帧间参考宏块参考的宏块,进而根据参考的宏块的编码后的像素块进行解码。

编码设备在确定变化区域内的待编码宏块为帧内参考宏块时,说明该变化区域内有与该帧内参考宏块相同的宏块,此时无需存放该帧内参考宏块编码后的像素块,只需在目标参考层上将该帧内参考宏块的指向坐标填充为该帧内参考宏块参考的宏块的位置坐标即可,这样,解码设备在解码时,可根据该帧内参考宏块参考的宏块的位置坐标查找到该帧内参考宏块参考的宏块,进而根据参考的宏块的编码后的像素块进行解码。

进一步的,如图5所示,所述方法还包括以下步骤106:

步骤106、将所述待编码帧的变化区域外的每个待编码宏块标记为帧间参考宏块,并在所述目标参考层上将每个所述帧间参考宏块的指向坐标填充为所述帧间参考宏块参考的宏块的位置坐标。

示例的,编码设备在确定变化区域时,将变化区域外的待编码宏块标记为帧间参考宏块,此时无需存放帧间参考宏块编码后的像素块,只需在目标参考层上将帧间参考宏块的指向坐标填充为帧间参考宏块参考的宏块的位置坐标即可,这样,解码设备在解码时,可根据该帧间参考宏块参考的宏块的位置坐标查找到该帧间参考宏块参考的宏块,进而根据参考的宏块的编码后的像素块进行解码。

需要说明的是,本公开对步骤103和步骤106的执行顺序不作限定,可以先执行步骤103至步骤105、再执行步骤106;也可以先执行步骤106,再执行步骤103至步骤105。

如图4所示,参考层1上面虚线标处的区域即为待编码帧与上一编码帧的变化区域,参考层1对应的是第二个待编码帧,第二个待编码帧中对应A1位置、C1位置、D1位置的宏块都位于变化区域外,即A1位置、C1位置、D1位置处的宏块无需比较就可判定为帧间参考宏块,A1位置处的宏块参考A0位置处的宏块,C1位置处的宏块参考C0位置处的宏块,D1位置处的宏块参考D0位置处的宏块;而对应B0位置、E0位置处的宏块需要和参考层0中的所有宏块进行比较,若经比较发现E1处的宏块与E0处的宏块相同,B1处的宏块无匹配的,则最终A1、C1、D1和E1四个位置处的宏块直接按照帧间参考编码,B1处的宏块找不到帧间参考宏块,然后将B1处的宏块和参考层1上的变化区域内的所有宏块进行比较,确定变化区域内是否有B1处的宏块能够参考的宏块,若确定没有,则最终将B1处的宏块确定为非参考宏块,按照非参考方法进行编码。在编码完成后,需要将第二个待编码帧编码后的数据填充在参考层1中,具体填充方法为:将参考层1的变化区域外的宏块的指向坐标填充为各自参考的宏块的位置坐标,例如,A1的指向坐标=A0的位置坐标=(0,0,0),C1的指向坐标=C0的位置坐标=(0,67,0),D1的指向坐标=D0的位置坐标=(0,10,0);将参考层1的变化区域内的帧间参考宏块的指向坐标也填充为参考的宏块的位置坐标,例如,E1的指向坐标=E0的位置坐标=(81,0,0);将参考层1的变化区域内的帧内参考宏块的指向坐标填充为参考的宏块的位置坐标,将变化区域内没有参考的宏块的指向坐标填充为自身的位置坐标,例如,B1为非参考宏块,将B1的指向坐标=B1的位置坐标=(80,0,1),至此,参考层1形成。

如图4所示,参考层2上面虚线标处的区域即为待编码帧与参考层1上的编码帧的变化区域,参考层2对应的是第三个待编码帧,此时参考层1和参考层0均具备参考信息,第三个待编码帧中对应A2位置、C2位置、D2位置的宏块都位于变化区域外,即A2位置、C2位置、D2位置处的宏块无需比较就可判定为帧间参考宏块,A2位置处的宏块参考A1位置处的宏块,C2位置处的宏块参考C1位置处的宏块,D2位置处的宏块参考D1位置处的宏块;参考层2的变化区域内的宏块按如下顺序进行比较:先与参考层1中的所有宏块进行比较,然后与参考层0中的所有宏块进行比较,再与参考层2的变化区域内的所有宏块进行比较,若经比较发现有帧间参考宏块,则按照帧间参考宏块进行编码,若发现有帧内参考宏块,则按照帧内参考宏块进行编码;若发现没有没有相同的宏块,则按照非参考方式进行编码。图4中,将第三个待编码帧放入参考层2,可以看出,参考层2中A2处的宏块实际没有存放像素数据,而是指向了A1处的宏块,最终指向A0处的宏块;类似的,D2处的宏块实际没有存放像素数据,而是指向了D1处的宏块,最终指向D0处的宏块;C2处的宏块实际没有存放像素数据,而是指向了C1处的宏块,最终引用C0指向了A0处的宏块;B2处的宏块在比较过程中发现和A1处宏块内容相同,所以,B2指向了A1处的宏块,最终指向了A0处的宏块,所以,B2处的宏块实际没有存放像素数据;E2找不到参考宏块,为非参考宏块,按照非参考方式编码,并将编码后的像素数据存放在E2处,最终形成了图4中的参考矩阵形态。

需要说明的是,在第四个待编码帧到来时,由于图4中的三个参考层已填充满,则需要循环写入。以A宏块位置为例,如果第4个待编码帧该位置的宏块发生了变化,则将覆盖A0位置的像素信息,并且将A1位置、A2位置的指向坐标均标记为无效。因为原来的A0已经消失,参考关系已经失效。如果第四个待编码帧的该位置仍然没有变化,则无需覆盖A0位置的像素信息,在填充参考层信息时直接忽略该位置即可。

进一步的,如图6所示,在确定所述三维参考矩阵为空矩阵时,所述方法还包括以下步骤107至步骤109:

步骤107、在确定所述三维参考矩阵为空矩阵时,在所述待编码帧内进行搜索,确定出每个待编码宏块的类型。

示例的,编码设备在确定三维参考矩阵为空矩阵时,参考层0至参考层2均为空,说明当前接收到的待编码帧是首个待编码帧,为关键帧,不参考任何其他帧,此时对该待编码帧不采用帧间参考,但需要在待编码帧中对每个待编码宏块进行搜索匹配,检测是否有和待编码帧内容相同的宏块,如果有,则确定该待编码宏块为帧内参考宏块;如果没有,则确定该待编码宏块为非参考宏块。

步骤108、在确定所述待编码宏块为帧内参考宏块时,在首个参考层上将所述帧内参考宏块的指向坐标填充为所述帧内参考宏块参考的宏块的位置坐标。

示例的,编码设备在确定待编码宏块为帧内参考宏块时,说明该待编码帧内有与该待编码宏块相同的宏块,此时无需存放该待编码宏块编码后的像素块,只需在首个参考层上将该待编码宏块的指向坐标填充为该待编码宏块参考的宏块的位置坐标即可,这样,解码设备在解码时,可根据该待编码宏块参考的宏块的位置坐标查找到该待编码宏块参考的宏块,进而根据参考的宏块的编码后的像素块进行解码。

步骤109、在确定所述待编码宏块为非参考宏块时,在所述首个参考层的对应位置处存放所述非参考宏块编码后的像素块,并将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

示例的,编码设备在确定待编码宏块为非参考宏块时,将该待编码宏块进行非参考编码,例如Huffman编码或者JPEG编码,按照该待编码宏块在该首个参考层的位置坐标,将编码后的像素块存放在该位置坐标处,并将待编码宏块的指向坐标填充为该待编码宏块的位置坐标,表示该待编码宏块没有需要参考的宏块,解码设备直接解码该位置坐标处存放的编码后的像素块即可。如图4所示,参考层0即为首个参考层,A0、B0、D0这三个位置处的宏块各不同,则A0的指向坐标=A0的位置坐标,B0的指向坐标=B0的位置坐标,D0的指向坐标=D0的位置坐标,A0、B0、D0这三个位置处存放的是实际的像素块;若经过比较发现C0处的宏块与A0处的宏块内容相同,则C0的指向坐标=A0的位置坐标=(0,0,0);若经过比较发现E0处的宏块与B0处的宏块内容相同,则E0的指向坐标=B0的位置坐标=(80,0,0),这样,C0和E0位置就节省了存放像素的空间,实现了XY平面的参考关系。

需要说明的是,本公开中的三维参考矩阵的每个参考层是一个逻辑参考层,但每个逻辑参考帧并不一定真正占用真实参考帧那么大的内存空间,而是不同的逻辑参考帧的同位置宏块相同时,只存储一个实际像素,并且同一个逻辑参考帧中,如果有多个宏块内容相同,也只保存一个实际像素,其他宏块内容参考该逻辑参考帧内的那个存储了真实像素信息的宏块。虽然本公开中的每个参考层的逻辑尺寸也是一帧大小,但由于其中并不一定真正存储有全帧尺寸那么多的像素数量,所以,本公开中的参考层与传统意义上的参考帧并不相同,所以本公开中采用参考层的概念来描述。参考层之间存储宏块之间的引用参考,同一个参考层之间也存在宏块之间的引用参考,这两种参考关系,构成了本公开中的三维参考矩阵。有了三维参考矩阵,每个内容不容的宏块可能只在三维参考矩阵中真正存储了一个实际像素块的内容,极大的节省了内存占用,而节省了内存占用,则意味着编码设备和解码设备两端可以容纳更多的参考信息,参考信息越大,编码时可参考的内容也越多,也就越能降低编码的码流。

需要说明的是,在编码设备和解码设备两端均需要维护同样的三维参考矩阵,只有这样,解码设备才能正确和编码同步起来,上述是编码设备端的三维参考矩阵的内容,解码设备在每解码一帧后,由于了解每个宏块的参考情况,如是帧间参考宏块、帧内参考宏块、非参考宏块,可构建和维护与编码端同样的一个三维参考矩阵。基于同样的三维参考矩阵,来解码编码设备发来的码流。

本公开实施例提供一种编码方法,在确定预先创建的三维参考矩阵为非空矩阵时,确定接收到的待编码帧与上一编码帧相比的变化区域,在待编码帧的变化区域内和每个参考层i内进行搜索,确定出待编码帧中的每个待编码宏块的类型,在确定待编码宏块为非参考宏块时,在目标参考层的对应位置出存放非参考宏块编码后的像素块;在确定待编码宏块的类型为帧间参考宏块或者帧内参考宏块时,不存放实际像素块,只在目标参考层上将帧间参考宏块或者帧内参考宏块的指向坐标填充为各自参考的宏块的位置坐标。可知,本公开中是基于三维参考矩阵,针对相同内容的宏块在三维参考矩阵中真正存放一个实际编码后的像素块的内容,其余相同宏块只需要填充指向坐标即可,从而极大的节省了的内存占用,充分利用了内存空间。

基于上述实施例中所描述的编码方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。

本公开实施例提供一种编码装置,如图7a所示,该编码装置70包括:接收模块701、第一确定模块702、第二确定模块703、存放模块704和第一填充模块705。

其中,接收模块701,用于接收图像采集模块发送的待编码帧;所述待编码帧包括多个待编码宏块。

第一确定模块702,用于在确定预先创建的三维参考矩阵为非空矩阵时,确定所述待编码帧与上一编码帧相比的变化区域;所述三维参考矩阵包括N个参考层;所述N为大于等于2的整数;每个所述参考层用于存放一帧编码数据。

第二确定模块703,用于在所述待编码帧的变化区域内和每个参考层i内进行搜索,确定出所述变化区域内的每个待编码宏块的类型;所述i为已存放编码数据的参考层的标号,所述i为大于或等于0的整数。

存放模块704,用于在确定所述变化区域内的待编码宏块为非参考宏块时,在所述目标参考层的对应位置处存放所述非参考宏块编码后的像素块。

第一填充模块705,用于在确定所述变化区域内的待编码宏块为目标参考宏块时,在目标参考层上将所述目标参考宏块的指向坐标填充为所述目标参考宏块参考的宏块的位置坐标;所述目标参考宏块包括帧间参考宏块或者帧内参考宏块,所述目标参考层为第(i+1)%N个参考层,所述位置坐标用于指示宏块在所在参考层的位置,所述指向坐标用于指示需要参考的宏块的位置坐标。

在一个实施例中,如图7b所示,所述装置还包括第二填充模块706。

其中,所述第二填充模块706,用于将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,如图7c所示,所述装置还包括第三填充模块707。

其中,所述第三填充模块707,用于将所述待编码帧的变化区域外的每个待编码宏块标记为帧间参考宏块,并在所述目标参考层上将每个所述帧间参考宏块的指向坐标填充为所述帧间参考宏块参考的宏块的位置坐标。

在一个实施例中,如图7d所示,所述装置还包括第三确定模块708、第四填充模块709和第五填充模块710。

其中,所述第三确定模块708,用于在确定所述三维参考矩阵为空矩阵时,在所述待编码帧内进行搜索,确定出每个待编码宏块的类型。

所述第四填充模块709,用于在确定所述待编码宏块为帧内参考宏块时,在首个参考层上将所述帧内参考宏块的指向坐标填充为所述帧内参考宏块参考的宏块的位置坐标。

所述第五填充模块710,用于在确定所述待编码宏块为非参考宏块时,在所述首个参考层的对应位置处存放所述非参考宏块编码后的像素块,并将每个所述非参考宏块的指向坐标填充为所述非参考宏块的位置坐标。

在一个实施例中,如图7e所示,所述装置还包括创建模块711。

其中,所述创建模块711,用于创建所述三维参考矩阵。

在一个实施例中,如图7f所示,所述创建模块711包括创建子模块7111、第一设置子模块7112和第二设置子模块7113。

所述创建子模块7111,用于创建三维坐标;所述三维坐标包括相互垂直的X方向、Y方向和Z方向。

所述第一设置子模块7112,用于沿着所述Z方向设置N个所述参考层;其中,每个所述参考层由多个基本单元组成,所述基本单元的大小与所述待编码宏块的大小相同。

所述第二设置子模块7113,用于在每个所述基本单元的第一预设位置处设置位置坐标,并在每个所述基本单元的第二预设位置处设置指向坐标,所述指向坐标和所述位置坐标均为三维坐标的格式。

在一个实施例中,如图7g所示,所述创建模块711还包括第三设置子模块7114。

其中,所述第三设置子模块7114,用于在每个所述参考层的第三预设位置处设置参考层标识;所述参考层标识为三维坐标的格式。

本公开实施例提供一种编码装置,在确定预先创建的三维参考矩阵为非空矩阵时,确定接收到的待编码帧与上一编码帧相比的变化区域,在待编码帧的变化区域内和每个参考层i内进行搜索,确定出待编码帧中的每个待编码宏块的类型,在确定待编码宏块为非参考宏块时,在目标参考层的对应位置出存放非参考宏块编码后的像素块;在确定待编码宏块的类型为帧间参考宏块或者帧内参考宏块时,不存放实际像素块,只在目标参考层上将帧间参考宏块或者帧内参考宏块的指向坐标填充为各自参考的宏块的位置坐标。可知,本公开中是基于三维参考矩阵,针对相同内容的宏块在三维参考矩阵中真正存放一个实际编码后的像素块的内容,其余相同宏块只需要填充指向坐标即可,从而极大的节省了内存占用,充分利用了内存空间。

参考图8所示,本公开实施例还提供了一种编码设备,该编码设备包括接收器801、发射器802、存储器803和处理器804,该发射器802和存储器803分别与处理器804连接,存储器803中存储有至少一条计算机指令,处理器804用于加载并执行至少一条计算机指令,以实现上述图1对应的实施例中所描述的编码方法。

基于上述图1对应的实施例中所描述的编码方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read OnlyMemory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1对应的实施例中所描述的编码方法,此处不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

相关技术
  • 一种电器设备模块的编码方法、装置、设备和存储介质
  • 音频编码方法和设备、音频解码方法和设备和采用音频编码方法和设备、音频解码方法和设备的多媒体装置
技术分类

06120113133467