图像的传输方法及装置与流程

文档序号:26708882发布日期:2021-09-22 18:37阅读:190来源:国知局
图像的传输方法及装置与流程

1.本技术涉及图像编码及解码领域,具体而言,涉及一种图像的传输方法及装置、非易失性存储介质、处理器。


背景技术:

2.现有的图像的渐进式编解码方法基本都是针对有损压缩的,例如jpeg的渐进式方案,是对量化后的系数进行渐进传输。而无损压缩则是在保证带宽的情况下直接进行熵编码,一般没有渐进式的方案,对带宽要求较高。
3.针对现有的图像无损压缩编解码方法对带宽要求高的问题,目前尚未提出有效的解决方案。


技术实现要素:

4.本技术实施例提供了一种图像的传输方法及装置、非易失性存储介质、处理器,以至少解决现有的图像无损压缩编解码方法对带宽要求高的技术问题。
5.根据本技术实施例的一个方面,提供了一种图像的传输方法,包括:获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。
6.可选地,依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块,包括:对各个宏块进行编码后得到的基本层数据进行解码,得到各个宏块对应的重建宏块;将各个宏块的原宏块数据减去各个宏块对应的重建宏块的数据,得到各个宏块对应的残差宏块。
7.可选地,将各个宏块的原宏块数据减去各个宏块对应的重建宏块的数据,得到各个宏块对应的残差宏块,包括:将各个宏块的像素值减去各个宏块对应的重建宏块的像素值,得到各残差宏块的残差值,其中,各残差宏块的残差值为n行
×
m列的残差值矩阵,n和m均为大于或等于1的自然数。
8.可选地,分别对各个宏块对应的残差宏块进行编码,包括:对各残差宏块进行分层,其中,每个分层包括各残差宏块的残差值矩阵中的一行残差值或者多行残差值;依据当前网络可用带宽和基本层数据所占的流量的差值确定扩展层数据的可用流量;依据扩展层数据的可用流量确定各残差宏块的可编码层数;按照各残差宏块的可编码层数分别对各残差宏块进行编码。
9.可选地,依据扩展层数据的可用流量确定各残差宏块的可编码层数,包括:
10.根据已传输层数矩阵,确定当前扩展层数据中各残差宏块的已传输层数中的最小
已传输层数a;
11.将可编码层数i的初始值置为a,将总预测码流b置为0;
12.通过以下流程确定可编码层数i:
13.步骤1:确定所有已传输层数小于等于i的目标残差宏块的第i+1层残差数据的总码流b,同时,重新确定总预测码流b:b=0+b;
14.步骤2:如果b小于扩展层数据的可用流量,且当前可编码层数i小于各残差宏块的最大分层层数,则更新当前可编码层数i为:i=i+1,同时转至步骤1继续执行;如果b大于扩展层数据的可用流量或者当前可编码层数i等于最大分层层数,则确定可编码层数为i,并结束当前流程。
15.可选地,通过以下方式确定所有已传输层数为i的目标残差宏块的第i+1层残差数据的总码流:分别将各残差宏块的第i+1层残差值映射为符号值;从预设残差码表中查找第i+1层残差值中每个残差值对应的码长;将各残差宏块的第i+1层残差值中每个残差值对应的码长相加,得到所有已传输层数为i的目标残差宏块的第i+1层残差数据的总码流。
16.可选地,依据所述扩展层数据的可用流量确定各所述残差宏块的可编码层数之前,上述方法还包括:确定已传输层数矩阵,其中,已传输层数矩阵用于记录已经编码的前一帧图像中各残差宏块已编码的层数;将正在进行编码的当前帧图像中各宏块和前一帧图像中对应的各宏块进行比对,确定出当前帧图像中相对于前一帧图像发生变化的目标宏块;在已传输层数矩阵中,将与各个目标宏块对应位置上的已传输层数置为0,从而对已传输层数矩阵进行更新。
17.可选地,确定更新后的已传输层数矩阵中的最小已传输层数,包括:如果当前帧图像相对于前一帧图像至少有一个残差宏块发生变化,确定最小已传输层数为0;如果当前帧图像相对于前一帧图像未发生变化,将已传输层数矩阵中的所有数值进行排序,将已传输层数矩阵中的最小数值作为最小已传输层数。
18.可选地,按照各残差宏块的可编码层数分别对各残差宏块进行编码,包括:针对当前扩展层数据中,所有已传输层数小于可编码层数的残差宏块,对其已传输层数至可编码层数之间所有未传输的层数据进行编码。
19.根据本技术实施例的另一方面,还提供了另一种图像的传输方法,包括:获取编码之后的图像;将编码之后的图像分解为基本层数据和扩展层数据,其中,基本层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
20.可选地,对扩展层数据解码,包括:如果待解码的当前帧图像中的残差宏块和下一帧图像中的残差宏块相同,记录待解码的当前帧图像中的残差宏块已经完成解码的残差值的层号n;在对下一帧图像中的残差宏块进行解码时,从下一帧图像中的残差宏块的第n+1层的残差值进行解码,直至将下一帧中的残差宏块的全部残差值解码完成。
21.根据本技术实施例的另一方面,还提供了一种图像的传输装置,包括:第一获取模块,用于获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;第一编码模块,用于分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码
数据作为基本层数据;确定模块,用于依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;第二编码模块,用于分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。
22.根据本技术实施例的另一方面,还提供了另一种图像的传输装置,包括:第二获取模块,用于获取编码之后的图像;分解模块,用于将编码之后的图像分解为基本层数据和扩展层数据,其中,基本层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;解码模块,用于分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
23.根据本技术实施例的再一方面,还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行以上的图像的传输方法。
24.根据本技术实施例的再一方面,还提供了一种处理器,处理器用于运行存储在存储器中的程序,其中,程序运行时执行以上的图像的传输方法。
25.在本技术实施例中,采用获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端的方式,通过结合实际可用带宽,在有损的基础上进行渐进式编码和传输残差而实现的无损编码,从而实现了能够在有限带宽的情况下,实现对图像真正的无损编解码的技术效果,进而解决了现有的图像无损压缩编解码方法对带宽要求高技术问题。
附图说明
26.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
27.图1是根据本技术实施例的一种图像的传输方法的流程图;
28.图2是根据本技术实施例的一种单个残差宏块的示意图;
29.图3a是根据本技术实施例的一种已传输层数矩阵的示意图;
30.图3b是对图3a所示的已传输层数矩阵进行更新后的示意图;
31.图3c是根据本技术实施例的一种已传输层数矩阵的示意图;
32.图3d是根据本技术实施例的一种已传输层数矩阵的示意图;
33.图3e是根据本技术实施例的一种已传输层数矩阵的示意图;
34.图4是根据本技术实施例的一种残差的huffman码表的示意图;
35.图5是根据本技术实施例的另一种图像的传输方法的流程图;
36.图6是根据本技术实施例的一种图像编码端和解码端的结构示意图;
37.图7a是根据本技术实施例的一种图像编码端的工作流程图;
38.图7b是根据本技术实施例的一种图像解码端的工作流程图;
39.图8是根据本技术实施例的一种图像的传输装置的结构框图;
40.图9是根据本技术实施例的另一种图像的传输装置的结构框图。
具体实施方式
41.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
42.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
43.根据本技术实施例,提供了一种图像的传输方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
44.本技术提供了一种能够结合实际可用带宽,在有损的基础上进行渐进式编码和传输残差而实现的无损编码方法。使用该方法,不局限于传统无损方案要求的高带宽,将渐进式的思想应用在其中,实现了带宽受限情况下的无损方案。主要技术特点为:
45.1.在带宽受限时,先传输基本层,即有损的数据;
46.2.在编码基本层时,会对每个宏块产生残差,一旦带宽有余,则能够将残差编码并以扩展层的形式发送至解码端,解码端将解码残差后形成的数据和对应的基本层重建数据进行叠加,形成真正的无损重建像素;
47.3.方案对残差进行了逻辑分层,在编码残差数据时,会根据当前实际带宽和残差数据大小进行预测,只编码当前带宽能够容纳的残差层数;如果原始图像静止,则后续的残差层数则会逐渐继续传输,在解码端看到的就是逐渐清晰,直到残差全部传输完毕的一帧无损图像。
48.下面对上述方案进行详细说明:
49.图1是根据本技术实施例的一种图像的传输方法的流程图,如图1所示,该方法包括如下步骤:
50.步骤s102,获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;
51.宏块,是视频编码技术中的一个基本概念。通过将画面分成一个个大小不同的块,在不同位置实行不同的压缩策略。
52.在本步骤中,每次采集一帧yuv图像,作为编码的数据源(即上述待发送的图像)。“yuv”是指亮度参数和色度参数分开表示的像素格式。“y”表示明亮度,也就是灰度值,而“u”和“v”表示的是色度,作用是描述影像色彩及饱和度,用于指定像素的颜色。
53.步骤s104,分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;
54.根据本技术的一个可选的实施例,在执行步骤s102和步骤s104时,将全帧图像分为16x16单位尺寸的宏块,根据每个宏块的特点进行分类,例如将像素变化平缓的宏块分类为图片块,使用jpeg编码,以实现较低码流;将细节丰富的宏块分类为文字宏块,使用huffman压缩并使用调色板量化,以实现较为清晰的细节展示。同时,还可支持其他扩展编码模块。本方案的一个优点是,不论什么编码模块,都可以产生相同格式的残差,都可使用本方案进行渐进式残差传输以实现无损。
55.可选地,对全帧的文字宏块进行编码,主要采用huffman编码和调色板量化方法。对全帧的图片宏块进行编码,主要采用jpeg编码方法。
56.对上述宏块进行编码产生的数据称为基本层数据。单纯的基本层数据也能够解码,并产生一帧有损的图像,在带宽极其受限以至于不能传输任何残差的情况下,仅将基本层数据发送到解码端。基本层数据的意思是不带任何残差数据的编码流。假如彻底摒弃残差数据,编出带量化损失的有损码流,那这码流就叫基本层。基本层单独解码出来就能显示图像,只不过有损失而已。相应的,下文中提到的残差编成的码流部分叫扩展层,扩展层数据的意思就是有没有都行,是扩展型的,有了更好。扩展层数据全传完就是无损传输。
57.步骤s106,依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;
58.在执行步骤s106时,将编码后的宏块再解码,产生重建宏块。将原始宏块的数据减去重建宏块的数据,得到该原始宏块对应的残差宏块。
59.图2是根据本技术实施例的一种单个残差宏块的示意图,残差宏块就是扩展层编码的数据源。
60.步骤s108,分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。
61.将基本层数据和扩展层数据融合产生的最终码流,发送到解码端。
62.通过上述步骤,通过结合实际可用带宽,在有损的基础上进行渐进式编码和传输残差而实现的无损编码,从而实现了能够在有限带宽的情况下,实现对图像真正的无损编解码的技术效果。
63.根据本技术的一个可选的实施例,步骤s106通过以下方法实现:对各个宏块进行编码后得到的基本层数据进行解码,得到各个宏块对应的重建宏块;将各个宏块的原宏块数据减去各个宏块对应的重建宏块的数据,得到各个宏块对应的残差宏块。
64.根据本技术的另一个可选的实施例,将各个宏块的原宏块数据减去各个宏块对应的重建宏块的数据,得到各个宏块对应的残差宏块,包括以下步骤:将各个宏块的像素值减去各个宏块对应的重建宏块的像素值,得到各残差宏块的残差值,其中,各残差宏块的残差值为n行
×
m列的残差值矩阵,n和m均为大于或等于1的自然数。
65.参见图2,图2所示的16
×
16的矩阵中的每个元素都是一个像素在编码后产生的残
差值。
66.在本技术的一些可选的实施例中,执行步骤s108时分别对各个宏块对应的残差宏块进行编码,包括以下步骤:对各残差宏块进行分层,其中,每个分层包括各残差宏块的残差值矩阵中的一行残差值或者多行残差值;依据当前网络可用带宽和基本层数据所占的流量的差值确定扩展层数据的可用流量;依据扩展层数据的可用流量确定各残差宏块的可编码层数;按照各残差宏块的可编码层数分别对各残差宏块进行编码。
67.对于残差值的分层方法,可以有很多种。本技术实施例采取的是将残差值分为16层,即每个宏块的每1行像素产生的残差值作为1层。图2中所示的16x16的矩阵中的每个元素都是一个像素的在编码后产生的残差。每行构成一层,一共分为16层,如图中粗线圈中的16个残差为第1层。全帧的所有残差宏块都按这种方式来分层。
68.需要说明的是,还可以将图2所示的矩阵中的每两行元素或者多行元素设置为一层。
69.在本技术的一些可选的实施例中,依据扩展层数据的可用流量确定各残差宏块的可编码层数,包括以下步骤:
70.根据已传输层数矩阵,确定当前扩展层数据中各残差宏块的已传输层数中的最小已传输层数a;
71.将可编码层数i的初始值置为a,将总预测码流b置为0;
72.通过以下流程确定可编码层数i:
73.步骤1:确定所有已传输层数小于等于i的目标残差宏块的第i+1层残差数据的总码流b,同时,重新确定总预测码流b:b=0+b;
74.步骤2:如果b小于扩展层数据的可用流量,且当前可编码层数i小于各残差宏块的最大分层层数,则更新当前可编码层数i为:i=i+1,同时转至步骤1继续执行;如果b大于扩展层数据的可用流量或者当前可编码层数i等于最大分层层数,则确定可编码层数为i,并结束当前流程。
75.在本技术的另一些可选的实施例中,通过以下方式确定所有已传输层数为i的目标残差宏块的第i+1层残差数据的总码流:分别将各残差宏块的第i+1层残差值映射为符号值;从预设残差码表中查找第i+1层残差值中每个残差值对应的码长;将各残差宏块的第i+1层残差值中每个残差值对应的码长相加,得到所有已传输层数为i的目标残差宏块的第i+1层残差数据的总码流。
76.上述方法提供了如何预测出可编到残差层数的实现方法,具体地,从编解码系统外的网络带宽监测模块读取当前可用带宽,将此带宽减去基本层数据所占的流量值,即扩展层码流可占的流量。
77.根据本技术的一个可选的实施例,依据所述扩展层数据的可用流量确定各所述残差宏块的可编码层数之前,还需要确定已传输层数矩阵,其中,已传输层数矩阵用于记录已经编码的前一帧图像中各残差宏块已编码的层数;将正在进行编码的当前帧图像中各宏块和前一帧图像中对应的各宏块进行比对,确定出当前帧图像中相对于前一帧图像发生变化的目标宏块;在已传输层数矩阵中,将与各个目标宏块对应位置上的已传输层数置为0,从而对已传输层数矩阵进行更新。
78.已传输层数矩阵会在编码过程中不断更新,这里所获取的已传输层数矩阵是编码
前一帧图像后得到的已传输层数矩阵。已传输层数矩阵用于记录前一帧中每一个残差宏块已经传输的层数,比如,假设一帧图像有16个残差宏块,每个宏块分为16层,则已传输层数矩阵可以示意如下,参照图3a,第一行第一列宏块的已传输层数为10(也就是说该宏块在之前已经传输到第10层数据了),第一行第二列宏块的已传输层数为10,以此类推。
79.将当前帧图像与前一帧图像进行宏块比对,确定出当前帧图像中相对于前一帧发生变化的目标宏块,在已传输层数矩阵中,将与各个所述目标宏块对应位置上的已传输层数置为0,从而对已传输层数矩阵进行更新。
80.具体的,宏块比对的方式是:将对应位置上的两个宏块中对应位置上的像素点进行比对,如果所有像素点都相同则认为宏块没有发生变化,否则,认为宏块发生了变化。实际应用时,为了提高比对速度,可以只对像素点的y分量进行比较。
81.如果当前帧图像中某一个宏块相对于前一帧图像中对应的宏块发生变化,将该宏块(即上文中的目标宏块)对应的残差宏块在已传输层数矩阵中对应的数值置0;如果当前帧图像中某一个宏块相对于前一帧图像中对应的宏块未发生变化,该宏块对应的残差宏块在已传输层数矩阵中对应的数值不变。
82.具体的,将发生变化的宏块的已传输层数直接置为0,其它未发生变化的宏块的已传输层数不变。更新后的已传输层数矩阵将替换掉原先的已传输层数矩阵。
83.以图3a举例来说,有四个宏块发生了的变化,相应的将图3a中对应位置上的宏块的已传输层数置为0,则图3a的已传输矩阵变成图3b中的已传输层数矩阵。
84.已传输层数矩阵用于标记相应位置上的残差宏块当前传输到的层数,之所以在宏块发生变化时对当前传输层数置0,是因为当宏块发生变化时,则需要对当前宏块重新从第1层开始进行传输,而不能接着上一帧图像中相应位置上的宏块已传输层数继续进行传输,因此,将当前宏块的已传输层数置为0也表示当前残差宏块还没有进行传输。
85.根据本技术的另一个可选的实施例,确定更新后的已传输层数矩阵中的最小已传输层数,包括:如果当前帧图像相对于前一帧图像至少有一个残差宏块发生变化,确定最小已传输层数为0;如果当前帧图像相对于前一帧图像未发生变化,将已传输层数矩阵中的所有数值进行排序,将已传输层数矩阵中的最小数值作为最小已传输层数。
86.在本步骤中,确定出当前已传输层数矩阵中的最小已传输层数。具体的,确定最小已传输层数的方法是:如果当前帧相对于前一帧有至少一个宏块发生变化,则将最小已传输层数直接置为0。如果当前帧相对于前一帧没有宏块发生变化,则按照以下方式确定最小已传输层数:将当前已传输层数矩阵中的所有数值进行排序;将最小的数值确定为最小已传输层数。
87.下面以一个具体示例对上文中预测各残差宏块的可编码层数的方法做进行详细说明:
88.假设总传输层数为12,图3a为当前接收到的已传输层数矩阵,对图3a所示的已传输层数矩阵进行更新得到当前已传输层数矩阵为图3b。
89.此时,根据更新后的已传输层数矩阵确定各残差宏块的可编码层数包括以下步骤:
90.1)由于最小已传输层数i=0,将当前传输层数设置为i+1,也就是1,找出当前所有已传输层数为0的宏块,确定其第1层残差数据的总码流b1,重新确定总预测码流b:b=0+
b1;
91.2)如果b小于扩展层数据的可用流量,并且当前传输层数1小于各残差宏块的最大分层层数(12层),将所有当前编码的宏块的已传输层数再次+1,此时,已传输层数矩阵更新为图3c;
92.3)由于最小已传输层数i=1,将当前传输层数设置为i+1,也就是2,找出当前所有已传输层数为1的宏块,确定其第2层残差数据的总码流b2,重新确定总预测码流b:b=b1+b2;
93.4)如果b小于扩展层数据的可用流量,并且当前传输层数2小于各残差宏块的最大分层层数(12层),将所有当前编码的宏块的已传输层数再次+1,此时,已传输层数矩阵更新为图3d;
94.5)假设当前传输层数为7时,找出当前所有已传输层数为6的宏块,确定其第7层残差数据的总码流b7,重新确定总预测码流b:b=b1+b2+

+b7;此时b大于扩展层数据的可用流量,此时已传输层数矩阵更新为图3e;
95.6)接收下一帧图像(图像2),并获取当前的传输层数矩阵,也就是图3e所示的已传输层数矩阵;
96.7)将当前帧(图像2)与前一帧(图像1)进行宏块比对,假设图像2和图像1完全相同,不需要对当前的已传输层数矩阵进行调整,因此,直接根据当前的已传输层数矩阵(图3e)开始进行编码;
97.8)从当前已传输层数矩阵中确定出最小已传输层数为6,进一步确定当前传输层数为6+1=7,因此,先对当前帧中已传输层数为6的9个宏块的第7层残差数据的总码流进行计算;
98.9)继续按照上述方式预测可编码层数,假设一直到第12层时,当前传输层数12等于各残差宏块的最大分层层数(12层),停止预测可编码层数。
99.根据本技术的一个可选的实施例,确定每一层残差数据的总码流时,先将每一层的残差数据映射到符号值(映射方法是将残差值加128得到符号值),将符号值查残差huffman码表得到每个符号的码长,将每个残差数据的码长相加,得到该层的残差数据的码流大小。
100.图4是根据本技术实施例的一种残差的huffman码表的示意图,需要说明的是,本方案是基于8bit位深的图像进行描述的,即像素值在0到255之间。理论上来说,原始像素值和重建像素值的差值在

255到255之间。但实际由于重建像素值只是原始像素值编码产生的少量损失得到,和原始像素值差值一般很小,因此码表无需对

255到255中的所有情况进行设计,以减少空间。本方案中残差值在

128到127之间。为了方便,在huffman编码前将残差值统一加128,得到的范围就是0

255,这是编码符号的取值范围。后面就针对0

255进行查huffman码表编码即可。解码端也是类似,解出符号后,减去128得到残差值。根据统计数据,残差值中,0出现的频率最高,距离0越远的残差值,出现的频率越低。
101.图4只是一个固定的huffman码表的例子,还可以有更多的产生码表的方法,以及更多的码表和码长类型。但这些码表的一个共性就是码长最短的符号对应出现最为频繁的符号,也就是残差为0时,对应的符号128,其码长最短,为1。码长最长的符号对应出现频率最少的符号,也就是残差值为

128或127,其码长最长,为17。由于残差是原始数据和重建数
据的差值,理想情况下应该为0,即重建数据就是原始数据本身。但由于采取的编码算法会带来损失,故产生了残差,但一般残差值都围绕在0上下小范围波动,正常的编码算法不会带来很大的残差,因此在0周围的残差值对应的符号,即在符号128周围小范围内的码长都为最小。而残差值较大的情况,对应的码长都最长,以降低码流。
102.在本技术的一个可选的实施例中,按照各残差宏块的可编码层数分别对各残差宏块进行编码,包括以下步骤:针对当前扩展层数据中,所有已传输层数小于可编码层数的残差宏块,对其已传输层数至可编码层数之间所有未传输的层数据进行编码。
103.根据上文中预测得到的每个所述残差宏块可编码的残差层数,对残差宏块进行huffman编码,即当前帧编扩展层时,能将每个宏块编到第几层,本模块即对每个残差宏块进行编码,编到该层为止。
104.上述编码的主要思想是:如果当前某个残差宏块编到了第n层,到了下一帧如果图像静止,即当前残差宏块内容没有变化,则预测残差层数时,将从第n+1层开始。因为前n层已经编码并且传输过了,下一帧也将从第n+1层残差开始往后编。这就是渐进式编码残差的意义所在;反之,如果到了下一帧,图像又发生了变化,即残差宏块内容变化了,则残差值也有所变化,那么,下一帧中的该宏块的已编码层数就不是n了,要清零,预测残差层数以及真正编码残差时都要从第0层开始。
105.图5是根据本技术实施例的另一种图像的传输方法的流程图,如图5所示,该方法包括以下步骤:
106.步骤s502,获取编码之后的图像;
107.步骤s504,将编码之后的图像分解为基本层数据和扩展层数据,其中,基本层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;
108.步骤s506,分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
109.在解码端接收到编码数据后,将编码数据拆分成基本层数据和扩展层数据,分别对基本层数据和扩展层数据进行解码。基本层数据解码出的内容和扩展层数据解码出的内容进行拼接,得到原始无损的图像帧。
110.大部分压缩码流(如264,vgtp等)都是用压缩单元的形式将编码基本单元连接在一起的,有的压缩单元里面放的是sps,有的是pps,有的是帧头,有的是帧内的数据。编码基本单元一般还有个类型字段,标明这里放的是什么。扩展层数据和基本层数据,就可以通过该类型字段来标明。编码基本单元前面一般放一个000001表示分隔符。解码时遇到分隔符就表示新编码基本单元到了;然后解析新编码基本单元的类型字段,根据具体类型再接着读后面的码流并解码。
111.根据本技术的一个可选的实施例,执行步骤s506时,对扩展层数据解码,包括以下步骤:如果待解码的当前帧图像中的残差宏块和下一帧图像中的残差宏块相同,记录待解码的当前帧图像中的残差宏块已经完成解码的残差值的层号n;在对下一帧图像中的残差宏块进行解码时,从下一帧图像中的残差宏块的第n+1层的残差值进行解码,直至将下一帧中的残差宏块的全部残差值解码完成。
112.对扩展层数据解码时,需要用到码流中的current_level即当前编到的层数。和编
码端一样,解码端在解到静止宏块时,由于残差不变,会将解到的残差层号记录下来,例如记为old_layer,在下一帧中续着之前的残差层数传。当前帧中解出current_level值后,就会将huffman解出的码流放到old_layer和current_level之间的残差宏块中,就能将对应的像素和残差位置对应起来,叠加重建时才能正确恢复原始像素值。对于old_layer之前的层对应的残差数据为零,因为那些像素对应的残差之前已经传完,像素已经完全恢复,而current_level层后面的层的残差数据也为零,因为还没有传过来。
113.图6是根据本技术实施例的一种图像编码端和解码端的结构示意图,如图6所示,
114.编码端包括如下功能组件:
115.图像采集模块101,每次采集一帧yuv图像,作为编码的数据源。
116.宏块分类模块102,将全帧图像分为多个宏块,主要分为图片宏块、文字宏块以及其他扩展编码模块。
117.文字宏块编码模块103,对全帧的文字宏块进行编码,主要采用huffman编码和调色板量化方法。
118.图片宏块编码模块104,对全帧的图片宏块进行编码,主要采用jpeg编码方法。
119.其他编码模块105,作为将来的扩展,列在此处表明无论何种编码方式,都可使用相同的方法产生残差,并应用本方案实现无损压缩。
120.103

105模块编码产生的数据,称为基本层数据。
121.残差层数预测模块106,预测出的可编到的残差层数。
122.重建与残差生成模块107,该模块实际将每个使用103

105模块编码后的宏块再解码,产生重建数据,将原始宏块减去重建宏块,得到该宏块的残差宏块。
123.残差编码模块108,对残差宏块进行huffman编码,需要106模块提供可编到的残差层数,即当前帧编扩展层时,能将每个宏块编到第几层,本模块即对每个残差宏块进行编码,编到该层为止。
124.码流生成与传送模块109,将103

105模块产生基本层码流和108模块产生的扩展层码流融合产生最终码流,发送到解码端。
125.解码端包括如下功能组件:
126.传输接收模块110,解码端接收编码数据,并将数据解成基本层和扩展层,将基本层码流根据宏块类型进一步交给111

113模块进行各自类型宏块的解码,将扩展层码流交给114模块进行残差解码。
127.111

113模块,基本层解码模块,和编码端的103

05模块相对应。
128.残差解码模块114,解码扩展层数据。
129.叠加重建模块115,将111

113模块解码出的内容进行拼接,形成基本层构成的图像帧,即为有损的重建帧。
130.最终重建帧模块116,将115模块输出的基本层像素值和114模块解出的残差相加,得到本次重建到的帧。如果当前current_level已经到达16,即全帧残差的层都已经传完,那本次重建到的帧就是原始无损图像帧了。
131.图7a是根据本技术实施例的一种图像编码端的工作流程图,如图7a所示,包括以下步骤:
132.步骤s701,采集到1帧原始图像数据;
133.步骤s702,对全帧宏块进行分类;
134.步骤s703,将全帧宏块分类为文字、图片、其他宏块;
135.步骤s704,将各类宏块进行编码形成基本层码流,并产生残差宏块;
136.步骤s705,根据当前带宽。基本层码流和全部残差宏块,预测能传的残差宏块层数;
137.步骤s706,将指定层数的残差值使用huffman编码,形成扩展层码流,并更新各残差宏块的已传层数信息;
138.步骤s707,将基本层和扩展层码流融合,形成整帧码流。
139.图7b是根据本技术实施例的一种图像解码端的工作流程图,如图7b所示,包括以下步骤:
140.步骤s801,接收编码端发送的码流,将其分解为基本层数据和扩展层数据。
141.步骤s802,对基本层各类数据进行解码。
142.步骤s803,对扩展层进行huffman解码,将解出的数据根据当前的层数情况放到残差宏块的相应位置,并更新残差宏块的层数信息。
143.步骤s804,将基本层像素值和扩展层数据叠加形成最终重建帧。
144.需要说明的是,图7a和图7b所示实施例的优选实施方式可以参见图1所示实施例的相关描述,此处不再赘述。
145.本技术提供的图像传输方法可以实现以下技术效果:当图像始终运动时,能够根据真实带宽,尽可能的多传残差,解码端显示尽可能的清晰;当图像静止下来后,每个宏块的残差数据不再变化,此时根据带宽将每个宏块的所有层数的残差全部传完。本方案能够在有限带宽的情况下,实现对图像真正的无损编解码。
146.图8是根据本技术实施例的一种图像的传输装置的结构框图,如图8所示,该装置包括:
147.第一获取模块80,用于获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;
148.第一编码模块82,用于分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;
149.确定模块84,用于依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;
150.第二编码模块86,用于分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。
151.需要说明的是,图8所示实施例的优选实施方式可以参见图1所示实施例的相关描述,此处不再赘述。
152.图9是根据本技术实施例的另一种图像的传输装置的结构框图,如图9所示,该装置包括:
153.第二获取模块90,用于获取编码之后的图像;
154.分解模块92,用于将编码之后的图像分解为基本层数据和扩展层数据,其中,基本
层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;
155.解码模块94,用于分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
156.需要说明的是,图9所示实施例的优选实施方式可以参见图5所示实施例的相关描述,此处不再赘述。
157.本技术实施例还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行以上的图像的传输方法。
158.上述非易失性存储介质用于存储执行以下功能的程序:获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。或者
159.获取编码之后的图像;将编码之后的图像分解为基本层数据和扩展层数据,其中,基本层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
160.本技术实施例还提供了一种处理器,处理器用于运行存储在存储器中的程序,其中,程序运行时执行以上的图像的传输方法。
161.上述处理器用于运行执行以下功能的程序:获取待发送的图像,将待发送的图像划分为多个宏块,并依据各个宏块的特点确定各个宏块的宏块类型,其中,不同类型的宏块采用不同的编码方法进行编码;分别依据不同宏块类型对应的编码方法对各个宏块进行编码,将各个宏块的编码数据作为基本层数据;依据各个宏块的原宏块数据和对相应宏块进行编码后得到的基本层数据,得到各个宏块对应的残差宏块;分别对各个宏块对应的残差宏块进行编码,将各残差宏块的编码数据作为扩展层数据,并将基本层数据和扩展层数据合并之后的数据发送至图像解码端。或者
162.获取编码之后的图像;将编码之后的图像分解为基本层数据和扩展层数据,其中,基本层数据是对原始图像划分得到的各个宏块进行编码得到的编码数据,扩展层数据是对各个宏块对应的残差宏块进行编码得到的编码数据;分别对基本层数据和扩展层数据解码,将基本层数据解码之后的数据和扩展层数据解码之后的数据进行拼接,得到编码之前的图像。
163.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
164.在本技术的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
165.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为
一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
166.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
167.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
168.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
169.以上所述仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1