CN113179408A - 一种图像编解码方法及装置 - Google Patents

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

Info

Publication number
CN113179408A
CN113179408A CN202110455124.9A CN202110455124A CN113179408A CN 113179408 A CN113179408 A CN 113179408A CN 202110455124 A CN202110455124 A CN 202110455124A CN 113179408 A CN113179408 A CN 113179408A
Authority
CN
China
Prior art keywords
macro blocks
pixel value
macro
block
data
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.)
Pending
Application number
CN202110455124.9A
Other languages
English (en)
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.)
Xian Wanxiang Electronics Technology Co Ltd
Original Assignee
Xian Wanxiang Electronics Technology 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 Xian Wanxiang Electronics Technology Co Ltd filed Critical Xian Wanxiang Electronics Technology Co Ltd
Priority to CN202110455124.9A priority Critical patent/CN113179408A/zh
Publication of CN113179408A publication Critical patent/CN113179408A/zh
Pending legal-status Critical Current

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/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • 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
    • H04N19/51Motion estimation or motion compensation
    • H04N19/563Motion estimation with padding, i.e. with filling of non-object values in an arbitrarily shaped picture block or region for estimation purposes

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本公开提供一种图像编解码方法及装置,涉及计算机图像处理技术领域,能够解决现有技术中的视频编解码技术在分层后进行编码而造成得冗余数据量多的问题。具体技术方案为:首先获取待编码的原始帧,并将原始帧划分为M个宏块;然后对M个宏块进行编码获得每个宏块的码流数据;将M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;最后根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。本公开用于图像编码和解码。

Description

一种图像编解码方法及装置
技术领域
本公开涉及计算机图像处理技术领域,尤其涉及一种图像编解码方法及装置。
背景技术
由于计算机合成图像需要覆盖办公、游戏等多种场景,在对图像编解码时,实际环境的带宽和帧率也有差异,尤其是在网络带宽有限的情形下,一般需要渐进的显示图像来提升用户体验。
现有的视频编解码技术是多基于JPEG(Joint Photographic Experts Group)格式编码的,特点是以块为单位进行DCT(Discrete Cosine Transform,离散余弦变换)变换和量化,对其结果进行分层传输。但是该技术中由于一个块的系数固定为64个,在分层的层数有所限制,且由于对JPEG的分层过程发生于JPEG的游程编码码环节之前,分层后还需要进行游程编码,分层越多,游程编码在每层数据后面添加标记符就越多,从而可能冗余数据量越多。
发明内容
本公开实施例提供一种图像编解码方法及装置,能够解决现有技术中的视频编解码技术在分层后进行编码而造成得冗余数据量多的问题。所述技术方案如下:
根据本公开实施例的第一方面,提供一种图像编码方法,该方法包括:
获取待编码的原始帧,并将所述原始帧划分为M个宏块;
对所述M个宏块进行编码获得每个宏块的码流数据;
将所述M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;
根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。
本公开实施例提供的图像编码方法,首先获取待编码的原始帧,并将原始帧划分为M个宏块;然后对M个宏块进行编码获得每个宏块的码流数据;将M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;最后根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。本公开提供的图像编码方法,可以设置任意数量的层数,能够适应于各种极端带宽情形,且编码后进行分层,不会带来任何冗余数据。
在一个实施例中,对所述M个宏块进行编码获得每个宏块的码流数据之前,所述方法还包括:
将所述M个宏块分为文字类和图片类,所述文字类用于指示像素值变化超过第一预设阈值的宏块,所述图片类用于指示像素值变化小于第二预设阈值的宏块;
所述对所述M个宏块进行编码包括:
对所述文字类的宏块采用文字块编码器进行编码;
对所述图片类的宏块采用图片编码器进行编码。
本公开实施例通过上述方法,根据不同的宏块像素值变化,将宏块分为文字类和图片类,有利于根据不同的宏块类型采用合适的编码器进行编码,编码效果更好。
在一个实施例中,上述方法还包括:
将所述M个宏块还分为其他类,对所述其他类的宏块采用扩展编码器进行编码。
本公开实施例通过上述方法,可以支持将来扩展的其他编码器对宏块进行编码。
在一个实施例中,将所述M个宏块分为N层包括:
将所述原始帧划分为N*N/2个宏块的第一模板块;
若N为偶数时,将所述第一模板块的左边第i行分别划分到第1到N-1的奇数递增层,将所述第一模板块的右边第i行分别划分到第N到2的偶数递减层,其中i≤N/2;
若N为奇数,将所述第一模板块的左边第i行分别划分到第1到N的奇数递增层,将所述第一模板块的右边第i行分别划分到第N-1到2的偶数递减层;
将所述第一模板块的第i+1行的左边部分依次向右偏移L个宏块,最右边的宏块循环至最左边;将所述第一模板块的第i+1行的右边部分则依次向左偏移L个宏块,最左边的宏块循环至最右边;
循环至完成所述第一模板块中每个宏块的分层。
本公开实施例通过上述方法,将原始帧宏块进行离散分层,当渐进式发送时,宏块间的位置越离散,填充后整帧效果相对越好,越有利于提升用户体验。
在一个实施例中,将所述M个宏块分为N层包括:
将所述原始帧划分为(2*N)*N个宏块的第二模板块;
将所述第二模板块的左边第j行分别划分到第1到N层,将所述第二模板块的右边第j行分别划分到第N到1层,其中j≤N;
将所述第二模板块的第j+1行的左边部分依次向右偏移K个宏块,最右边的宏块循环至最左边;将所述第二模板块的第j+1行的右边部分则依次向左偏移K个宏块,最左边的宏块循环至最右边;
循环至完成所述第二模板块中每个宏块的分层。
本公开实施例通过上述方法,将原始帧宏块进行离散分层,当渐进式发送时,宏块间的位置越离散,填充后整帧效果相对越好,越有利于提升用户体验。
在一个实施例中,根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端包括:
获取当前带宽数据和帧率;
根据所述当前带宽数据和帧率,获取当前帧允许发送的最大码流;
根据所述N层宏块中每层宏块的码流数据,将第A层至第B层之间的宏块发送给解码端,0<A≤B≤N。
本公开实施例通过上述方法,根据当前带宽数据和帧率,计算每帧的码流可用大小,从而确定当前帧编出的码流最多能发送多大。
根据本公开实施例的第二方面,提供一种图像解码方法,该方法包括:
接收编码端发送的编码数据;
对所述编码数据进行分层、解码获取分层数据;
根据所述分层数据对未接收到的空白宏块进行填充获取填充数据;
将所述分层数据和填充数据拼接获取帧数据。
本公开实施例提供的图像解码方法,首先接收编码端发送的编码数据;然后对所述编码数据进行分层、解码获取分层数据;根据所述分层数据对未接收到的空白宏块进行填充获取填充数据;最后将所述分层数据和填充数据拼接获取帧数据。本公开提供的图像编码方法,能够对解码端未接收到的宏块进行填充,显示效果好,用户体验好。
在一个实施例中,根据所述分层数据对未接收到的空白宏块进行填充包括:
根据空白宏块左侧和右侧最近的已解码的像素获取空白宏块中Xi的横向像素值;
根据空白宏块上侧和下侧最近的已解码的像素获取空白宏块中Xi的纵向像素值;
根据所述Xi的横向像素值和所述Xi的纵向像素值获取所述Xi的最终像素值;
根据所述Xi的最终像素值对所述空白宏块进行填充。
在一个实施例中,根据第一公式获取空白宏块Xi的横向像素值,所述第一公式包括:
Xi的横向像素值=Li的像素值+Dist LX*(Ri的像素值-Li的像素值)/Dist LR;
其中,所述Li像素值为所述空白宏块左侧最近的已解码的像素的值;所述Ri像素值为所述空白宏块右侧最近的已解码的像素的值;所述Dist LX为所述Li与所述Xi之间的距离,以像素为单位;所述Dist LR为所述Li与所述Ri之间的距离,以像素为单位。
根据第二公式获取空白宏块Xi的纵向像素值,所述第二公式包括:
Xi的纵向像素值=Ui的像素值+Dist UX*(Di的像素值-Ui的像素值)/Dist UD;
其中,所述Ui像素值为所述空白宏块上侧最近的已解码的像素的值;所述Di像素值为所述空白宏块下侧最近的已解码的像素的值;所述Dist UX为所述Ui与所述Xi之间的距离,以像素为单位;所述Dist UD为所述Ui与所述Di之间的距离,以像素为单位。
根据第三公式获取空白宏块Xi的最终像素值,所述第三公式包括:
Xi的最终像素值=(Xi的横向像素值+Xi的横向像素值)/2。
根据本公开实施例的第三方面,提供一种图像编解码装置,包括:编码端和解码端;
所述编码端,用于执行上述提到的编码方法;
所述解码端,用于执行上述提到的解码方法。
根据本公开实施例的第四方面,提供一种图像编解码设备,所述图像编解码设备包括处理器和存储器,所述存储器中存储有至少一条计算机指令,所述指令由所述处理器加载并执行以实现上述任一项所述的图像编解码方法中所执行的步骤。
根据本公开实施例的第五方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条计算机指令,所述指令由处理器加载并执行以实现上述任一项所述的图像编解码方法中所执行的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是本公开实施例提供的一种图像编码方法的流程图;
图2是本公开实施例提供的一种宏块分层的模板块;
图3是本公开实施例提供的原始帧和模板块划分的示意图;
图4是本公开实施例提供的另一种宏块分层的模板块;
图5是本公开实施例提供的一种图像解码方法的流程图;
图6是本公开实施例提供的解码端宏块填充算法涉及变量的原理图;
图7是本公开实施例提供的一种图像编解码装置的结构示意图;
图8是本公开实施例提供的一种图像编解码装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开实施例提供一种图像编码方法,如图1所示,该图像编码方法包括以下步骤:
步骤101、获取待编码的原始帧,并将原始帧划分为M个宏块;
具体的,采集待编码的原始帧图像,可以为YUV格式,可以将全帧像素划分为16*16像素大小的宏块,也可以划分为其他像素的宏块,本公开不做限定。
步骤102、对M个宏块进行编码获得每个宏块的码流数据;
在一个实施例中,对M个宏块进行编码获得每个宏块的码流数据之前,方法还包括:
将M个宏块分为文字类和图片类,文字类用于指示像素值变化超过第一预设阈值的宏块,图片类用于指示像素值变化小于第二预设阈值的宏块;
对M个宏块进行编码包括:
对文字类的宏块采用文字块编码器进行编码;
对图片类的宏块采用图片编码器进行编码。
本公开实施例通过上述方法,根据不同的宏块像素值变化,将宏块分为文字类和图片类,有利于根据不同的宏块类型采用合适的编码器进行编码,编码效果更好。具体的,将像素值变化平缓的宏块划分为JPEG类型,将梯度变化较为剧烈的宏块划分为文字类型。这种分类方式使得平缓区域利用JPEG编码得到较小码流,细节较多的宏块通过文字块编码器编码为失真程度较小的码流。文字块编码器主要使用Huffman编码器编码,解码使用Huffman解码器解码。
在一个实施例中,上述方法还包括:
将M个宏块还分为其他类,对其他类的宏块采用扩展编码器进行编码。
本公开实施例通过上述方法,不局限于某一类宏块,对所有类型的宏块均适用,且对后期新增类型的宏块和编码方式也能适用;兼容性和可扩展性强。例如,如果场景要求使用无损压缩编码,则可使用PNG等编码器编码。
步骤103、将M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;
在一个实施例中,将M个宏块分为N层包括:
将原始帧划分为N*N/2个宏块的第一模板块;
若N为偶数时,将第一模板块的左边第i行分别划分到第1到N-1的奇数递增层,将第一模板块的右边第i行分别划分到第N到2的偶数递减层,其中i≤N/2;
若N为奇数,将第一模板块的左边第i行分别划分到第1到N的奇数递增层,将第一模板块的右边第i行分别划分到第N-1到2的偶数递减层;
将第一模板块的第i+1行的左边部分依次向右偏移L个宏块,最右边的宏块循环至最左边;将第一模板块的第i+1行的右边部分则依次向左偏移L个宏块,最左边的宏块循环至最右边;
循环至完成第一模板块中每个宏块的分层。
如图2所示,展示了一个分层后的模板块,是以分为24层为例,如果分其他层数,也是类似的方法。图中共有24*12个小方块,每个代表一个宏块。其中的标号代表该宏块被划分到的层数。其划分方法为:
1.如果总层数N为偶数,则模板设计为N*N/2大小,第一行的左边N/2个宏块,分别划分到第1,3,5,...,N-1层中,即层号是从1开始的奇数递增顺序;右边N/2个宏块,分别划分到第24,22,20,...,2层中,即从第N号开始,是偶数递减关系。如果N为奇数,则左边是从1到N的奇数递增,右边是从N-1到2的偶数递减;
2.第二行同第一行,区别在于左边部分从1开始依次向右偏移一个宏块,到21截止,原21右边的23循环转至最左边;右边部分则依次向左偏移一个宏块,原24宏块循环转至最右边;
3.接下来的行数使用上述方法依次处理,直到全部循环回第一行的情形。
以上方法形成的24*12大小的宏块矩阵称为一个模板块。模板块相互拼接,最终大小匹配为全帧图像大小,如图3所示。这种分层方法,可以将全帧宏块较为离散的划分为24层。当渐进式发送时,宏块间的位置越离散,越有利于提升用户体验。因为解码端收到的宏块群是不全的,如果需要显示时,首先要将没有收到的宏块部分进行填充,这样才能显示出模糊的画面,如果不填充的话,就会形成有宏块的区域是真实图像块,未收到宏块的区域则是默认色,会出现影响体验的类似百叶窗效果。基于填充的思路,则收到的宏块分布越离散,则填充后整帧效果相对越好。
本公开实施例通过上述方法,将原始帧宏块进行离散分层,当渐进式发送时,宏块间的位置越离散,填充后整帧效果相对越好,越有利于提升用户体验。
在一个实施例中,将M个宏块分为N层包括:
将原始帧划分为(2*N)*N个宏块的第二模板块;
将第二模板块的左边第j行分别划分到第1到N层,将第二模板块的右边第j行分别划分到第N到1层,其中j≤N;
将第二模板块的第j+1行的左边部分依次向右偏移K个宏块,最右边的宏块循环至最左边;将第二模板块的第j+1行的右边部分则依次向左偏移K个宏块,最左边的宏块循环至最右边;
循环至完成第二模板块中每个宏块的分层。
如图4所示,展示了另一个分层后的模板块,图中共有48*24个小方块,每个代表一个宏块。将模板块从整体上平均分为左右两部分,层数编号在中轴线两侧对称分布;比如,左侧第一行从左往右依次编号为1、2......24,右侧第一行从右往左依次编号为1、2......24;然后,左侧第二行从左往右依次编号为24、1、2、3......23;右侧第二行从左往右依次编号为24、1、2、3......23;以此类推,直到完成每一个宏块的编号。
本公开实施例通过上述方法,将原始帧宏块进行离散分层,当渐进式发送时,宏块间的位置越离散,填充后整帧效果相对越好,越有利于提升用户体验。
实际使用中,以1920*1080分辨率的图像为例,全帧共有120*68=8160个宏块,每个宏块的大小和位置编号(0~8159)一一对应。基于这些数据,可以计算出当分为N层时,每层的宏块的数据量大小。理论上N可以等于1~8160之间的任何数字。本公开为了便于描述,可以分为8、16、24层。默认为分为24层。其中必须保证的一个要求为:当前帧允许发送的码流大小>分N层后的首层大小。如果该条件不满足的话,连第一层都无法传输,则解码端无法解码。在此基础上,根据设备的计算能力,如果计算能力较强,如个人计算PC机,则可采用24层机制。如果是嵌入式设备,计算能力较弱,则可选择8层机制。即分层越多,计算能力相对要求越高。
另一个条件是,当监测到网络情况发生波动时,则将最高层数设定为24层。因为网络波动带来的影响是每帧允许发送的数据量差异较大,此时为了保证当网络波动到很小时,也能发送若干层数据,如果层数太少,每层的数据量都相对较大,则无法实现该种保证。
还有一种情形,也可以设定为24层机制,即当用户正在快速滚动鼠标滚轮、或快速拖动窗口时,此时用户对于桌面上显示的具体内容不是非常关注,对于操作的平滑性较为关注,分层较多的话,可对每帧画面的层数选择弹性更大,用户在解码端看到的每帧的变化较为平滑。
步骤104、根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。
在一个实施例中,根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端包括:
获取当前带宽数据和帧率;
根据当前带宽数据和帧率,获取当前帧允许发送的最大码流;
根据N层宏块中每层宏块的码流数据,将第A层至第B层之间的宏块发送给解码端,0<A≤B≤N。
具体的,层数分的越多,在编码时的计算量也越大,因为编码器需要统计从第A层到第B层之间的宏块的数据量,以和当前每帧分到的流量带宽比较,在小于可用带宽的前提下,发送尽可能多的层数。
根据实时监测的当前网络带宽,结合实际帧率,计算出当前每帧的码流可用大小,计算方法为网络带宽除以帧率(每秒编出多少帧),确定当前这一帧编出的码流最多能发送多大,将本帧需要传输的码流通过网络发送至解码端。
渐进式的编解码,目的是提高用户体验,当源数据在变化时,如果带宽充足,则将每帧编出的全部数据全部传出,此时A等于1,B等于N,解码器全部解出,用户在解码端解码后的屏幕上看到的每帧都是完整清晰的图像,这是理想环境的情形。在带宽不足时,如果没有渐进式方案,当网络不足以发送某些帧编出的码流时,就会出现丢帧,用户看到的就是卡顿现象。而渐进式的意义在于,当编码端将一帧帧的数据编出时,可根据当前实际网络允许的带宽值,将当前帧编出的一部分码流发送出去,解码端收到后先解出,显示出可能不太清晰的一副画面,如果源画面是静止的,则在后续的时间点,编码端可将原来那帧没有传输完的数据量陆续传出,这样在解码端看到的就是渐渐清晰的过程。如果源端画面不停变化,例如用户在快速拖动一个窗口、一篇文档等,则由于带宽所限,每帧画面可能都只能传输极少一部分,用户看到的也是模糊的动图,直到画面停下来后,图像逐渐清晰。
本公开实施例提供的图像编码方法,首先获取待编码的原始帧,并将原始帧划分为M个宏块;然后对M个宏块进行编码获得每个宏块的码流数据;将M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;最后根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。本公开提供的图像编码方法,可以设置任意数量的层数,能够适应于各种极端带宽情形,且编码后进行分层,不会带来任何冗余数据。
基于上述图1对应的实施例提供的图像编码方法,本公开另一实施例提供一种图像解码方法,如图5所示。
步骤201、接收编码端发送的编码数据;
步骤202、对编码数据进行分层、解码获取分层数据;
具体的,采用文字块解码器、图片块解码器和其他块解码器分别对文字类、图片类和其他类宏块进行解码获得解码数据,并对各个宏块的分层情况进行管理。
步骤203、根据分层数据对未接收到的空白宏块进行填充获取填充数据;
在一个实施例中,根据分层数据对未接收到的空白宏块进行填充包括:
根据空白宏块左侧和右侧最近的已解码的像素获取空白宏块中Xi的横向像素值;
根据空白宏块上侧和下侧最近的已解码的像素获取空白宏块中Xi的纵向像素值;
根据Xi的横向像素值和Xi的纵向像素值获取Xi的最终像素值;
根据Xi的最终像素值对空白宏块进行填充。
在一个实施例中,根据第一公式获取空白宏块Xi的横向像素值,第一公式包括:
Xi的横向像素值=Li的像素值+Dist LX*(Ri的像素值-Li的像素值)/Dist LR;
其中,Li像素值为空白宏块左侧最近的已解码的像素的值;Ri像素值为空白宏块右侧最近的已解码的像素的值;Dist LX为Li与Xi之间的距离,以像素为单位;Dist LR为Li与Ri之间的距离,以像素为单位。
根据第二公式获取空白宏块Xi的纵向像素值,第二公式包括:
Xi的纵向像素值=Ui的像素值+Dist UX*(Di的像素值-Ui的像素值)/Dist UD;
其中,Ui像素值为空白宏块上侧最近的已解码的像素的值;Di像素值为空白宏块下侧最近的已解码的像素的值;Dist UX为Ui与Xi之间的距离,以像素为单位;Dist UD为Ui与Di之间的距离,以像素为单位。
根据第三公式获取空白宏块Xi的最终像素值,第三公式包括:
Xi的最终像素值=(Xi的横向像素值+Xi的横向像素值)/2。
如图6所示,L1~L16是一列像素,该列像素是某宏块的最右侧一列像素,该宏块解码端已经接收到;R1~R16是一列像素,该列像素是某宏块的最左一列像素,该宏块解码端也已经接收到。在L列和R列之间的宏块中的像素,是解码端没有收到的。那么解码端在将L和R列所在的宏块解码完毕之后,得到了L和R列像素的像素值。X1~X16是其中一列无法解码的像素值,它位于L列和R列之间某列。
1.计算L列和X列之间的距离,以像素为单位,记为Dist LX;
2.计算X列和R列之间的距离,以像素为单位,记为Dist XR;
3.计算L列和R列之间的距离,记为Dist LR。
X列中,每个像素的计算方法都相同,因此下面以Xi为例说明,其对应Li,Ri。
4.横向变化阶梯值=(Ri的像素值-Li的像素值)/Dist LR
5.Xi的横向像素值=Li的像素值+Dist LX*横向变化阶梯值
上面得到了Xi的横向像素值。还需要计算Xi的纵向像素值,其计算方法类似上面,方法是,获取该像素上方最近的一个已解码的像素的值Ui的像素值,以及该像素下方最近的一个已解码的像素的值Di的像素值,计算纵向变化阶梯值,再根据上面类似方法计算出Xi的纵向像素值。
6.计算U列和X列之间的距离,以像素为单位,记为Dist UX;
7.计算X列和D列之间的距离,以像素为单位,记为Dist XD;
8.计算U列和D列之间的距离,记为Dist UD。
X列中,每个像素的计算方法都相同,因此下面以Xi为例说明,其对应U i,Di。
9.横向变化阶梯值=(Di的像素值-Ui的像素值)/Dist UD
10.Xi的横向像素值=Ui的像素值+Dist UX*横向变化阶梯值。
最终Xi像素值=(Xi的横向像素值+Xi的纵向像素值)/2。
解码端中,对于没有收到的层中的宏块中的每个像素,都使用上面的填充算法进行填充,填充后的一帧就是解码后的渐进显示过程中的帧。
步骤204、将分层数据和填充数据拼接获取帧数据。
本公开实施例提供的图像解码方法,首先接收编码端发送的编码数据;然后对编码数据进行分层、解码获取分层数据;根据分层数据对未接收到的空白宏块进行填充获取填充数据;最后将分层数据和填充数据拼接获取帧数据。本公开提供的图像编码方法,能够对解码端未接收到的宏块进行填充,显示效果好,用户体验好。
基于上述图1和图5对应的实施例提供的图像编解码方法,本公开另一实施例提供一种图像编解码装置,如图7所示,包括:编码端301和解码端302;
编码端301,用于执行上述提到的编码方法;
解码端302,用于执行上述提到的解码方法。
具体的,如图8所示,编码端301包括图像采集模块101、宏块分类模块102、文字块编码器103、图片编码器104、其他块编码器105、分层数据管理器106、网络带宽监控模块107、码流大小预测模块108和传输发送模块109。
图像采集模块101,采集待编码的原始帧图像,通常为YUV格式;
宏块分类模块102,将全帧像素划分为16*16像素大小的宏块,并进行宏块分类,目的是将适合不同编码器编码的宏块区分出来。本方案是,将像素值变化平缓的宏块划分为JPEG类型,将梯度变化较为剧烈的宏块划分为文字类型。这种分类方式使得平缓区域利用JPEG编码得到较小码流,细节较多的宏块通过文字块编码器编码为失真程度较小的码流。文字块编码器主要使用Huffman编码器编码,解码使用Huffman解码器解码。
本模块在宏块分类后,将文字类宏块交给文字块编码器103编码,将图片块交给图片编码器104编码。其他块编码器105为本公开预留的编码器,目的是说明本渐进式方案可支持将来扩展的其他编码器。例如,如果场景要求使用无损压缩编码,则可使用PNG等编码器编码,这些就用其他块编码器105来代表。
分层数据管理器106,在各类宏块被编码完成后,每个宏块产生的码流大小将被记录在分层数据管理器106中。以1920*1080分辨率的图像为例,全帧共有120*68=8160个宏块,每个宏块的大小和位置编号(0~8159)一一对应。基于这些数据,106模块还可计算出当分为N层时,每层的宏块的数据量大小。理论上N可以等于1~8160之间的任何数字。本方案为了便于描述,可以支持3种分层方法,即分为8、16、24层。默认为分为24层。层数分的越多,在编码时的计算量也越大,因为编码器需要统计从第A层到第B层之间的宏块的数据量,以和当前每帧分到的流量带宽比较,在小于可用带宽的前提下,发送尽可能多的层数。
A/B/N的关系为:0<A<B≤N。
网络带宽监控模块107,实时监测当前网络带宽,单位为位每秒(bps);
码流大小预测模块108,网络带宽监控模块107统计到的是当前网络带宽,需要结合实际帧率,计算出当前每帧的码流可用大小,从而确定当前这一帧编出的码流最多能发送多大。由于帧率和网络带宽均为实时变化,该值无法做到完全精确,因此称为预测值。每帧的码流大小计算方法为,网络带宽除以帧率(每秒编出多少帧)。
传输发送模块109,将本帧需要传输的码流通过网络发送至解码端302。
分层数据管理器106将全帧的所有宏块分为N层,可以得到每个层的码流大小。
分层数据管理器106重点关注两方面的内容,一是如何分层;二是当前帧编码后,能够传多少层出去。下面描述编码端301确定当前帧分多少层。
需要码流大小预测模块108提供的当前帧允许发送的码流大小,记为FrameLenLimit。本方案中支持分8、16、24层三种规格,其中必须保证的一个要求为:FrameLenLimit>分N层后的首层大小。因为如果该条件不满足的话,连第一层都无法传输,则解码端302无法解码。在此基础上,根据设备的计算能力,如果计算能力较强,如PC机,则可采用24层机制。如果是嵌入式设备,计算能力较弱,则可选择8层机制。即分层越多,计算能力相对要求越高。
另一个条件是,当网络带宽监控模块107监测到网络情况发生波动时,会通过码流大小预测模块108反馈到分层数据管理器106上,分层数据管理器106则将最高层数设定为24层。因为网络波动带来的影响是每帧允许发送的数据量差异较大,此时为了保证当网络波动到很小时,也能发送若干层数据,如果层数太少,每层的数据量都相对较大,则无法实现该种保证。
另一方面,如图8所示,解码端302包括传输接收模块110、分层数据管理器111、文字块解码器112、图片块解码器113、其他块解码器114、后处理模块115、重建帧116。
传输接收模块110,用于接收编码端301发送的编码数据;
分层数据管理器111,用于对编码数据进行分层管理;
文字块解码器112,用于对编码数据中的文字块进行解码;
图片块解码器113,用于对编码数据中的图片进行解码;
其他块解码器114,用于对编码数据中的其他块进行解码;
后处理模块115,用于根据分层数据对未接收到的空白宏块进行填充获取填充数据;
重建帧116,用于将分层数据和填充数据拼接获取帧数据。
本公开实施例提供的图像编解码方法,能够根据带宽进行渐进式编解码和传输,使用本公开中的方法,可以在带宽受限的情况下,在不增加冗余信息的情况下对编码帧进行分层编码、解码。而且具有更强的兼容性,无论是对现有宏块类型还是将来可能加入的任意宏块类型均可适用。在解码端提高用户体验。
基于上述图1和图5对应的实施例中描述的图像编解码方法,本公开另一实施例还提供一种图像编解码设备,该图像编解码设备包括处理器和存储器,存储器中存储有至少一条计算机指令,该指令由处理器加载并执行以实现上述图1和图5对应的实施例中所描述的图像编解码方法。
基于上述图1和图5对应的实施例中所描述的图像编解码方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:Read Only Memory,ROM)、随机存取存储器(英文:Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储装置等。该存储介质上存储有至少一条计算机指令,用于执行上述图1和图5对应的实施例中所描述的图像编解码方法,此处不再赘述。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (10)

1.一种图像编码方法,其特征在于,所述方法包括:
获取待编码的原始帧,并将所述原始帧划分为M个宏块;
对所述M个宏块进行编码获得每个宏块的码流数据;
将所述M个宏块分为N层,获取每层宏块的码流数据,其中1≤N≤M;
根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端。
2.根据权利要求1所述的图像编码方法,其特征在于,所述对所述M个宏块进行编码获得每个宏块的码流数据之前,所述方法还包括:
将所述M个宏块分为文字类和图片类,所述文字类用于指示像素值变化超过第一预设阈值的宏块,所述图片类用于指示像素值变化小于第二预设阈值的宏块;
所述对所述M个宏块进行编码包括:
对所述文字类的宏块采用文字块编码器进行编码;
对所述图片类的宏块采用图片编码器进行编码。
3.根据权利要求2所述的图像编码方法,其特征在于,所述方法还包括:
将所述M个宏块还分为其他类,对所述其他类的宏块采用扩展编码器进行编码。
4.根据权利要求1所述的图像编码方法,其特征在于,所述将所述M个宏块分为N层包括:
将所述原始帧划分为N*N/2个宏块的第一模板块;
若N为偶数时,将所述第一模板块的左边第i行分别划分到第1到N-1的奇数递增层,将所述第一模板块的右边第i行分别划分到第N到2的偶数递减层,其中i≤N/2;
若N为奇数,将所述第一模板块的左边第i行分别划分到第1到N的奇数递增层,将所述第一模板块的右边第i行分别划分到第N-1到2的偶数递减层;
将所述第一模板块的第i+1行的左边部分依次向右偏移L个宏块,最右边的宏块循环至最左边;将所述第一模板块的第i+1行的右边部分则依次向左偏移L个宏块,最左边的宏块循环至最右边;
循环至完成所述第一模板块中每个宏块的分层。
5.根据权利要求1所述的图像编码方法,其特征在于,所述将所述M个宏块分为N层包括:
将所述原始帧划分为(2*N)*N个宏块的第二模板块;
将所述第二模板块的左边第j行分别划分到第1到N层,将所述第二模板块的右边第j行分别划分到第N到1层,其中j≤N;
将所述第二模板块的第j+1行的左边部分依次向右偏移K个宏块,最右边的宏块循环至最左边;将所述第二模板块的第j+1行的右边部分则依次向左偏移K个宏块,最左边的宏块循环至最右边;
循环至完成所述第二模板块中每个宏块的分层。
6.根据权利要求1所述的图像编码方法,其特征在于,所述根据当前带宽数据,将N层宏块中的至少一层宏块发送至解码端包括:
获取当前带宽数据和帧率;
根据所述当前带宽数据和帧率,获取当前帧允许发送的最大码流;
根据所述N层宏块中每层宏块的码流数据,将第A层至第B层之间的宏块发送给解码端,0<A≤B≤N。
7.一种图像解码方法,其特征在于,所述方法包括:
接收编码端发送的编码数据;
对所述编码数据进行分层、解码获取分层数据;
根据所述分层数据对未接收到的空白宏块进行填充获取填充数据;
将所述分层数据和填充数据拼接获取帧数据。
8.根据权利要求7所述的图像解码方法,其特征在于,所述根据所述分层数据对未接收到的空白宏块进行填充包括:
根据空白宏块左侧和右侧最近的已解码的像素获取空白宏块中Xi的横向像素值;
根据空白宏块上侧和下侧最近的已解码的像素获取空白宏块中Xi的纵向像素值;
根据所述Xi的横向像素值和所述Xi的纵向像素值获取所述Xi的最终像素值;
根据所述Xi的最终像素值对所述空白宏块进行填充。
9.根据权利要求8所述的图像解码方法,其特征在于,根据第一公式获取空白宏块Xi的横向像素值,所述第一公式包括:
Xi的横向像素值=Li的像素值+Dist LX*(Ri的像素值-Li的像素值)/Dist LR;
其中,所述Li像素值为所述空白宏块左侧最近的已解码的像素的值;所述Ri像素值为所述空白宏块右侧最近的已解码的像素的值;所述Dist LX为所述Li与所述Xi之间的距离,以像素为单位;所述Dist LR为所述Li与所述Ri之间的距离,以像素为单位;
根据第二公式获取空白宏块Xi的纵向像素值,所述第二公式包括:
Xi的纵向像素值=Ui的像素值+Dist UX*(Di的像素值-Ui的像素值)/Dist UD;
其中,所述Ui像素值为所述空白宏块上侧最近的已解码的像素的值;所述Di像素值为所述空白宏块下侧最近的已解码的像素的值;所述Dist UX为所述Ui与所述Xi之间的距离,以像素为单位;所述Dist UD为所述Ui与所述Di之间的距离,以像素为单位;
根据第三公式获取空白宏块Xi的最终像素值,所述第三公式包括:
Xi的最终像素值=(Xi的横向像素值+Xi的横向像素值)/2。
10.一种图像编解码装置,其特征在于,包括:编码端和解码端;
所述编码端,用于执行权利要求1-6中的方法;
所述解码端,用于执行权利要求7-9中的方法。
CN202110455124.9A 2021-04-26 2021-04-26 一种图像编解码方法及装置 Pending CN113179408A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110455124.9A CN113179408A (zh) 2021-04-26 2021-04-26 一种图像编解码方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110455124.9A CN113179408A (zh) 2021-04-26 2021-04-26 一种图像编解码方法及装置

Publications (1)

Publication Number Publication Date
CN113179408A true CN113179408A (zh) 2021-07-27

Family

ID=76926223

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110455124.9A Pending CN113179408A (zh) 2021-04-26 2021-04-26 一种图像编解码方法及装置

Country Status (1)

Country Link
CN (1) CN113179408A (zh)

Similar Documents

Publication Publication Date Title
US11659184B2 (en) Method and device for video coding and decoding
AU2006250203B2 (en) Method of transmitting picture information when encoding video signal and method of using the same when decoding video signal
CN102150428B (zh) 用于使用自适应分段的视频编码的系统和方法
CN101888566B (zh) 立体视频编码率失真性能估计方法
CN111837397A (zh) 基于子图像码流的视角相关视频编码中的错误消除的码流指示
CN102726048B (zh) 用于视频编码和解码的方法
US6128041A (en) Method and apparatus for binary shape encoding
CN103458241A (zh) 用于多层视频编码的速率控制方法和设备
CN103327341A (zh) 图像处理装置以及图像处理方法
CN109151481B (zh) 图片的传输和接收的方法、装置、系统、设备和介质
CN101578872A (zh) 用于以高级别语法表达的多视点信息的方法和装置
KR101008525B1 (ko) 디지털 비디오 시퀀스 인코딩 방법, 인코더용 컴퓨터 프로그램이 기록된 컴퓨터 판독 가능한 기록 매체, 컴퓨터용 컴퓨터 프로그램이 기록된 컴퓨터 판독 가능한 기록 매체, 디지털 비디오 시퀀스를 인코딩하는 인코더 및 비디오 통신 시스템
CN101584220B (zh) 对视频信号进行编码的方法和系统、编码的视频信号、对视频信号进行解码的方法和系统
US20230262221A1 (en) Method and device for video coding and decoding
CN112954398A (zh) 编码方法、解码方法、装置、存储介质及电子设备
KR100255754B1 (ko) 이진 형상 신호 부호화 방법
CN111464812B (zh) 编码解码的方法、系统、装置、存储介质及处理器
CN116848843A (zh) 可切换的密集运动向量场插值
CN105519108A (zh) 量化矩阵编码的加权预测方法和装置
CN113179408A (zh) 一种图像编解码方法及装置
CN102474616A (zh) 用于生成、解码和转码经编码的视频数据流的方法和装置
KR100256022B1 (ko) 이진형상신호부호화에있어서의모드부호화방법
KR20030060009A (ko) 사람의 시각적 특성을 고려한 적응적 부호화 방법 및 장치
TWI441521B (zh) 壓縮視頻資料流交換方法
CN114641793A (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