公开/公告号CN1615022A
专利类型发明专利
公开/公告日2005-05-11
原文格式PDF
申请/专利权人 大唐微电子技术有限公司;
申请/专利号CN200410096677.6
申请日2004-12-03
分类号H04N7/26;
代理机构11227 北京集佳知识产权代理有限公司;
代理人胡晶;王学强
地址 100083 北京市海淀区学院路40号
入库时间 2023-12-17 16:08:21
法律状态公告日
法律状态信息
法律状态
2007-05-16
授权
授权
2005-07-13
实质审查的生效
实质审查的生效
2005-05-11
公开
公开
技术领域
本发明涉及数字视频处理领域的视频图像的编码/解码方法,尤其涉及基于小波变换的视频流编码/解码方法。
背景技术
多媒体技术规范委员会已经建立并提出用于编码/压缩音频和视频数据的标准。该标准包括运动图像的MPEG1/2/4系列标准及用于低码率视频通信的H.261/H.263等标准。
请参阅图1,其为现有技术视频流的编码的流程示意图。所述编码包括以下步骤:首先将视频流的每一帧进行格式转换,转换成Y,U,V三个分量(步骤S110);然后确定每一帧图像为I帧、P帧或B帧,并对其进行帧内编码或帧间编码(S120);最后,将编码后的数据按照标准设定的码流结构组织码流(S130)。
其中,帧内编码和帧间编码是视频编码的两种类型。帧内编码只利用单幅图像(帧或场)内的空间冗余,而没有利用时间相关性(即时间预测)。而帧间编码使用运动估计和运动补偿减少时间冗余。通常,没有使用任何帧间编码的帧称为I帧,而帧间编码产生的帧包括P帧和B帧。I帧为解码过程提供起码点,并可以为P帧和B帧提供预测图像。
H.263等标准将每个视频帧分成若干宏块,每个宏块由4个Y亮度块、1个Cb色度块和1个Cr色度块组成,每个块的大小为8*8。并且,它是以宏块为单位进行视频帧的压缩。帧内编码是先将帧的光亮度和色差平面分为若干8*8的块,然后各块进行DCT变换,随后使用量化、熵编码等获得编码数据。帧间编码是通过运动估计、运动补偿、运动矢量编码和残差图像编码获得编码数据。运动估计是将帧划分为若干个宏块进行整像素运动估计或半像素运动估计。运动估计后的宏块分为帧间块和帧内块。对于帧间块需要根据其参考帧和当前帧,进行运动补偿,并对其残差进行DCT变换、量化及熵编码;对于帧内块,则直接对其进行帧内编码。
编码数据需组织成码流才能被传输。以H.263为例,说明现有的码流组织结构。码流结构分为图象层(picture layer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。图象层中每一帧图象的数据中都包含一个图象头,紧跟着该帧的块组数据,最后一个是填塞位。每个块组层包含了一个块组层头,紧跟着该块组的宏块数据。每个宏块层中包含了一个宏块头和该宏块的块数据。即,在码流中以块为单位组织成宏块,以宏块为单位组织成块组,以块组为单位组织为图像。
请参阅图2,其为现有技术视频流的解码流程示意图。所述解码方法包括以下步骤,首先,将接收到的码流按照码流结构获得帧信息(步骤S210);然后,分别对其进行帧内解码或帧间解码得到还原帧数据,以还原图像(步骤S220);最后,将还原图像数据进行格式转换:从YUV格式转换为RGB格式(步骤S230)。
上述的视频编码/解码方法可知,整个编码过程和编码过程都是以宏块为单位进行视频帧的压缩及解压缩,由此导致以下的缺陷:
第一:按照上述视频编码方式得到的码流既不能精确适应网路的带宽,也不能任意截断码流;
如果当前的网络带宽为1Mb/s,帧率为10帧,这样要求每帧图像所占的比特数为0.1Mb/s。而现有的的编码方法获得的码流就不能做到每帧只传0.1Mb/s。如果传输过程中截断码流,假设该视频流中设有100个宏块,若接收方只接收到该视频流中80个宏块信息,则接收方只能根据现有编码方法将80个宏块信息还原成帧图像时,很显然无法完整显示该幅图像。因此,按照上述视频编码方式得到的码流既不能自适应网路的带宽,也不能任意截断码流。
第二:当传输网路状况比较差时,传输线路上的数据可能会发生错误,此时,按照现有的编码方法获得的码流传送至接收方时,接收方按照现有的编码方法获得图像时,很有可能会出现马赛克现象。在此块组中出现错误比特,则所述错误比特后面的宏块就会发生错误,导致解码该块组时就会显示错误,即可能显示某一行部分显示不正确的图像,进而影响整体的图像效果。
发明内容
本发明的目的在于提供一种基于小波变换的视频流编码/解码方法,以解决现有技术中,由于是采用块为单位组织成宏块,以宏块为单位组织成块组,以块组为单位组织为图像这种码流结构,因此将编码后数据按照上述码流结构组织成码流时,无法精确适应网络带宽、不能任意截断码流,数据发生错误时图象中某一行部分显示不正确等技术缺陷。
为解决上述问题,本发明公开了一种基于小波变换的视频流编码方法,包括:
(1)确定码流结构,所述码流结构由帧结构、分量结构及位平面结构组成,所述每一帧结构包含帧头及三个分量结构,每一分量结构包含分量头及若干位平面结构,所述位平面结构包括位平面头,并用以存储位平面信息
(2)视频流的每一帧进行帧内编码或帧间编码,其中,所述帧内编码包括对转换格式后的图像数据进行小波变换,并对小波变换后产生的系数进行SPIHT编码;
(3)将帧内编码后的数据按照步骤(1)设定的码流结构组织码流,码流按照视频流的帧顺序组织帧结构,每一帧结构中包含该帧Y,U,V三个分量信息,每一分量信息中包含对该分量进行所述SPIHT编码获得的若干位平面信息,并且,每一分量结构用以保存一个分量信息,每一位平面结构用以保存一个位平面信息。
步骤(1)和步骤(2)之间还包括:若所述视频流为RGB格式,则将视频流的每一帧进行格式转换,转换成Y,U,V三个分量。
步骤(3)还进一步包括,若所述帧编码类型为帧间编码,则将帧间编码产生的运动矢量编码数据跟进在所述帧头之后,以组织码流。
所述帧头至少包含用以识别帧的帧头标识域、用以表明帧为一般视频、快拍、或隐私保护的帧类型域、帧长度域、帧序号域、图像采用的分辨率域、是否采用算术编码域、帧编码类型域及希望对端所采用的编码帧率域、保留域用于以后系列版本向下兼容的扩充。
所述分量头至少包含用以识别分量的分量头标识域,用以表明分量类型的分量类型域、用以表明在小波变换中是否丢高频的高频标识域、用以表明所述分量中包含位平面个数的位平面数域,用于表示小波变换层数域。
每一位平面头至少包含识别位平面的位平面头标识域、用以表明位平面数据流长度的位平面数据流长度域及位平面ID号域,保留域以后系列版本向下兼容的扩充。
步骤(3)还包括预先判断每一帧的类型,若帧的类型为隐私保护类型,则码流中该帧结构中包含一包括帧头标识、帧类型、保留字及帧长度信息的命令字。
一种基于视频流解码方法,包括:
(A)从接收到的码流通过步骤(1)的码流结构获得帧信息:先检索帧头标识找到帧头,再检索分量头标识找到分量头,最后找到位平面头标识找到位平面头,以使获得每一帧的分量信息,每一分量中的位平面信息;
(B)分别对所述帧进行帧内解码或帧间解码得到还原帧数据,进而还原图像,所述帧内解码包括先进行SPIHT解码,后进行小波变换,再还原帧数据。
步骤(B)还包括:若检测到接收的码流的帧结构中帧编码类型为帧间编码时,则通过查找帧头之后的运动矢量编码数据进行帧间解码,进而还原所述帧的帧数据。
步骤(B)还包括:若码流中检测接收到的码流的帧结构中帧类型为隐私保护类型时,则获得包含帧头标识、帧类型及帧长度的帧信息。
与现有技术相比,本发明具有以下优点:本发明将编码数据按照帧组织成码流,并且每一帧是以Y,U,V三个分量数据组成,每个分量按照量化的精度分别设置不同的位平面。即将每个分量数据的位平面信息组织成分量信息,三个分量信息组织成帧信息,形成最终的码流。对于接收端来说,只要将接收到的码流中分离出帧信息,各个帧信息中分离出分量信息,各个分量信息分离出各个位平面信息,并对之进行帧内解码,即可还原出帧信息。由此保证了在传输过程中可以任意截断码流。并且,即使网络状况较差,就算一些位平面信息出现错误,只会是还原后的图像质量有一些下降,但不影响整体的图像效果。
并且,本发明不仅适用编码类型为帧内编码的帧组织成码流,也适用于编码类型为帧间编码的帧组织成码流。在本实施例中,将帧间编码产生的运动矢量编码作为特殊的分量放置在帧头之后,即可完成编码类型为帧间编码的帧组织成码流,进一步提升方法的适用范围。
附图说明
图1为现有技术视频流的编码的流程示意图;
图2为现有技术视频流的解码的流程示意图;
图3为本发明的视频流的编码的流程示意图;
图4为本发明的码流结构示意图;
图5为本发明的视频流的解码流程示意图。
具体实施方式
以下结合附图,具体说明本发明。
请参阅图3,其为本发明提供的一种基于小波变换的视频流编码方法,其特征在于,包括:
步骤S310:确定码流结构,所述码流结构由帧结构、分量结构及位平面结构组成,所述每一帧结构包含帧头及三个分量结构,每一分量结构包含分量头及若干位平面结构,所述位平面结构包括平面头,并用以存储位平面信息。
步骤S320:视频流的每一帧进行帧内编码或帧间编码,其中,所述帧内编码包括对转换格式后的图像数据进行小波变换,并对小波变换后产生的系数进行SPIHT编码;
步骤S330:将帧内编码后的数据按照步骤S310设定的码流结构组织码流,码流按照视频流的帧顺序组织帧结构,每一帧结构中包含该帧Y,U,V三个分量信息,每一分量信息中包含对该分量进行所述SPIHT编码获得的各种位平面信息,并且,每一分量结构用以保存一分量信息,每一位平面结构用以保存一位平面信息。
请参阅图4,其为一种码流结构示意图。码流是由若干帧结构组成。每一帧结构是由一帧头及若干分量组成。在图4中,帧头是以SOF域(帧头标识)为帧的开始。比如SOF为“0XFFFFFF91”,则当接收方接收到码流后,检测到码流中“0XFFFFFF91”数据即为一帧信息的开始,便于解码。在本发明中一帧中采用Y,U,V三个分量,即每一帧结构中至少包含三个分量结构,每一分量结构用以表示一分量信息。TOC域为分量开始的标识。在本实施例中还定义了用以表明分量结束的分量尾(BOC域)以用以表明帧结构的帧尾(BOF域)。我们再来看一下分量结构,每一分量结构包括分量头及若干位平面结构。在本实施例定义了位平面头标识(SOF域)、位平面尾标识(EOP域)。事实上,每一头标识(如帧头标识、位平面头标识、位平面头标识)是不可缺省的,但是每一尾标识在定义时是缺省的。但是,发送需组织码流的码流结构和接收解码码流的码流结构应一致。
以下以本发明所采用的一种码流结构为例,说明帧头、分量头及位平面头的结构。
请参阅表1,说明组成帧头的各种域的信息。
表1
各种域的意义、及所占的位数、取值范围见表2。
表2
即,每一帧头至少包含用以识别帧的帧头标识域(SOF)、用以表明帧为一般视频、快拍、或隐私保护的帧类型域(Ptype)、保留域、帧长度域(LEN)、帧序号域(FrameID)、图像采用的分辨率域(BTOV)、是否采用算术编码域、帧编码类型域(BPTYPE)及希望对端所采用的编码帧率域(BframeRate),填充位。
请参阅表3,其为分量的结构示意表。
表3
各种域的意义,所占用的位数、取值范围见表4。
表4
即:每一分量头至少包含用以识别分量的分量头标识域(TOC),用以表明分量类型的分量类型域(bCPT)、用以表明在小波变换中是否丢高频的高频标识域(bQP)、用以表明所述分量中包含位平面个数的位平面数域(bBPN),小波编码的层数。
位平面头结构如表5所示,当分量类型是YUV时使用。
表5
各域的意义,所占用的位数及取值范围见表6。
表6
即:每一位平面头至少包含识别位平面的位平面头标识域(SOP)、用以表明位平面数据流长度的位平面数据流长度域(ULEN)及位平面ID号域(BID)。
以采用上述公开的码流结构为例,来具体说明本发明的视频流的编码/解码过程。
若图像数据的格式为RGB,则需要进行格式转换YUV格式,RGB与YUV的相互转换可以通过浮点运算,也可以通过整数运算来进行相互转换,现有技术中早已公开,在此不再赘述。
然后确定每一帧的类型:I帧、P帧或B帧。并对I帧进行帧内编码,对P帧或B帧进行帧间编码。其中,帧内编码包括:先对所述YUV格式的图像数据进行小波变换,并对小波变换后产生的系数据进行SPIHT编码,以便编码后的数据能生成码流,进而输出到信道上传输。
小波变换可以采用二维双正交小波变换,此时,编码时可以采用下述公式进行正变换:
其中sl(0)为一维图像信息S的偶数样本,dl(0)为一维图像信号S的奇数样本,sl为变换后的偶数样本,dl为变换后的厅数样本,α、β为小变换的系数,k为伸缩变换系数,其中α=-0.5、β=0.25、k=1.414。
根据小编变换的每个分量进行SPIHT编码。子集的重要性检测是编码的重要步骤,在实际执行中,重要信息存储在三个有序的列表中,LIS:非重要集合列表、LIP:非重要像素列表、LSP:重要像素列表。在所有的列表中,每个入口都由一个坐标标识,LIP和LSP表示单个像素有序列表,LIS表示集合D(i,j)或L(i,j)的有序列表。为了区分集合D(i,j)与集合L(i,j),将LIS中的集合定义为两种类型,类型A表示集合D(i,j),类型B表示集合L(i,j)。
在排序过程中,LIP(以前过程是非重要的像素)中的像素被检测,凡是变成重要的像素就被移到LSP中,同样有序列表LIS中的集合也进行检测,当一个集合被发现是重要的,那末该集合就从LIS列表中移出,并进行集合划分,划分得到的多于一个元素的新子集再放入有序列表LIS中,而只有单一元素的集合按照该元素的重要性被加入到有序列表LIP或LSP中。对LSP中的像素继续做细化过程处理。
下面的编码算法使用集合划分方法实现排序过程。
编码算法:
1初始化:
输出最大位平面阶数n=[log2(max(i,j){|Ci,j|})],设LSP为空集,将坐标加入到集合LIP中,同时将其中那些有后代的坐标作为A类节点放入LIS中。
2排序过程:
2.1对LIP中的每个元素(i,j)进行编码
2.1.1输出Sn(i,j);
2.1.2如果Sn(i,j)=1,那末移(i,j)到LSP中,并输出Ci,j的符号。
2.2对LIS中的每个元素(i,j)进行编码
2.2.1如果是A类节点,那末
输出Sn(D(i,j));
如果Sn(D(i,j))=1,那末
对任意
输出Sn(k,l);
如果Sn(k,l)=1,那末将(k,l)加入到LSP中,并输出Ck,l的符号;
如果Sn(k,l)=0,那末将(k,l)加入到LIP中。
如果Ln(i,j)≠0,那末作为B类节点将(i,j)移到LIS尾部,然后go to2.2.2;
如果Ln(i,j)=0,从LIS中删除节点(i,j)。
2.2.2如果是B类型节点,那末
输出Sn(L(i,j));
如果Sn(L(i,j))=1,那末
作为A类节点将移到LIS尾部;
从LIS中删除节点(i,j)。
3.细化过程:对LSP中的每个节点,除了最近的排序过程外,输出系数|Ci,j|的第n个比特。
4.量化校正:n=n-1 go to第2步。
SPIHT编码后获得的每个帧的各个分量的位平面信息用于组织码流。
对于帧间编码主要包括运动估计、运动补偿、运动矢量编码和残差图像编码,其中,运动估计得到的预测帧,根据其参考帧和当前帧,进行运动补偿,并对其残差图像进行小波变换,然后使用SPIHT编码,以便于将编码数据形成码流。对于帧间编码的动动矢量编码在组织码流时,可以看成特殊分量结构,放置在帧头后。
不管是帧间编码和帧内编码,将视频流的每一帧进行编码后,按照视频流的帧顺序形成码流时。首先判断所述帧的类型是否为隐私保护,若是,直接在帧头中输入SOF、Ptype、RSV、LEN域的信息即可,否则,填入帧头信息、三个分量信息、以及每一分量的位平面信息。
再谈谈与上述编码对应的视频流解码方法。请参阅图5,其为视频解码的流程图。它包括:
首先进行步骤S410:从接收到的码流通过编码采用的码流结构获得帧信息:先检索帧头标识找到帧头,再检索分量头标识找到分量头,最后找到位平面头标识找到位平面头,以使获得每一帧的分量信息,每一分量中的位平面信息;
再进行步骤S420:分别对所述帧进行帧内解码或帧间解码得到还原帧数据,进而还原图像,所述帧内解码包括先进行SPIHT解码,后进行小波变换,再还原帧数据。
帧内解码包括先通过SPIHT解码获得的小波变换的系数,然后再进行小波逆变换,最后将图像转换成RGB格式。
SPIHT解码算法:
1初始化:输入最大位平面阶数n=[log2(max(i,j){|Ci,j|})],设LSP为空集,将坐标加入到集合LIP中,同时将那些有后代的坐标作为A类节点放入LIS中。
2排序过程:
2.1对LIP中的每个元素(i,j)进行解码
2.1.1输入Sn(i,j);
2.1.2如果Sn(i,j)=1,那末移(i,j)到LSP中,并输入Ci,j的符号。
2.2对LIS中的每个元素(i,j)进行解码
2.2.1如果是A类节点,那末
输入Sn(D(i,j));
如果Sn(D(i,j))=1,那末
对任意
输入Sn(k,l);
如果Sn(k,l)=1,那末将(k,l)加入到LSP中,并输入Ck,l的符号;
如果Sn(k,l)=0,那末将(k,l)加入到LIP中。
如果Ln(i,j)≠0,那末作为B类节点将(i,j)移到LIS中,然后go to 2.2.2;如果Ln(i,j)=0,从LIS中删除节点(i,j)。
2.2.2如果是B类型节点,那末
输入Sn(L(i,j));
如果Sn(L(i,j))=1,那末
作为A类节点将移到LIS中;
从LIS中删除节点(i,j)。
3.细化过程:对LSP中的每个节点,除了最近的排序过程外,输入系数|Ci,j|的第n个比特。
4.量化校正:n=n-1 go to 2。
逆变换过程:
其中采用的系数:a=-0.5,b=0.25,κ=1.414。
若检测到接收的码流的帧结构中帧编码类型为帧间编码时,则通过查找帧头之后的运动矢量编码数据进行帧间解码,进而还原所述帧的帧数据。
若码流中检测接收到的码流的帧结构中帧类型为隐私保护类型时,则获得包含帧头标识、帧类型及帧长度的帧信息。
以上公开的仅为本发明的几个具体实施例,但本领域的技术人员能思之的变化都应落在本发明的保护范围内。
机译: 用于对视频数据进行编码的视频编码设备,用于对视频数据进行编码的视频编码方法,用于对视频流进行解码的视频解码设备,用于对已编码的视频流进行解码的视频解码方法,用于对计算机程序和视频数据进行编码和解码的编码系统。
机译: 小波变换的视频和图像数据的编码装置和方法,以及小波变换的视频和图像编码数据的解码方法和装置。
机译: 小波变换的视频和图像数据的编码装置和方法,以及小波变换的视频和图像编码数据的解码方法和装置。