图像帧编码方法及装置
技术领域
本公开涉及图像处理技术领域,尤其涉及图像帧编码方法及装置。
背景技术
在图像传输过程中,需要先将图像帧进行图像编码,然后进行传输,接收到图像帧后,需要对图像帧进行图像解码然后显示。在图像编码的过程中,将一个图像帧划分为至少一个宏块,对一个宏块编码时,会参考相邻的已经编码过的宏块。相关技术中,将图像帧分为多个单元,每个单元包含若干个宏块,各单元之间互不依赖,同时编码,因为各单元之间没有相关性,导致码流增大,而且编码快的单元要等待编码慢的单元编码完成才能进行下一步操作,增加了处理时间,降低了处理效率。
发明内容
本公开实施例提供一种图像帧编码方法及装置,能够解决图像帧编码过程中编码效率低,编码时间较长的问题。所述技术方案如下:
根据本公开实施例的第一方面,提供一种图像帧编码方法,该方法包括:
获取目标图像帧,目标图像帧包括至少一个宏块;
当目标宏块的感染参数大于或等于预设阈值时,将目标宏块作为待编码的宏块加入编码缓存队列,编码缓存队列包括至少一个待编码的宏块,目标宏块属于目标图像帧;
当目标宏块之前的待编码的宏块都已经移出编码缓存队列时,在至少一个处理单元中为目标宏块分配目标处理单元,处理单元用于对宏块进行编码,目标处理单元是空闲的处理单元;
将目标宏块移出编码缓存队列,并利用目标处理单元对目标宏块进行编码;
在对目标图像帧的所有宏块编码完成后生成编码后的目标图像帧。
在对宏块编码时,对每个宏块设置了感染参数,感染参数大于或等于预设阈值就表示该宏块可以进行编码,将其加入缓存队列,这样,图像帧中各个宏块之间的相关性极强,而且,编码缓存队列中的宏块依次分配处理单元,使得多个处理单元可以同时对多个宏块进行编码,且互不影响,各个处理单元之间不需要互相等待,提高了编码效率,减少了编码时间。
在一个实施例中,将目标宏块作为待编码的宏块加入编码缓存队列之前,该方法还包括:
如果目标宏块尚未编码,且没有加入编码缓存队列,在将目标宏块的相邻宏块编码后,将目标宏块的感染参数增加预设步长。
在目标宏块的相邻宏块编码后,在对目标宏块编码时就可以参考该相邻宏块,如果目标宏块有多个相邻宏块都已经编码完成,则在编码时可以参考的宏块就有多个,表示目标宏块可以进行编码,因此,相邻宏块编码后增加目标宏块的感染参数,增强了宏块之间的相关性。
在一个实施例中,该方法还包括:
在利用目标处理单元对目标宏块编码完成后,将与目标宏块相邻的宏块中,尚未编码,且没有加入编码缓存队列中的宏块的感染参数增加预设步长。
在一个实施例中,该方法还包括:
在利用目标处理单元对目标宏块编码完成后,将目标处理单元分配给待编码的宏块。
目标处理单元对目标宏块编码完成后,目标处理单元就可以继续对其他待编码的宏块进行编码,提高了资源利用率。
在一个实施例中,该方法还包括:
在目标图像帧包含的至少一个宏块中确定初始宏块;
将初始宏块的感染参数设定为初始值,初始值大于或等于预设阈值。
根据本公开实施例的第二方面,提供一种视频区域确定装置,包括:获取模块、缓存队列模块、处理模块及编码模块;
获取模块,用于获取目标图像帧,目标图像帧包括至少一个宏块;
缓存队列模块,用于当目标宏块的感染参数大于或等于预设阈值时,将目标宏块作为待编码的宏块加入编码缓存队列,编码缓存队列包括至少一个待编码的宏块,目标宏块属于目标图像帧;
处理模块,用于当目标宏块之前的待编码的宏块都已经移出编码缓存队列时,在至少一个处理单元中为目标宏块分配目标处理单元,处理单元用于对宏块进行编码,目标处理单元是空闲的处理单元;
编码模块,用于将目标宏块移出编码缓存队列,并利用目标处理单元对目标宏块进行编码;在对目标图像帧的所有宏块编码完成后生成编码后的目标图像帧。
在一个实施例中,图像帧编码装置还包括第一感染模块;
第一感染模块,用于在目标宏块尚未编码,且没有加入编码缓存队列时,在编码模块将目标宏块的相邻宏块编码后,将目标宏块的感染参数增加预设步长。
在一个实施例中,图像帧编码装置还包括第二感染模块;
第二感染模块,用于在编码模块利用目标处理单元对目标宏块编码完成后,将与目标宏块相邻的宏块中,尚未编码,且没有加入编码缓存队列中的宏块的感染参数增加预设步长。
在一个实施例中,处理模块,还用于在利用目标处理单元对目标宏块编码完成后,将目标处理单元分配给待编码的宏块。
在一个实施例中,图像帧编码装置还包括初始化模块;
初始化模块,用于在目标图像帧包含的至少一个宏块中确定初始宏块;将初始宏块的感染参数设定为初始值,初始值大于或等于预设阈值。
当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本公开实施例提供的一种图像帧编码方法的流程图;
图2是本公开实施例提供的一种处理单元分配效果示意图;
图3是本公开另一实施例提供的一种图像帧编码方法的流程图;
图4是本公开实施例提供给的一种初始化效果示意图;
图5是本公开实施例提供的一种宏块感染效果示意图;
图6是本公开实施例提供的一种图像帧编码装置的结构图;
图7是本公开实施例提供的一种图像帧编码装置的结构图;
图8是本公开实施例提供的一种图像帧编码装置的结构图;
图9是本公开实施例提供的一种图像帧编码装置的结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开实施例提供一种图像帧编码方法,如图1所示,该图像帧编码方法包括以下步骤:
101、获取目标图像帧。
目标图像帧包括至少一个宏块。目标图像帧是任意一个图像帧,每个图像帧都可以用本公开实施例提供的图像帧编码方法进行编码,本实施例中只是以目标图像帧为例进行说明。
102、当目标宏块的感染参数大于或等于预设阈值时,将目标宏块作为待编码的宏块加入编码缓存队列。
目标宏块的感染参数用于指示对目标宏块编码时可以参考的宏块数量。例如,预设阈值可以是2,每一个单位表示一个可以参考的宏块,预设阈值也可以是6,每两个单位表示一个可以参考的宏块,本公开对此不做限制。
编码缓存队列包括至少一个待编码的宏块,目标宏块属于目标图像帧。需要说明的是,在最初时,可以设定一个初始宏块,例如,在一个实施例中,该方法还包括:
在目标图像帧包含的至少一个宏块中确定初始宏块;将初始宏块的感染参数设定为初始值,初始值大于或等于预设阈值。
因为在目标图像帧编码前,所有的宏块都未编码,必须有一些宏块首先进入编码缓存队列,将这些首先进入编码缓存队列的宏块确定为初始宏块。此处,将初始宏块的感染参数设定为初始值,也可以不设置初始宏块的感染参数,将初始宏块直接加入编码缓存队列。
在一个实施例中,将目标宏块作为待编码的宏块加入编码缓存队列之前,该方法还包括:
如果目标宏块尚未编码,且没有加入编码缓存队列,在将目标宏块的相邻宏块编码后,将目标宏块的感染参数增加预设步长。
在目标宏块的相邻宏块编码后,在对目标宏块编码时就可以参考该相邻宏块,如果目标宏块有多个相邻宏块都已经编码完成,则在编码时可以参考的宏块就有多个,表示目标宏块可以进行编码,因此,相邻宏块编码后增加目标宏块的感染参数,增强了宏块之间的相关性。
103、当目标宏块之前的待编码的宏块都已经移出编码缓存队列时,在至少一个处理单元中为目标宏块分配目标处理单元。
处理单元用于对宏块进行编码,目标处理单元是空闲的处理单元,空闲的处理单元即为资源没有被占用的处理单元。也就是当目标宏块之前的待编码的宏块都已经分配了处理单元,正在编码,或者已经完成编码时,在至少一个处理单元中选择一个空闲的处理单元作为目标处理单元,对目标宏块进行编码。
例如,如图2所示,图2是本公开实施例提供的一种处理单元分配效果示意图,处理单元有4个,分别为A,B,C,D,如果4个处理单元都空闲,则可以将编码缓存队列中前4个待编码的宏块分别分配给4个处理单元,一个处理单元编码一个宏块,如果A率先编码完成,则将编码缓存队列中第1个待编码的宏块分配给处理单元A,其他处理单元如果编码完成,也同处理单元A一样分配待编码的宏块,这样,每个处理单元都不需要等待,提高了编码效率。
104、将目标宏块移出编码缓存队列,并利用目标处理单元对目标宏块进行编码。
在一个实施例中,该方法还包括:
在利用目标处理单元对目标宏块编码完成后,将与目标宏块相邻的宏块中,尚未编码,且没有加入编码缓存队列中的宏块的感染参数增加预设步长。
预设步长可以是1,结合步骤102中的描述,预设步长的大小可以表示一个可以参考的宏块,例如,预设步长是2,感染参数增加2就表示增加了一个可以参考的宏块。目标宏块编码完成后,感染了相邻的宏块中,尚未编码,且没有加入编码缓存队列中的宏块,就会有新的宏块加入编码缓存队列继续等待编码,直至目标图像帧编码完成。
在一个实施例中,该方法还包括:在利用目标处理单元对目标宏块编码完成后,将目标处理单元分配给待编码的宏块。
目标处理单元对目标宏块编码完成后,目标处理单元就可以继续对其他待编码的宏块进行编码,提高了资源利用率。
105、在对目标图像帧的所有宏块编码完成后生成编码后的目标图像帧。
本公开实施例提供的图像帧编码方法,在对宏块编码时,对每个宏块设置了感染参数,感染参数大于或等于预设阈值就表示该宏块可以进行编码,将其加入缓存队列,这样,图像帧中各个宏块之间的相关性极强,而且,编码缓存队列中的宏块依次分配处理单元,使得多个处理单元可以同时对多个宏块进行编码,且互不影响,各个处理单元之间不需要互相等待,提高了编码效率,减少了编码时间。
基于上述图1对应的实施例中所描述的图像帧编码方法,本公开另一实施例提供一种图像帧编码方法,本实施例中预设阈值为2,预设步长为1,参照图3所示,本实施例提供的图像帧编码方法包括以下步骤:
301、对目标图像帧的至少一个宏块进行初始化。
需要说明的是,可以在目标图像帧包含的至少一个宏块中确定初始宏块,将初始宏块的感染参数设定为2;还可以在目标图像帧中确定感染宏块,感染宏块的感染参数比预设阈值小1,本实施例中将感染宏块的感染参数设定为1,其他宏块的感染参数设定为0。
在本实施例中,示例性的,如图4所示,图4是本公开实施例提供给的一种初始化效果示意图,初始宏块可以是目标图像帧最左上角的宏块,感染宏块可以是最上边一行的宏块,和最左边一列的宏块。当然,初始宏块也可以是右上角、左下角、右下角,或者最中间的宏块,本公开对此不做限制。
302、将感染参数等于2的宏块作为待编码的宏块加入编码缓存队列。
303、为至少一个处理单元中的空闲处理单元分配待编码的宏块。
304、利用处理单元对分配的待编码的宏块进行编码。
305、将编码完成的宏块,右边相邻的宏块和下边相邻的宏块的感染参数增加1。
如图5所示,图5是本公开实施例提供的一种宏块感染效果示意图,图5中,编码完成的宏块就会感染右边和下边相邻的宏块,使其右边相邻的宏块和下边相邻的宏块的感染参数增加1,对应的,如果一个宏块上边相邻的宏块编码完成,则该宏块的感染参数加1,如果一个宏块左边相邻的宏块编码完成,则该宏块的感染参数加1。如果一个宏块的感染参数达到2,则将该宏块加入编码缓存队列等待编码。
306、在对目标图像帧的所有宏块编码完成后生成编码后的目标图像帧。
本公开实施例提供的图像帧编码方法,在对宏块编码时,对每个宏块设置了感染参数,感染参数大于或等于预设阈值就表示该宏块可以进行编码,将其加入缓存队列,这样,图像帧中各个宏块之间的相关性极强,而且,编码缓存队列中的宏块依次分配处理单元,使得多个处理单元可以同时对多个宏块进行编码,且互不影响,各个处理单元之间不需要互相等待,提高了编码效率,减少了编码时间。
基于上述图1和图3对应的实施例中所描述的图像帧编码方法,本公开实施例提供一种图像帧编码装置,用于执行上述图1和图3对应的实施例中所描述的图像帧编码方法,如图6所示,该图像帧编码装置60包括:获取模块601、缓存队列模块602、处理模块603及编码模块604;
获取模块601,用于获取目标图像帧,目标图像帧包括至少一个宏块;
缓存队列模块602,用于当目标宏块的感染参数大于或等于预设阈值时,将目标宏块作为待编码的宏块加入编码缓存队列,编码缓存队列包括至少一个待编码的宏块,目标宏块属于目标图像帧;
处理模块603,用于当目标宏块之前的待编码的宏块都已经移出编码缓存队列时,在至少一个处理单元中为目标宏块分配目标处理单元,处理单元用于对宏块进行编码,目标处理单元是空闲的处理单元;
编码模块604,用于将目标宏块移出编码缓存队列,并利用目标处理单元对目标宏块进行编码;在对目标图像帧的所有宏块编码完成后生成编码后的目标图像帧。
在一个实施例中,如图7所示,图7是本公开实施例提供的一种图像帧编码装置的结构图,图像帧编码装置60还包括第一感染模块605;
第一感染模块605,用于在目标宏块尚未编码,且没有加入编码缓存队列时,在编码模块604将目标宏块的相邻宏块编码后,将目标宏块的感染参数增加预设步长。
在一个实施例中,如图8所示,图8是本公开实施例提供的一种图像帧编码装置的结构图,图像帧编码装置60还包括第二感染模块606;
第二感染模块606,用于在编码模块604利用目标处理单元对目标宏块编码完成后,将与目标宏块相邻的宏块中,尚未编码,且没有加入编码缓存队列中的宏块的感染参数增加预设步长。
在一个实施例中,处理模块603,还用于在利用目标处理单元对目标宏块编码完成后,将目标处理单元分配给待编码的宏块。
在一个实施例中,如图9所示,图9是本公开实施例提供的一种图像帧编码装置的结构图,图像帧编码装置60还包括初始化模块607;
初始化模块607,用于在目标图像帧包含的至少一个宏块中确定初始宏块;将初始宏块的感染参数设定为初始值,初始值大于或等于预设阈值。
本公开实施例提供的图像帧编码装置,在对宏块编码时,对每个宏块设置了感染参数,感染参数大于或等于预设阈值就表示该宏块可以进行编码,将其加入缓存队列,这样,图像帧中各个宏块之间的相关性极强,而且,编码缓存队列中的宏块依次分配处理单元,使得多个处理单元可以同时对多个宏块进行编码,且互不影响,各个处理单元之间不需要互相等待,提高了编码效率,减少了编码时间。
基于上述图1和图3对应的实施例中所描述的图像帧编码方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read Only Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1和图3对应的实施例中所描述的图像帧编码方法,此处不再赘述。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。