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

一种图像编解码方法及装置

文献发布时间:2023-06-19 10:48:02


一种图像编解码方法及装置

技术领域

本公开图像处理领域,尤其涉及一种图像编解码方法及装置。

背景技术

目前,对图像的编码通常是将图像进行宏块分类分为文字宏块和图片宏块,不同类型的宏块采用不同的编码方式来编码。但是,若不同类型的宏块采用不同的编码方式来编码,如果一个颜色渐变区域中两个相邻部分的宏块的类型不同,则采取的编码方式不同,那么这两个相邻部分的宏块的边界在解码重建后将会有视觉上的不足,本应渐变显示的两个相邻部分的宏块呈现为有马赛克样式的界限,使用户能感知到两个相邻部分的宏块颜色之间不连续,用户体验较差。

例如图1所示,图1是待编码图像中的一个颜色渐变区域,其中虚线标出的部分是该颜色渐变区域的4个宏块的像素值,每个宏块的大小16*16像素。若采用现有技术,将该待编码图像进行编码,则在解码端解码后,该图像如图2所示。图2中的虚线标出的部分是该颜色跳变,该颜色渐左上角(标记为1号)宏块和其他三个宏块颜色不同,存在颜色跳变。如图2所示,该颜色渐变区域的左下方和右上方块存在一个颜色阶梯状的变化带,即该颜色渐变区域在解码后存在颜色跳变。而这个颜色阶梯状的变化带,本来应该是显示为渐变颜色。该区域的4个宏块在解码后的像素为虚线标出的部分,如椭圆形圈住的部分,1号宏块和2号、3号宏块交界存在颜色跳变的原因,是1号宏块和2号、3号宏块虽然相邻,但是像素值存在了比较明显的跳变。

发明内容

本公开实施例提供一种图像编解方法及装置,能够解决采用现有技术会使本应渐变显示的两个相邻部分的宏块在解码后,呈现为有马赛克样式的界限,使用户能感知到两个相邻部分的宏块颜色之间不连续,用户体验较差的问题。所述技术方案如下:

根据本公开实施例的第一方面,提供一种图像编码方法,该方法包括:

将当前帧图像进行宏块划分,生成N个宏块,N为大于1的整数;

从所述N个宏块中确定颜色渐变宏块并根据所述颜色渐变宏块确定颜色渐变区域,所述颜色渐变区域包括至少2个相邻的颜色渐变宏块;

将所述颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流;

将除所述颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流;

根据所述颜色渐变区域的码流、所述文字宏块的码流以及所述图片宏块的码流生成所述当前帧图像的码流并将所述当前帧图像的码流发送至解码端。

本公开实施例提供的图像编码方法,能够将当前帧图像进行宏块划分,生成N个宏块;从该N个宏块中确定颜色渐变宏块并根据该颜色渐变宏块确定颜色渐变区域,该颜色渐变区域包括至少2个相邻的颜色渐变宏块;将该颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流;将除该颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流;将除该颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流,颜色渐变区域内的宏块无论是哪种类型,均采用第一编码方式进行编码,能够避免如果一个颜色渐变区域中两个相邻部分的宏块的类型不同,则采取的编码方式不同,那么这两个相邻部分的宏块的边界在解码重建后将会有视觉上的不足,本应渐变显示的两个相邻部分的宏块呈现为有马赛克样式的界限,使用户能感知到两个相邻部分的宏块颜色之间不连续,用户体验较差的问题,提高了用户体验。

在一个实施例中,从所述N个宏块中确定颜色渐变宏块包括:

计算目标宏块与第一宏块的像素差值,所述第一宏块为与所述目标宏块左边或者右边相邻的宏块,所述目标宏块为所述N个宏块中的任意一个宏块;

若所述目标宏块与所述第一宏块的像素差值大于0且小于预设阈值,则计算所述目标宏块与第二宏块的像素差值,所述第二宏块为与所述目标宏块上边或者下边相邻的宏块;

若所述目标宏块与第二宏块的像素差值大于0且小于预设阈值,则所述目标宏块为颜色渐变宏块。

在一个实施例中,所述计算目标宏块与第一宏块的像素差值包括:

将所述目标宏块的最后一列像素与第一宏块的第一列像素的差值作为所述目标宏块与所述第一宏块的像素差值或将所述第一宏块的最后一列像素和所述目标宏块的第一列像素的差值作为述目标宏块与所述第一宏块的像素差值。

在一个实施例中,所述根据所述颜色渐变宏块确定颜色渐变区域包括:

将至少2个相邻的颜色渐变宏块所组成的矩形宏块区域作为颜色渐变区域和/或将至少2个相邻的颜色渐变宏块与一行和/或一列非颜色渐变宏块组成的矩形宏块区域作为颜色渐变区域。

根据本公开实施例的第二方面,提供一种图像解码方法,该方法包括:

接收编码端发送的当前帧图像的码流并从所述当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流;

将所述及颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,所述颜色渐变区域包括至少2个宏块;

确定所述颜色渐变区域中每两个相邻宏块的边界并将所述边界进行滤波处理,生成滤波后的颜色渐变区域;

将所述文字宏块的码流按照第二解码方式进行解码并将所述图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块;

根据所述滤波后的颜色渐变区域、所述文字宏块以及所述图片宏块生成所述当前帧图像。

本公开实施例提供的图像解码方法,能够接收编码端发送的当前帧图像的码流并从该当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流;将该颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,该颜色渐变区域包括至少2个宏块;确定该颜色渐变区域中每两个相邻宏块的边界并将该边界进行滤波处理,生成滤波后的颜色渐变区域;将该文字宏块的码流按照第二解码方式进行解码并将该图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块;根据该滤波后的颜色渐变区域、该文字宏块以及该图片宏块生成该当前帧图像,能够对确定该颜色渐变区域中每两个相邻宏块的边界并将该边界进行滤波处理,使得颜色渐变区域的相邻宏块的边界的颜色跳变被消除,用户能感知到颜色渐变区域的相邻宏块的边界的颜色连续,提高了用户体验。

在一个实施例中,所述确定所述颜色渐变区域中每两个相邻宏块的边界包括:

将所述颜色渐变区域中每两个相邻宏块的相邻M行或相邻M列像素作为该两个相邻宏块的边界,M为大于1的整数。

在一个实施例中,所述将所述边界进行滤波处理包括:

若该两个相邻宏块为上下相邻,则将该两个相邻宏块的相邻的M行像素的第一行像素与最后一行像素进行差值运算,得到第一像素差值;

根据所述第一像素差值与M得到像素渐变值,所述像素渐变值为所述第一像素差值除以M后取整的值;

针对除所述第一行像素外的M-1行像素中的每行像素,根据与该行像素相邻的上一行像素的像素值与所述像素渐变值确定该行像素的像素值。

在一个实施例中,所述将所述边界进行滤波处理包括:

若该两个相邻宏块为左右相邻,则将该两个相邻宏块的相邻的M列像素的第一列像素与最后一列像素进行差值运算,得到第二像素差值;

根据所述第二像素差值与M得到像素渐变值,所述像素渐变值为所述第二像素差值除以M后取整的值;

针对除所述第一列像素外的M-1列像素中的每列像素,根据与该列像素相邻的上一列像素的像素值与所述像素渐变值确定该列像素的像素值。

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

宏块划分模块,用于将当前帧图像进行宏块划分,生成N个宏块,N为大于1的整数;

颜色渐变区域确定模块,用于从所述N个宏块中确定颜色渐变宏块并根据所述颜色渐变宏块确定颜色渐变区域,所述颜色渐变区域包括至少2个相邻的颜色渐变宏块;

颜色渐变区域编码模块,用于将所述颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流;

文字宏块编码模块,用于将除所述颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流;

当前帧图像码流生成模块,用于根据所述颜色渐变区域的码流、所述文字宏块的码流以及所述图片宏块的码流生成所述当前帧图像的码流并将所述当前帧图像的码流发送至解码端。

在一个实施例中,所述颜色渐变区域确定模块用于:

计算目标宏块与第一宏块的像素差值,所述第一宏块为与所述目标宏块左边或者右边相邻的宏块,所述目标宏块为所述N个宏块中的任意一个宏块;

若所述目标宏块与所述第一宏块的像素差值大于0且小于预设阈值,则计算所述目标宏块与第二宏块的像素差值,所述第二宏块为与所述目标宏块上边或者下边相邻的宏块;

若所述目标宏块与第二宏块的像素差值大于0且小于预设阈值,则所述目标宏块为颜色渐变宏块。

在一个实施例中,所述颜色渐变区域确定模块用于:

将所述目标宏块的最后一列像素与第一宏块的第一列像素的差值作为所述目标宏块与所述第一宏块的像素差值或将所述第一宏块的最后一列像素和所述目标宏块的第一列像素的差值作为述目标宏块与所述第一宏块的像素差值。

在一个实施例中,所述颜色渐变区域确定模块用于:

将至少2个相邻的颜色渐变宏块所组成的矩形宏块区域作为颜色渐变区域和/或将至少2个相邻的颜色渐变宏块与一行和/或一列非颜色渐变宏块组成的矩形宏块区域作为颜色渐变区域。

根据本公开实施例的第四方面,提供一种图像解码装置,包括:

当前帧图像码流接收模块,用于接收编码端发送的当前帧图像的码流并从所述当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流;

颜色渐变区域码流解码模块,用于将所述颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,所述颜色渐变区域包括至少2个宏块;

边界滤波处理模块,用于确定所述颜色渐变区域中每两个相邻宏块的边界并将所述边界进行滤波处理,生成滤波后的颜色渐变区域;

文字宏块码流解码模块,用于将所述文字宏块的码流按照第二解码方式进行解码并将所述图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块;

当前帧图像生成模块,用于根据所述滤波后的颜色渐变区域、所述文字宏块以及所述图片宏块生成所述当前帧图像。

在一个实施例中,所述边界滤波处理模块用于:

将所述颜色渐变区域中每两个相邻宏块的相邻M行或相邻M列像素作为该两个相邻宏块的边界,M为大于1的整数。

在一个实施例中,所述边界滤波处理模块用于:

若该两个相邻宏块为上下相邻,则将该两个相邻宏块的相邻的M行像素的第一行像素与最后一行像素进行差值运算,得到第一像素差值;

根据所述第一像素差值与M得到像素渐变值,所述像素渐变值为所述第一像素差值除以M后取整的值;

针对除所述第一行像素外的M-1行像素中的每行像素,根据与该行像素相邻的上一行像素的像素值与所述像素渐变值确定该行像素的像素值。

在一个实施例中,所述边界滤波处理模块用于:

若该两个相邻宏块为左右相邻,则将该两个相邻宏块的相邻的M列像素的第一列像素与最后一列像素进行差值运算,得到第二像素差值;

根据所述第二像素差值与M得到像素渐变值,所述像素渐变值为所述第二像素差值除以M后取整的值;

针对除所述第一列像素外的M-1列像素中的每列像素,根据与该列像素相邻的上一列像素的像素值与所述像素渐变值确定该列像素的像素值。

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

附图说明

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

图1是本公开实施例提供的一种待编码的当前帧图像的示意图;

图2是现有技术提供的一种解码后的当前帧图像的示意图;

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

图4A是本公开实施例提供的一种颜色渐变区域的示意图一;

图4B是本公开实施例提供的一种颜色渐变区域的示意图二;

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

图6A是本公开实施例提供的一种两个相邻宏块边界的示意图;

图6B是本公开实施例提供的一种解码后的颜色渐变区域的像素示意图;

图6C是本公开实施例提供的一种滤波后颜色渐变区域的像素示意图;

图7是本公开实施例提供的一种解码后的当前帧图像的示意图;

图8是本公开实施例提供的一种图像解码系统的组件图;

图9是本公开实施例提供的一种图像编码装置的结构示意图;

图10是本公开实施例提供的一种图像解码装置的结构示意图。

具体实施方式

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

图3是本公开实施例提供的一种图像编码方法的流程图,该方法应用于编码端。如图3所示,该方法包括:

S301、将当前帧图像进行宏块划分,生成N个宏块,N为大于1的整数。

示例性地,将当前帧图像进行宏块划分,生成N个宏块以及该N个宏块中每个宏块的标识信息,该标识信息为该宏块的索引值,用于指示该宏块在该当前帧图像中的位置。以1920*1080大小的图像为例,将该1920*1080大小的图像进行宏块划分后,生成120*68个宏块,即每行共120个宏块,每列共68个宏块,且每个宏块的大小为16*16像素,即每个宏块包含每行共16像素(第0至第15),每列共16个像素(第0至第15)。则120*68个宏块的索引值分别为从0到8159。根据该宏块的索引值就可以得知该宏块所在的行、列位置。

S302、从该N个宏块中确定颜色渐变宏块并根据该颜色渐变宏块确定颜色渐变区域,该颜色渐变区域包括至少2个相邻的颜色渐变宏块。

下面对从如何N个宏块中确定颜色渐变宏块进行说明。

计算目标宏块与第一宏块的像素差值,该第一宏块为与该目标宏块左边或者右边相邻的宏块,该目标宏块为该N个宏块中的任意一个宏块;若该目标宏块与该第一宏块的像素差值大于0且小于预设阈值,则计算该目标宏块与第二宏块的像素差值,该第二宏块为与该目标宏块上边或者下边相邻的宏块;若该目标宏块与第二宏块的像素差值大于0且小于预设阈值,则该目标宏块为颜色渐变宏块。

示例性地,可以将该目标宏块的最后一列像素与第一宏块的第一列像素的差值作为该目标宏块与该第一宏块的像素差值或将该第一宏块的最后一列像素和该目标宏块的第一列像素的差值作为该目标宏块与该第一宏块的像素差值。

具体地,若该第一宏块为与该目标宏块右边相邻的宏块,则将该目标宏块的最后一列像素与第一宏块的第一列像素的差值作为该目标宏块与该第一宏块的像素差值。若该第一宏块为与该目标宏块左边相邻的宏块,则将该第一宏块的最后一列像素和该目标宏块的第一列像素的差值作为该目标宏块与该第一宏块的像素差值。

此处以宏块的大小为16*16像素为例进行说明。若第一宏块为与该目标宏块右边相邻的宏块,即该第一宏块在目标宏块的右侧且与该目标宏块相邻,则该目标宏块的第15列像素与第一宏块的第0列像素的差值作为该目标宏块与该第一宏块的像素差值。由于宏块的每列有16行,即每列共有16个像素,则将目标宏块的第15列第0行像素与第一宏块的第0列第0行像素的差值、目标宏块的第15列第1行像素与第一宏块的第0列第1行像素的差值、目标宏块的第15列第2行像素与第一宏块的第0列第2行像素的差值……目标宏块的第15列第15行像素与第一宏块的第0列第15行像素的差值均作为目标宏块与该第一宏块的像素差值,且目标宏块的第15列第0行像素与第一宏块的第0列第0行像素的差值、目标宏块的第15列第1行像素与第一宏块的第0列第1行像素的差值、目标宏块的第15列第2行像素与第一宏块的第0列第2行像素的差值……目标宏块的第15列第15行像素与第一宏块的第0列第15行像素的差值均大于0且小于预设阈值时,该目标宏块与该第一宏块的像素差值大于0且小于预设阈值。

同样地,若第一宏块为与该目标宏块左边相邻的宏块,即该第一宏块在目标宏块的左侧且与该目标宏块相邻,则该第一宏块的第15列像素与目标宏块的第0列像素的差值作为该目标宏块与该第一宏块的像素差值。由于每列共有16行,即每列共有16个像素,则将第一宏块的第15列第0行像素与目标宏块的第0列第0行像素的差值、第一宏块的第15列第1行像素与目标的第0列第1行像素的差值、第一宏块的第15列第2行像素与目标宏块的第0列第2行像素的差值……第一宏块的第15列第15行像素与目标的第0列第15行像素的差值均作为目标宏块与该第一宏块的像素差值,且第一宏块的第15列第0行像素与目标宏块的第0列第0行像素的差值、第一宏块的第15列第1行像素与目标宏块的第0列第1行像素的差值、第一宏块的第15列第2行像素与目标宏块的第0列第2行像素的差值……第一宏块的第15列第15行像素与目标宏块的第0列第15行像素的差值均大于0且小于预设阈值时,该目标宏块与该第一宏块的像素差值大于0且小于预设阈值。

下面对如何确定目标宏块与第二宏块的像素差值进行说明。示例性地,可以将该目标宏块的最后一行像素与第二宏块的第一行像素的差值作为该目标宏块与该第二宏块的像素差值或将该第二宏块的最后一行像素和该目标宏块的第一行像素的差值作为该目标宏块与该第二宏块的像素差值。

目标宏块与第二宏块的像素差值的具体计算方法与目标宏块与第一宏块的像素差值的计算方法类似,本实施例此处不再赘述。

下面对根据该颜色渐变宏块确定颜色渐变区域包括:

示例性地,将至少2个相邻的颜色渐变宏块所组成的矩形宏块区域作为颜色渐变区域和/或将至少2个相邻的颜色渐变宏块与一行和/或一列非颜色渐变宏块组成的矩形宏块区域作为颜色渐变区域。

例如图4A和图4B所示,若图4A中的宏块1/2/3为颜色渐变宏块,或宏块1/2/3/4为颜色渐变宏块,则这四个宏块拼成的矩形为颜色渐变区域。

图4B中,虚线标记的部分是颜色渐变宏块,X标记的区域是非颜色渐变宏块。则虚线标记颜色渐变宏块和X标记非颜色渐变宏块组成的宏块矩形区域为颜色渐变区域。需要说明的是,为了解码端解码重建时图像各个宏块像素的准确度考虑,划定颜色渐变区域时,颜色渐变区域内最多只允许包括一行和/或一列非颜色渐变宏块。

S303、将该颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流。

示例性地,将该颜色渐变区域按照霍夫曼huffman编码方式进行编码,生成该颜色渐变区域的码流。示例性地,对该颜色渐变区域进行编码同时,将该颜色渐变区域的标识信息进行编码,该颜色渐变区域的标识信息为该颜色渐变区域内的第一个宏块(即左上角的宏块)以及最后一个宏块(即右下角的宏块)的索引值进行编码。

S304、将除该颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流。

在本步骤中,将除颜色渐变区域外的其他宏块中的每个宏块根据其内容进行识别和分类,分为文字宏块和图片宏块,文字块是细节较多的宏块,图片宏块则是变化较为平缓的宏块。文字宏块需要清晰的显示,因此采用了调色板量化和huffman编码的编码方式对文字宏块进行编码,生成文字宏块的码流。图片宏块则采用联合图像专家小组(JointPhotographic Experts Group,,JPEG)编码的编码方式信息编码,生成图片宏块的码流。示例性地,对该文字宏块和图片宏块分别进行编码同时,将该文字宏块的索引值和图片宏块的索引值分别进行编码。

S305、根据该颜色渐变区域的码流、该文字宏块的码流以及图片宏块的码流生成该当前帧图像的码流并将该当前帧图像的码流发送至解码端。

在本步骤中,将该颜色渐变区域的码流、该文字宏块的码流以及图片宏块的码流进行打包,生成该当前帧图像的码流并将该当前帧图像的码流发送至解码端。示例性地,该颜色渐变区域的码流、该文字宏块的码流以及图片宏块的码流进行打包的同时,将该颜色渐变区域的标识信息、该文字宏块的索引值以及图片宏块的索引值进行打包并发送至解码端。

本公开实施例提供的图像编码方法,能够将当前帧图像进行宏块划分,生成N个宏块;从该N个宏块中确定颜色渐变宏块并根据该颜色渐变宏块确定颜色渐变区域,该颜色渐变区域包括至少2个相邻的颜色渐变宏块;将该颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流;将除该颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流;将除该颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流,颜色渐变区域内的宏块无论是哪种类型,均采用第一编码方式进行编码,能够避免如果一个颜色渐变区域中两个相邻部分的宏块的类型不同,则采取的编码方式不同,那么这两个相邻部分的宏块的边界在解码重建后将会有视觉上的不足,本应渐变显示的两个相邻部分的宏块呈现为有马赛克样式的界限,使用户能感知到两个相邻部分的宏块颜色之间不连续,用户体验较差的问题,提高了用户体验。

下面对如何对该当前帧图像的码流进行解码生成该当前帧图像进行说明。图5是本公开实施例提供的一种图像解码方法的流程图,该方法应用于解码端。如图5所示,该方法包括:

S501、接收编码端发送的当前帧图像的码流并从该当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流。

示例性地,当前帧图像的码流中包括文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流以及文字宏块的索引值、图片宏块的索引值以及颜色渐变区域的标识信息。解码端接收编码端发送的当前帧图像的码流后,从该当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流。

S502、将该颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,该颜色渐变区域包括至少2个宏块。

示例性地,将该颜色渐变区域的码流按照huffman编码方式对应的解码方式进行解码,生成该颜色渐变区域,该颜色渐变区域包括至少2个宏块,该颜色渐变区域为该至少2个宏块组成的宏块矩形区域,该至少2个宏块是编码端确定的颜色渐变宏块。

S503、确定该颜色渐变区域中每两个相邻宏块的边界并将该边界进行滤波处理,生成滤波后的颜色渐变区域。

下面对如何确定该颜色渐变区域中每两个相邻宏块的进行说明。

示例性地,将该颜色渐变区域中每两个相邻宏块的相邻M行或相邻M列像素作为该两个相邻宏块的边界,M为大于1的整数。

具体地,若该两个相邻宏块为上下相邻,则该两个相邻宏块的相邻M行像素为该两个相邻宏块的边界。若该两个相邻宏块为左右相邻,则该两个相邻宏块的相邻M列像素为该两个相邻宏块的边界。

此处以宏块的大小为16*16像素为例进行说明。宏块的大小为16*16像素,即每个宏块包含每行共16像素(第0至第15),每列共16个像素(第0至第15),则上下相邻的两个相邻宏块的边界为该两个相邻宏块的相邻6行像素,即上边宏块的第13至第15行像素以及下边宏块的第0行至第2行像素,左右相邻的两个相邻宏块的边界为该两个相邻宏块的相邻6列像素,即左边宏块的第13至第15列像素以及右边宏块的第0列至第2列像素。

下面对如何将所述边界进行滤波处理进行说明。

在一个实施例中,若该两个相邻宏块为上下相邻,则将该两个相邻宏块的相邻的M行像素的第一行像素与最后一行像素进行差值运算,得到第一像素差值;根据该第一像素差值与M得到像素渐变值,该像素渐变值为该第一像素差值除以M后取整的值;针对除该第一行像素外的M-1行像素中的每行像素,根据与该行像素相邻的上一行像素的像素值与该像素渐变值确定该行像素的像素值。

此处以宏块的大小为16*16像素为例进行说明。若该两个相邻宏块为上下相邻,则将两个相邻宏块的相邻的6行像素的第一行像素与最后一行像素进行差值运算,得到第一像素差值,即左边宏块的第13行像素与第右边宏块的第2行像素进行差值运算,得到第一像素差值。由于宏块的每列有16行,即每列共有16个像素,将每一列的该两行的像素各自做差值运算,得到每一列的该两行像素的第一像素差值。再将每一列的该两行像素的第一像素差值除以6,得到该每一列的该两行像素的像素渐变值。将两个相邻宏块的边界中将每一列的第一行像素保持不变,每一列的第二行像素的像素值为每一列的第一行像素的像素值减去像素渐变值,将每一列的第三行像素的像素值为每一列的第二行像素的像素值减去像素渐变值……每一列的第六行像素的像素值等于与每一列的第五行像素的像素值减去像素渐变值。

此处需要说明的是,还可以将两个相邻宏块的边界中每一列的最后一行像素保持不变,每一列的第五行像素的像素值为每一列的最后一行像素的像素值加上像素渐变值,每一列的第四行的像素为每一列的第五行像素的像素值加上像素渐变值……每一列的第一行像素的像素值等于每一列的第二行像素的像素值的像素值加上像素渐变值。

在另一个实施例中,若该两个相邻宏块为左右相邻,则将该两个相邻宏块的相邻的M列像素的第一列像素与最后一列像素进行差值运算,得到第二像素差值;根据该第二像素差值与M得到像素渐变值,该像素渐变值为该第二像素差值除以M后取整的值;针对除该第一列像素外的M-1列像素中的每列像素,根据与该列像素相邻的上一列像素的像素值与该像素渐变值确定该列像素的像素值。

左右相邻宏块的边界进行滤波处理的方式与上下相邻宏块的边界进行滤波处理的方式类似,本实施例此处不再赘述。

此处结合图6A至图6C进行说明。如图6A所示,两个相邻宏块边界虚线标记所示,宏块1和宏块2左右相邻,则宏块1和宏块2的边界为宏块1的第13列像素至宏块2的第2列像素。即宏块1的第13列像素为宏块1和宏块2边界的第一列像素,宏块2的第2列像素为宏块1和宏块2边界的最后一列像素,将每一行的该两列的像素各自做差值,然后除以6,得到每一行该两列像素的像素渐变值,然后将每一行的宏块1的第13列像素保持不变,除宏块1的第13列外的5列像素,将与每行该列像素相邻的每行上一列像素的像素值减去像素渐变值作为每行该列像素的像素值。如,滤波前的相邻两个宏块宏块1和宏块2的第1行相邻6个像素的像素值为:

72 71 71|65 65 65

则计算(65-72)/6=-1.17,取整后为1,即像素渐变值为1值。则对宏块1和宏块2的边界进行滤波处理后的像素值为:

72 71 70|69 68 67

可见,原来相邻宏块的第一行像素存在71到65的跳变,在平滑处理后,像素的边界被平滑了。

对图6A中,宏块1和宏块2相邻的每行的6个边界像素均采用上述方法处理,即可平滑宏块间的边界。

图6B是本公开实施例提供的一种解码后的颜色渐变区域的像素示意图。如图6B所示,是该颜色渐变区域由4个宏块组成,解码后该渐变区域4个宏块的像素值如图6B所示,边界1(宏块1和宏块2的边界)和边界2(宏块1和宏块3的边界)均存在像素跳变,例如都存在从71跳变到65。图6C是本公开实施例提供的一种滤波后颜色渐变区域的像素示意图。对该颜色渐变区域中4相邻宏块的边界进行滤波处理后,该4个宏块的像素值如图6C所示,边界像素跳变被消除了,边界的像素平滑变化。

S504、将该文字宏块的码流按照第二解码方式进行解码并将该图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块。

示例性地,将该文字宏块的码流按照与调色板量化和huffman编码的编码方式对应的解码方式进行解码,生成该文字宏块;将该图片宏块的码流按照与JPEG编码方式进行解码,生成该图片宏块。

S505、根据该滤波后的颜色渐变区域、该文字宏块以及该图片宏块生成该当前帧图像。

示例性地,将该滤波后的颜色渐变区域、该文字宏块以及该图片宏块分别按照该颜色渐变区域的标识信息、该文字宏块的索引值以及该图片宏块的索引值进行排列,生成该当前帧图像。

图7是本公开实施例提供的一种解码后的当前帧图像的示意图。采用本公开实施例提供的图像解码方式生成的当前帧图像如图7所示,在图7的图像部分,阶梯状颜色跳变已经消除,图像接近编码前的原始图像。如图7所示,椭圆部分圈住的部分为颜色渐变区域的相邻宏块的边界的像素,颜色渐变区域的相邻宏块的边界的像素跳变部分进行了平滑,颜色渐变区域的宏块边界的颜色跳变被消除。

本公开实施例提供的图像解码方法,能够接收编码端发送的当前帧图像的码流并从该当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流;将该颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,该颜色渐变区域包括至少2个宏块;确定该颜色渐变区域中每两个相邻宏块的边界并将该边界进行滤波处理,生成滤波后的颜色渐变区域;将该文字宏块的码流按照第二解码方式进行解码并将该图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块;根据该滤波后的颜色渐变区域、该文字宏块以及该图片宏块生成该当前帧图像,能够对确定该颜色渐变区域中每两个相邻宏块的边界并将该边界进行滤波处理,使得颜色渐变区域的相邻宏块的边界的颜色跳变被消除,用户能感知到颜色渐变区域的相邻宏块的边界的颜色连续,提高了用户体验。

下面结合图8,对本公开实施例提供的图像编解码方法作进一步详细说明。图8是本公开实施例提供的一种图像解码系统的组件图。如图8所示,各组件的作用如下:

801:待编码图像采集模块。本模块采集到的是计算机桌面的一帧图像,格式为YUV。

802:宏块识别与分类模块。本模块在逻辑上将全帧画面划分成16*16像素大小的宏块。并将每个宏块根据其内容进行识别和分类。本模块主要将宏块分为两类,文字块和图片块,文字块是细节较多的宏块,图片块则是变化较为平缓的宏块。文字块需要清晰的显示,因此采用了调色板量化和huffman编码的方法。图片块则采用JPEG编码。

803:渐变区域识别模块。在802进行宏块划分的同时,本模块将在全帧内搜索渐变颜色宏块。并在802执行完毕之后,将全帧内颜色渐变的宏块进行分析,形成矩形的渐变区域。全帧可能有多个渐变区域,这些区域将被放入编码的码流中。本模块的工作流程为:

1.在802模块进行宏块识别和分类时,同时分析每个宏块是否为渐变宏块。分析方法为:

将16*16个像素从左到右分析以判断是否每两个相邻的宏块的颜色差值都大于0且小于Delta,Delta可以根据实际应用的具体情况,取一个较小的值,例如2。如果都符合这个条件,则从上到下分析是否相邻的两个像素都大于0且小于Delta,如果也都符合,则该宏块为渐变宏块,否则不为渐变宏块。在402模块执行完全帧宏块分析后,则803模块就已经记录了全帧中所有的渐变宏块的位置。位置的记录方法可使用宏块的索引值,以1920*1080大小的图片为例,每行共120个宏块,每列共68个宏块,则宏块索引值为从0到8159。根据索引值就可以得到宏块所在的行、列位置。

2.在802模块工作完毕后,803模块分析所有的渐变宏块,生成多个渐变区域。生成方法为:

(1)如果两个渐变宏块横向或纵向相邻,则渐变区域将这两个宏块都包含进去;

(2)如果若干渐变宏块集体相邻,但他们形成的矩形中还含有一行或一列不全为渐变宏块的宏块,则渐变区域将划定为该矩形,将这行或这列非全渐变宏块也划定进去。这种情形如如图4A和图4B所示。

图4A中如果宏块1/2/3为渐变宏块,或宏块1/2/3/4为渐变宏块,则渐变区域为这四个宏块拼成的矩形。

图4B中,虚线标记的部分是渐变宏块,X标记的区域是非渐变宏块。这种情形则将外围的这几个非渐变宏块也划定在渐变区域内。需要说明的是,为了解码端重建的准确度考虑,划定渐变区域时,矩形内最多只允许涵盖一层非渐变宏块。

804:文字宏块编码模块。对所有的文字宏块进行编码,编码方法主要为调色板量化和huffman编码。

805:图片宏块编码模块。对所有的图片宏块进行编码,编码方法为JPEG。

806:渐变区信息生成模块。前面803模块生成了一个或多个渐变区,渐变区为矩形,含有多个宏块。806模块即将这些区域记录下来。对每个渐变区,记录其中第一个宏块和最后一个宏块的索引号即可。将所有渐变区的该信息使用huffman编码后,即为渐变区信息。

807:码流生成模块。将前面生成的文字块码流,图片块码流和渐变区信息数据打包,形成整帧编码码流。

解码端的组件为:

808:码流拆分模块。将码流分为文字块码流、图片块码流和渐变区域信息数据。前二者交给809模块进行解码。渐变区域信息数据交给810进行渐变区域滤波处理。

810:渐变区域滤波模块。该模块接收渐变区域信息,对区域内的宏块的边界进行滤波处理。图6A显示了一个四个宏块组成的渐变区域,下面以此图为例说明边界滤波方法。

首先定义宏块边界为:两个宏块交界的6行或6列像素。则在图6A中,有两个宏块边界,如虚线标记所示。以宏块1和宏块2的边界为例,当文字和图片块全部解完后,410模块分析宏块1的第13列像素和宏块2的第2列像素,将每一行的该两列的像素各自做差值,然后除以6,得到渐变值,然后将宏块1的第13列和宏块2的第2列视为极小值和极大值,将宏块1的第13列的像素值保持不变,其他列像素的像素值为与该列像素相邻的上一列像素减去像素渐变值。如,滤波前的相邻两个宏块的相邻6个像素值为:

72 71 71|65 65 65

则计算(72-65)/6=1.17,在工程计算时可以视为1,也可以按小数计算,然后舍入为整数像素值。则滤波后的值为:

72 71 70|69 68 67

可见,原来宏块间存在71到65的跳变,在平滑处理后,像素的边界被平滑了。

对图6A中,宏块1和宏块2相邻的每行的6个交界像素均采用上述方法处理,即可平滑宏块间的边界。最后811模块重建滤波后的图像。

图6B是四个宏块组成的渐变区域,可见边界1和边界2均存在像素跳变,例如都存在71跳变到65。图6C为滤波处理后的情况,可见像素跳变被消除了,边界得到了平滑。

本方案提出了一种能够处理渐变色区域中,不同类型宏块交界处形成的阶梯状视觉效果的现象。在计算机合成图像编码时,常常针对不同宏块使用不同编码方式,或同类宏块由于量化带来像素损失。在非渐变区域尚不明显还可接受,但在渐变颜色区域,形成的宏块边界对人眼则较为敏感。本方案采取在宏块分类时识别渐变区,在解码端对渐变区内的宏块边界进行平滑,增强了渐变区的视觉体验。

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

图9是本公开实施例提供一种图像编码装置的结构示意图,如图9所示,该装置90包括:

宏块划分模块901,用于将当前帧图像进行宏块划分,生成N个宏块,N为大于1的整数;

颜色渐变区域确定模块902,用于从所述N个宏块中确定颜色渐变宏块并根据所述颜色渐变宏块确定颜色渐变区域,所述颜色渐变区域包括至少2个相邻的颜色渐变宏块;

颜色渐变区域编码模块903,用于将所述颜色渐变区域按照第一编码方式进行编码,生成颜色渐变区域的码流;

文字宏块编码模块904,用于将除所述颜色渐变区域外的文字宏块按照第二编码方式进行编码并将除所述颜色渐变区域外的图片宏按照第三编码方式进行编码,分别生成文字宏块的码流以及图片宏块的码流;

当前帧图像码流生成模块905,用于根据所述颜色渐变区域的码流、所述文字宏块的码流以及所述图片宏块的码流生成所述当前帧图像的码流并将所述当前帧图像的码流发送至解码端。

在一个实施例中,所述颜色渐变区域确定模块903用于:

计算目标宏块与第一宏块的像素差值,所述第一宏块为与所述目标宏块左边或者右边相邻的宏块,所述目标宏块为所述N个宏块中的任意一个宏块;

若所述目标宏块与所述第一宏块的像素差值大于0且小于预设阈值,则计算所述目标宏块与第二宏块的像素差值,所述第二宏块为与所述目标宏块上边或者下边相邻的宏块;

若所述目标宏块与第二宏块的像素差值大于0且小于预设阈值,则所述目标宏块为颜色渐变宏块。

在一个实施例中,所述颜色渐变区域确定模块903用于:

将所述目标宏块的最后一列像素与第一宏块的第一列像素的差值作为所述目标宏块与所述第一宏块的像素差值或将所述第一宏块的最后一列像素和所述目标宏块的第一列像素的差值作为述目标宏块与所述第一宏块的像素差值。

在一个实施例中,所述颜色渐变区域确定模块903用于:

将至少2个相邻的颜色渐变宏块所组成的矩形宏块区域作为颜色渐变区域和/或将至少2个相邻的颜色渐变宏块与一行和/或一列非颜色渐变宏块组成的矩形宏块区域作为颜色渐变区域。

本公开实施例提供的图像编码装置,其实现过程和技术效果可以参见上述图3实施例,在此不再赘述。

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

图10是本公开实施例提供一种图像解码装置的结构示意图,如图10所示,该装置100包括:

当前帧图像码流接收模块1001,用于接收编码端发送的当前帧图像的码流并从所述当前帧图像的码流中分别确定文字宏块的码流、图片宏块的码流以及颜色渐变区域的码流;

颜色渐变区域码流解码模块1002,用于将所述颜色渐变区域的码流按照第一解码方式进行解码,生成颜色渐变区域,所述颜色渐变区域包括至少2个宏块;

边界滤波处理模块1003,用于确定所述颜色渐变区域中每两个相邻宏块的边界并将所述边界进行滤波处理,生成滤波后的颜色渐变区域;

文字宏块码流解码模块1004,用于将所述文字宏块的码流按照第二解码方式进行解码并将所述图片宏块的码流按照第三解码方式解码,分别生成文字宏块以及图片宏块;

当前帧图像生成模块1005,用于根据所述滤波后的颜色渐变区域、所述文字宏块以及所述图片宏块生成所述当前帧图像。

在一个实施例中,所述边界滤波处理模块用于:

将所述颜色渐变区域中每两个相邻宏块的相1003邻M行或相邻M列像素作为该两个相邻宏块的边界,M为大于1的整数。

在一个实施例中,所述边界滤波处理模块1003用于:

若该两个相邻宏块为上下相邻,则将该两个相邻宏块的相邻的M行像素的第一行像素与最后一行像素进行差值运算,得到第一像素差值;

根据所述第一像素差值与M得到像素渐变值,所述像素渐变值为所述第一像素差值除以M后取整的值;

针对除所述第一行像素外的M-1行像素中的每行像素,根据与该行像素相邻的上一行像素的像素值与所述像素渐变值确定该行像素的像素值。

在一个实施例中,所述边界滤波处理模块1003用于:

若该两个相邻宏块为左右相邻,则将该两个相邻宏块的相邻的M列像素的第一列像素与最后一列像素进行差值运算,得到第二像素差值;

根据所述第二像素差值与M得到像素渐变值,所述像素渐变值为所述第二像素差值除以M后取整的值;

针对除所述第一列像素外的M-1列像素中的每列像素,根据与该列像素相邻的上一列像素的像素值与所述像素渐变值确定该列像素的像素值。

本公开实施例提供的图像解码装置,其实现过程和技术效果可以参见上述图5实施例,在此不再赘述。

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

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

相关技术
  • 动态图像编解码方法以及动态图像编解码装置
  • 图像编解码方法和图像编解码装置
技术分类

06120112679993