具体实施方式
在以下说明中,参照构成其部分的附图,附图中通过举例说明的方式给出一些可实施本发明的具体实施例。应当理解,可采用其它实施例并可在不脱离本发明的范围的情况下做出结构上的更改。如有可能,在所有附图中将使用相同的标号表示相同或相似的元件。阐明了大量具体的详细资料,以便透彻地理解本发明。但是,本领域的技术人员将十分清楚,本发明可以无需这些具体详细资料或使用某些与此处说明同等的备选装置和方法实现。在其它情况下,对众所周知的方法、过程、元件和装置不作详细说明,以免不必要地混淆本发明的各个方面。
各种操作将以一种有助于理解本发明的方式依次被描述为多个分立步骤,但是,描述的顺序不应被理解为意味着这些操作一定是顺序相关的。具体地说,这些操作不需要按介绍的顺序执行。
短语“在一个实施例中”被反复使用。但是,该短语一般不表示同一个实施例,但它也可能表示同一个实施例。术语“包含”、“具有”和“包括”是同义词,除非在上下文中另有说明。
图1是视频压缩和解压系统1(以下称作“视频系统1”)的高级框图,具有编码设备3以及通过介质9连接到编码设备3的解码设备5。编码设备3包含视频编码器2、模式选择器14和缓冲器8。解码设备5包含缓冲器10、视频解码器12和模式选择器16。编码设备3接收视频序列20(视频输入),并对视频序列20进行编码以许多可能格式之一产生编码并由此压缩的显示。格式可以是适合于编码显示的“现场”流的隔行扫描格式。格式也可以是单个文件格式,其中每个编码显示存储在一个文件内的毗连块中。
输入到编码设备3的视频序列20可以是现场信号,例如由摄像机提供的,或以预定格式预先录制的序列。视频序列20包括数字视频的帧、由数字音频组成的音频片断、视频、图形、文本和/或音频(多媒体应用程序)的组合,或上述的模拟形式。如有必要,可以转换各种类型的输入信号,如模拟视频或先前压缩和编码的视频,以产生到编码设备3的适当输入。在一个实施例中,编码设备3可以接收RGB或YUV格式的视频。但是,只要提供适当的转换机制,编码设备3可以适合接收任何输入格式。用于将一种格式的信号转换为另一种格式的信号的转换机制在本领域是众所周知的。
介质9可以是存储装置或传输介质。在一个实施例中,视频系统1可以在计算机上实现。编码设备3将编码的视频流(显示)发送到实现为存储装置的介质9。存储装置可以是视频服务器、硬盘驱动器、CD刻录机、读/写DVD驱动或任何其它能存储并允许检索编码的视频数据的装置。存储装置连接到可以选择性地从存储装置读取并对编码的视频序列解码的解码设备5。在解码设备5对选定的一个编码视频序列进行解码时,它会生成视频序列20的再现,例如用于在计算机监视器或屏幕上显示。
在另一个实施例中,介质9提供到另一台计算机的连接,该计算机可以是接收编码视频序列的远程计算机。介质9可以是网络连接,如LAN、WAN、因特网等等。远程计算机内的解码设备5对其中包含的编码显示进行解码,并可以在远程计算机屏幕或监视器上生成视频序列20的再现。
可以结合和补充图1所示和上述的视频系统1的方面,以实现其它实施例。有许多其它实现符合本发明的范围。此类其它实现无需限制于视频,而可以包括音频或其它媒体形式。
先有的视频编码技术通常将一帧(画面)分解成称为宏块的较小像素块。每个宏块可以由一个像素矩阵组成,通常是16×16的矩阵,定义进行编码的信息单元。因此,像素矩阵被称为16×16的宏块。这些视频编码技术通常将每个16×16宏块进一步分解为更小的像素矩阵,例如8×8像素矩阵或4×4像素矩阵。以下将此类矩阵称为子块。
在本发明的一个实施例中,一个16×16宏块被分为16个4×4子块。在另一个实施例中,一个16×16宏块被分为8×8子块、8×4子块或4×8子块。本领域的技术人员将理解到,本发明同样适用于或轻易适合于使用其它子块或仅使用16×16宏块而无需将其分解为子块的系统。
此外,先有的编码技术利用运动矢量提供运动补偿和运动估计。动作矢量描述通过x分量和y分量表示的方向以及16×16宏块或其各自子块的运动量,并作为比特流的一部分发送到解码器。如本领域已知,运动矢量用于双向编码的画面(B画面)和预测的画面(P画面)。
视频编码器2进行离散余弦变换(DCT)对视频序列20进行编码和压缩。简言之,视频编码器2将视频序列20从空间、时间域转换为频域。视频编码器2的输出是被称为“DCT系数”的一组信号幅度。量化器接收DCT系数,并在编码期间为每个DCT系数值范围(或步长)分配一个值,如小的整数。量化允许更紧密地表示数据,但是导致了某些数据的丢失。在较精密标度上的量化导致较不紧密的表示(较高比特率),但丢失的数据也较少。在较粗略标度上的量化导致较紧密的表示(较低比特率),但丢失的数据也较多。模式选择器14与视频编码器2通信,并监视和控制视频序列20的编码。模式选择器14依照本发明确定预测模式,根据该预测模式视频编码器2对视频序列20进行编码。模式选择器14可以是处理器或一个或多个配置为依照本发明的方法操作的软件模块。为便于说明,图1将模式选择器14显示为与视频编码器2分离的组件。本领域的技术人员将理解到,模式选择器14的功能性可以和视频编码器2的功能性相结合。
编码设备3的缓冲器8从视频编码器2接收编码和压缩的视频序列(以下称作“编码的视频序列”),并在将编码的视频序列发送到介质9之前调整其比特率。可能需要缓冲,因为各个视频图像可能包含不同数量的信息,导致从图像到图像的编码效率有所不同。由于缓冲器8的大小有限,所以可以使用到量化器的反馈环路以避免缓冲器8的溢出或下溢。表示的比特率是为了提供实时表示所必需处理的表示数据的比率。
解码设备5执行编码设备3的相反功能。缓冲器10还用于调整输入的编码视频序列的比特率。视频解码器12结合模式选择器16对输入的视频序列进行解码和解压,重建视频序列。模式选择器16确定预测模式,根据该预测模式视频编码器2对输入的视频序列进行编码。解码设备5输出解码和解压的视频序列24,表示为“视频输出”(以下称作“解码的视频序列24”)。
视频解码器12从缓冲器10接收表示编码的视频序列的比特流(图1)。在一个实施例中,视频解码器是包含解码器控制器、VLC解码器(可变长编码,VLC)和重建模块的常规视频解码器,如MEPG-x解码器。本领域的技术人员了解这些元件的操作和功能。本领域的技术人员了解这些元件,并且这些元件在通常可得到的MPEG文档和出版物中描述了。
图2是说明视频序列20的一部分视频帧30的图表。如上所述,已知的视频编码技术通常将视频帧30分解为宏块36、36a、36b、36c、36d。例如,视频帧30被分为16×16宏块36、36a、36b、36c、36d的矩阵。视频系统1从上到下从左到右对宏块36、36a、36b、36c、36d逐行进行编码,如通过虚线34所示,说明了例如内编码的次序。在所示的实施例中,虚线34在宏块36a即下一个要编码的宏块处结束。所有之前的宏块36、36b、36c、36d均已编码。
宏块36a,作为所有宏块36、36a、36b、36c、36d的代表,在视频帧30下面更详细地示出了。视频系统1的视频编码技术将每个宏块36、36a、36b、36c、36d进一步分解为像素矩阵38,以下称作子块38。
在一个实施例中,子块38是一个4×4的像素矩阵,其中16个像素标记为a、b、c、...、p(以“行先”的方式)。位于宏块36a的子块38正上方的邻近宏块36b的相邻子块的边界像素,被标记为A、B、C、D。此外,位于子块38右上方的宏块36b的子块的边界像素,被标记为E、F、G、H。同样,位于宏块36a的子块38正左侧的邻近宏块36c的相邻子块的边界像素,被标记为I、J、K、L。位于子块38左下方的宏块36c的子块的边界像素,被标记为M、N、O、P。位于宏块36a的子块38左上方的宏块36d的子块的边界像素,被标记为Q。
本发明的视频系统1将每个宏块36编码为内宏块。内宏块在没有运动补偿预测的情况下被转换编码。因此,内宏块不涉及之前或之后帧的解码数据。I帧是指完全由内宏块组成的帧。因此,I帧在不涉及之前或之后帧的情况下编码。I帧也称为“帧内”。
图3是说明可能方向的子块38,根据该可能方向可以对子块38进行编码。根据本发明,可以对宏块36、36a、36b、36c、36d的子块以下面列出的九种模式(模式0、模式1、...、模式9)之一进行内编码。也就是说,特定子块38可以从当前解码的当前子块上方的子块预测(“垂直预测”)、从当前子块的左侧子块预测(“水平预测”)或同时从左侧和上方子块预测(“对角线预测”)。模式1-8按预定的方向预测子块,并且模式0使用统一的平均,不按预定的方向预测。在图3中,每个方向表示根据本发明的八种预测模式之一。
模式0:
在此模式中,每个像素a-p通过下面的公式预测:
预期在此模式及以下模式中,“除法”表示将结果向“负无穷大”(-∞)舍入。例如,在模式0中,“+4”确保除法产生最接近整数的舍入。这也适用于其它模式。
如果像素a-p的四个在当前编码的当前画面(帧)之外,则使用其余四个像素的平均进行预测。如果所有八个像素均在画面之外,则这个子块中所有像素的预测是128。因此在模式0中总是可以对子块进行预测。
模式1:
如果像素A、B、C、D在当前画面之内,则以垂直方向预测像素a-p,如图3所示。也就是说,按以下方式预测像素a-p:
a,e,i,m |
= |
A |
b,f,j,n |
= |
B |
c,g,k,o |
= |
C |
d,h,l,p |
= |
D |
模式2:
如果像素I、J、K、L在当前画面之内,则以水平方向预测像素a-p。也就是说,按以下方式预测像素a-p:
a,b,c,d |
= |
I |
e,f,g,h |
= |
J |
i,j,k,l |
= |
K |
m,n,o,p |
= |
L |
模式3:
如果所有像素a-p均在当前画面之内,则使用此模式。此模式对应于以对角线方向预测,如图3所示。按以下方式预测像素a-p:
m |
= |
(J+2K+L+2)/4 |
i,n |
= |
(I+2J+K+2)/4 |
e,j,o |
= |
(Q+2I+J+2)/4 |
a,f,k,p |
= |
(I+2Q+A+2)/4 |
b,g,l |
= |
(Q+2A+B+2)/4 |
c,h |
= |
(A+2B+C+2)/4 |
d |
= |
(B+2C+D+2)/4 |
模式4:
如果所有像素a-p均在当前画面之内,则使用此模式。这也是对角线预测。
a |
= |
(A+2B+C+I+2J+K+4)/8 |
b,e |
= |
(B+2C+D+J+2K+L+4)/8 |
c,f,i |
= |
(C+2D+E+K+2L+M+4)/8 |
d,g,j,m |
= |
(D+2E+F+L+2M+N+4)/8 |
h,k,n |
= |
(E+2F+G+M+2N+O+4)/8 |
l,o |
= |
(F+2G+H+N+2O+P+4)/8 |
p |
= |
(G+H+O+P+2)/4 |
模式5:
如果所有像素a-p均在当前画面之内,则使用此模式。这也是对角线预测。
a,j | = | (Q+A+1)/2 |
b,k |
= |
(A+B+1)/2 |
c,l |
= |
(B+C+1)/2 |
d |
= |
(C+D+1)/2 |
e,n |
= |
(I+2Q+A+2)/4 |
f,o |
= |
(Q+2A+B+2)/4 |
g,p |
= |
(A+2B+C+2)/4 |
h |
= |
(B+2C+D+2)/4 |
i | = | (Q+2I+J+2)/4 |
m |
= |
(I+2J+K+2)/4 |
模式6:
如果所有像素a-p均在当前画面之内,则使用此模式。这是对角线预测。
a |
= |
(2A+2B+J+2K+L+4)/8 |
b,i |
= |
(B+C+1)/2 |
c,j | = | (C+D+1)/2 |
d,k |
= |
(D+E+1)/2 |
l |
= |
(E+F+1)/2 |
e |
= |
(A+2B+C+K+2L+M+4)/8 |
f,m |
= |
(B+2C+D+2)/4 |
g,n |
= |
(C+2D+E+2)/4 |
h,o |
= |
(D+2E+F+2)/4 |
p |
= |
(E+2F+G+2)/4 |
模式7:
如果所有像素a-p均在当前画面之内,则使用此模式。这是对角线预测。
b |
= |
(C+2D+E+I+2J+K+4)/8 |
c,e |
= |
(D+2E+F+2J+2K+4)/8 |
d,f |
= |
(E+2F+G+J+2K+L+4)/8 |
g,i | = | (F+2G+H+2K+2L+4)/8 |
h,j |
= |
(G+3H+K+2L+M+4)/8 |
k,m |
= |
(G+H+L+M+2)/4 |
l,n |
= |
(L+2M+N+2)/4 |
o |
= |
(M+N+1)/2 |
p |
= |
(M+2N+O+2)/2 |
模式8:
如果所有像素a-p均在当前画面之内,则使用此模式。这是对角线预测。
a,g |
= |
(Q+I+1)/2 |
b,h |
= |
(I+2Q+A+2)/4 |
c |
= |
(Q+2A+B+2)/4 |
d |
= |
(A+2B+C+2)/4 |
e,k |
= |
(I+J+1)/2 |
f,l |
= |
(Q+2I+J+2)/4 |
i,o |
= |
(J+K+1)/2 |
j,p | = | (I+2J+K+2)/4 |
m |
= |
(K+L+1)/2 |
n |
= |
(J+2K+L+2)/2 |
在本发明的一个实施例中,模式选择算法确定选择九种模式之一的标准。然后按照所选的模式对子块38进行编码。下面详细说明模式选择算法。
图4是一个说明根据本发明的方法的过程流程图,其对包含视频帧流的视频数据进行编码,并选择一种预测模式(模式0-8)。在一个实施例中,该方法对视频帧的亮度部分(Y)进行编码。
在步骤28中,例如当用户启动视频系统1时,该过程初始化视频系统1。初始化过程包括例如确定编码设备3是否运行以及是否正确连接以接收视频帧流。
在步骤30中,该过程接收视频帧流,并将每个视频帧分为多个子块的矩阵,其中每个子块包含多个像素。如上所述,多个子块的矩阵可以包括宏块的一部分的4×4子块38。
在步骤32中,该过程定义九种预测模式(模式0-8),其中每种预测模式确定对目前的子块进行编码的模式。例如,该过程可以执行子程序以计算并定义模式(模式0-8)。
在步骤34中,该过程选择九种预测模式(模式0-8)之一以对目前的子块38进行编码。在一个实施例中,该过程为每种模式计算误差值,确定提供最小误差值的模式并选择该模式对目前的子块38进行编码。
一旦该过程选择了“最好的”预测模式对目前的子块38的像素进行编码,该过程就对最小误差值进行编码,并将压缩的比特流内的编码的最小误差值发送到解码器。最小误差值表示目前子块的预测像素与子块的原始像素之间的差异。差异可以使用如本领域已知的DCT、系数量化和可变长编码进行编码。解码器使用预测的像素和与原始像素的差异来准确地重建视频帧。该过程在步骤36结束。
该过程提供了依照九种预测模式(模式0-8)之一对每个4×4子块38进行编码。由于如果直接编码这可能需要相当数量的比特,所以根据本发明的视频系统1可以应用更有效的方式对模式信息进行编码。子块的预测模式与相邻子块的预测模式相关。
图5通过三个示范子块A、B、C说明这一点。子块C是要在预测模式已知的子块A、B的帮助下进行编码(预测)的子块。子块A位于子块C上方,而子块B位于子块C左侧。在这种情况下,给出了子块C的最可能、次最可能等的预测模式的排序。下面列出了这种排序表的一个示例。该表分为十个分组(分组1-分组10)。在每个分组中,子块A的各自预测模式是恒定的(如在分组2中子块A的模式0是恒定的),而子块B的预测模式改变。也就是说,一个分组内子块A的(恒定的)预测模式可以与该分组内子块B的九种预测模式之一相结合。
对于子块A和B的每个预测模式组合,给出了一个九个数字的序列,一个数字对应于九种模式0-9中的一种。例如在分组3中,如果子块A和子块B的预测模式都是模式1,则字符串“162530487”指示模式1即字符串中的第一数字是子块C的最可能的模式。模式6即字符串中的第二数字是下一个最可能的模式。在示范字符串中,模式7是最不可能的,因为数字7是字符串中的最后一个数字。该字符串将是表示编码的视频序列的比特流的一部分。
因此,比特流包含表示子块C所用的模式的信息(Prob0=1)(见表1)。例如,该信息可能指出下一个最可能的内预测模式是模式6。注意,表中的“-”表示这种情况不会出现。表1中使用的术语“外部”指“帧外”。如果子块A或B在帧内,但不是内编码(如在P帧中,子块C可能是内编码,但子块A或子块B可以不是内编码),则没有预测模式。本发明过程假定对此类子块使用模式0。
B |
A=外部 | |
外部 |
0------- | |
模式0 |
02------ | |
模式1 |
-------- | |
模式2 |
20------ | |
模式3 |
-------- |
分组1 |
模式4 |
-------- | |
模式5 |
-------- | |
模式6 |
-------- | |
模式7 |
-------- | |
模式8 |
-------- | |
B |
A=模式0 | |
外部 |
01------- | |
模式0 |
021648573 | |
模式1 |
102654387 | |
模式2 |
280174365 | |
模式3 |
201385476 |
分组2 |
模式4 |
201467835 | |
模式5 |
015263847 | |
模式6 |
016247583 | |
模式7 |
270148635 | |
模式8 |
280173456 | |
B |
A=模式1 | |
外部 |
10------- | |
模式0 |
125630487 | |
模式1 |
162530487 | |
模式2 |
217683504 | |
模式3 |
125368470 |
分组3 |
模式4 |
162045873 | |
模式5 |
152638407 | |
模式6 |
160245738 | |
模式7 |
217608543 | |
模式8 |
127834560 | |
B |
A=模式2 | |
外部 |
--------- | |
模式0 |
021876543 | |
模式1 |
120657483 | |
模式2 |
287106435 | |
模式3 |
208137546 |
分组4 |
模式4 |
204178635 | |
模式5 |
201584673 | |
模式6 |
206147853 | |
模式7 |
278105463 | |
模式8 |
287104365 | |
B |
A=模式3 | |
外部 |
--------- | |
模式0 |
021358647 | |
模式1 |
102536487 | |
模式2 |
281035764 | |
模式3 |
325814670 |
分组5 |
模式4 |
420615837 | |
模式5 |
531286407 | |
模式6 |
160245837 | |
模式7 |
270154863 | |
B |
A=模式4 | |
外部 |
--------- | |
模式0 |
206147583 | |
模式1 |
162045378 | |
模式2 |
287640153 | |
模式3 |
421068357 |
分组6 |
模式4 |
426015783 | |
模式5 |
125063478 | |
模式6 |
640127538 | |
模式7 |
274601853 | |
模式8 |
287461350 | |
B |
A=模式5 | |
外部 |
--------- | |
模式0 |
512368047 | |
模式1 |
156320487 | |
模式2 |
215368740 | |
模式3 |
531268470 |
分组7 |
模式4 |
162458037 | |
模式5 |
513620847 | |
模式6 |
165204378 | |
模式7 |
271650834 | |
模式8 |
251368407 | |
B |
A=模式6 | |
外部 |
--------- | |
模式0 |
162054378 | |
模式1 |
165423078 | |
模式2 |
216748530 | |
模式3 |
216584307 |
分组8 |
模式4 |
641205783 | |
模式5 |
165230487 | |
模式6 |
614027538 | |
模式7 |
274615083 | |
模式8 |
216847350 | |
B |
A=模式7 | |
外部 |
--------- | |
模式0 |
204761853 | |
模式1 |
612047583 | |
模式2 |
278016435 | |
模式3 |
240831765 |
分组9 |
模式4 |
427061853 | |
模式5 |
210856743 | |
模式6 |
264170583 | |
模式7 |
274086153 | |
模式8 |
287410365 | |
B |
A=模式8 | |
外部 |
--------- | |
模式0 |
208134657 | |
模式1 |
120685734 | |
模式2 |
287103654 | |
模式3 |
832510476 |
分组10 |
模式4 |
204851763 | |
模式5 |
210853647 | |
模式6 |
216084573 | |
模式7 |
278406153 | |
表1.
关于预测模式的信息可通过将两个子块38的预测模式信息结合在一个码字中,进行有效地编码。然后,比特流包含结果码字,其中每个码字表示两个子块的预测模式。表2列出了0和80之间的编码号(Code No.)的示范二进制码字。第一子块的模式的可能性表示为Prob0,而第二子块的模式的可能性表示为Prob1。
编码号 |
Prob0 |
Prob1 |
码字 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
001 |
2 |
1 |
0 |
011 |
3 |
1 |
1 |
00001 |
4 |
0 |
2 |
00011 |
5 |
2 |
0 |
01001 |
6 |
0 |
3 |
01011 |
7 |
3 |
0 |
0000001 |
8 |
1 |
2 |
0000011 |
9 |
2 |
1 |
0001001 |
10 |
0 |
4 |
0001011 |
11 |
4 |
0 |
0100001 |
12 |
3 |
1 |
0100011 |
13 |
1 |
3 |
0101001 |
14 |
0 |
5 |
0101011 |
15 |
5 |
0 |
000000001 |
16 |
2 |
2 |
000000011 |
17 |
1 |
4 |
000001001 |
18 |
4 |
1 |
000001011 |
编码号 |
Prob0 |
Prob1 |
码字 |
19 |
0 |
6 |
000100001 |
20 |
3 |
2 |
000100011 |
21 |
1 |
5 |
000101001 |
22 |
2 |
3 |
000101011 |
23 |
5 |
1 |
010000001 |
24 |
6 |
0 |
010000011 |
25 |
0 |
7 |
010001001 |
26 |
4 |
2 |
010001011 |
27 |
2 |
4 |
010100001 |
28 |
3 |
3 |
010100011 |
29 |
6 |
1 |
010101001 |
30 |
1 |
6 |
010101011 |
31 |
7 |
0 |
00000000001 |
32 |
0 |
8 |
00000000011 |
33 |
5 |
2 |
00000001001 |
34 |
4 |
3 |
00000001011 |
35 |
2 |
5 |
00000100001 |
36 |
3 |
4 |
00000100011 |
37 |
1 |
7 |
00000101001 |
38 |
4 |
4 |
00000101011 |
39 |
7 |
1 |
00010000001 |
40 |
8 |
0 |
00010000011 |
41 |
6 |
2 |
00010001001 |
42 |
3 |
5 |
00010001011 |
43 |
5 |
3 |
00010100001 |
44 |
2 |
6 |
00010100011 |
45 |
1 |
8 |
00010101001 |
46 |
2 |
7 |
00010101011 |
47 |
7 |
2 |
01000000001 |
编码号 |
Prob0 |
Prob1 |
码字 |
48 |
8 |
1 |
01000000011 |
49 |
5 |
4 |
01000001001 |
50 |
4 |
5 |
01000001011 |
51 |
3 |
6 |
01000100001 |
52 |
6 |
3 |
01000100011 |
53 |
8 |
2 |
01000101001 |
54 |
4 |
6 |
01000101011 |
55 |
5 |
5 |
01010000001 |
56 |
6 |
4 |
01010000011 |
57 |
2 |
8 |
01010001001 |
58 |
7 |
3 |
01010001011 |
59 |
3 |
7 |
01010100001 |
60 |
6 |
5 |
01010100011 |
61 |
5 |
6 |
01010101001 |
62 |
7 |
4 |
01010101011 |
63 |
4 |
7 |
0000000000001 |
64 |
8 |
3 |
0000000000011 |
65 |
3 |
8 |
0000000001001 |
66 |
7 |
5 |
0000000001011 |
67 |
8 |
4 |
0000000100001 |
68 |
5 |
7 |
0000000100011 |
69 |
4 |
8 |
0000000101001 |
70 |
6 |
6 |
0000000101011 |
71 |
7 |
6 |
0000010000001 |
72 |
5 |
8 |
0000010000011 |
73 |
8 |
5 |
0000010001001 |
74 |
6 |
7 |
0000010001011 |
75 |
8 |
6 |
0000010100001 |
76 |
7 |
7 |
0000010100011 |
编码号 |
Prob0 |
Prob1 |
码字 |
77 |
6 |
8 |
0000010101001 |
78 |
8 |
7 |
0000010101011 |
79 |
7 |
8 |
0001000000001 |
80 |
8 |
8 |
0001000000011 |
表2
在九种预测模式(表1)和模式可能性(表1、表2)中,模式选择算法确定预测特定子块所根据的模式。在本发明的一个实施例中,该算法使用像素a-p和原始帧中的相应像素之间的绝对差之和(SAD)和上述模式可能性,来选择模式。SAD和可能性表用于为特定子块38选择模式。该算法对九种可能模式(模式0-8)的每一种计算参数uError。提供最小uError的模式即为子块38选择的模式。
按照如下方式计算uError:
uError=SAD({a,...,p},{原始帧})+rd_quant[uMBQP]*uProb,
其中SAD({a,...,p},{原始帧})是像素a-p和原始帧中的相应像素之间的绝对差之和,
其中rd_quant[uMBQP]是由量化参数uMBQP索引的恒值表。uMBQP由下式给出
const U8 rd_quarzt[32]=
{1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5,5,6,7,7,8,9,11,12,13,15,17,19,21,24,27,30};以及
其中uProb是模式出现的可能性,由在模式可能性表(表1)中的位置而定。
例如,子块A的预测模式是模式1,且子块B的预测模式是模式1。字符串“162530487”表示模式1也是子块C的最可能模式。模式6是第二最可能的模式等等。这样,在该算法计算模式0的uError时,可能性uProb为5。此外,对于模式1,可能性uProb为0,对于模式2,可能性uProb为2,对于模式3,可能性uProb为4,以此类推。
除对视频帧的亮度部分(Y)进行编码之外,本发明的视频系统1还可以预测视频帧的色度部分(U、V)。色度部分可以视为色度平面(U面和V面)。通常,色度平面(U面和V面)是亮度平面的四分之一大小。因此,在16×16宏块中,相应的8×8像素块同时存在于U面和V面中。这些8×8的块被分成4×4的块。一般来讲,对色度块不传送单独的预测模式。而是将为Y面块传送的模式用作为U面和V面块的预测模式。
图6示出了根据一个实施例结合本发明的理论的视频装置。如图所示,视频装置600包含编码器610和解码器620,分别连接到装置的输入和输出。如之前所述,编码器610设计用于接收视频帧数据,将各自的帧数据分为宏块和子块,并如上所述对子块进行选择性地内编码。解码器620设计用于接收内编码的子块,并还原视频帧数据,如上所述。
编码器610和解码器620与如上所述的编码设备1和解码设备5的构成相似。在各种实施例中,编码器610和解码器620可以共享至少部分其构成表和编码/解码逻辑(如编码器610和解码器620的交叉块所示的)。
在各种实施例中,视频装置600可以是无线移动电话、手掌大小的计算装置如个人数字助理、膝上型计算装置、台式计算装置、服务器以及其它类似的计算装置。在其它实施例中,视频装置600可以是电路板元件,如视频“附加”电路板(也称为子电路板)、母板以及其它类似的电路板。
在另一些其它实施例中,而不是同时具有编码器610和解码器620,视频装置600可以只包含编码器610,如在视频摄像机的情况下,或只包含解码器620,如在DVD播放机、电视机、显示监视器或机顶盒的情况下。
图7显示了包含可记录媒体700的制造产品,该可记录媒体700具有实现上述编码设备1和/或解码设备5的软件实施例的编程指令。编程指令设计用于对视频装置710进行编程,以使视频装置710配备有本发明的编码和解码能力。
对于该实施例,视频装置710包含存储媒体712以存储至少部分实现编码设备1和/或解码设备5的软件实施例的工作备份,以及至少一个连接到存储媒体712的处理器714以执行编程指令。
视频装置712可以是任何一个之前列举的示范装置或其它类似的视频装置。产品710可以是例如磁盘、光盘(CD)、DVD或其它类似的计算机可读媒体。在其它实施例中,产品710可以是分发服务器,通过专用和/或公共网络如因特网在线分发编码设备1和/或解码设备5。在一个实施例中,产品710是网页服务器。
图8显示具有相互通信连接的视频发送器802和视频接收器804的示范系统,视频发送器802依照本发明的理论对视频进行编码,并将编码的视频提供给视频接收器802,而视频接收器802又对编码的视频进行解码以再现视频。视频发送器802和视频接收器804分别配备有上述编码设备1和解码设备5。
视频发送器802的一个实例是视频服务器,而视频接收器的实例是连接到视频发送器802的客户装置。
在各种备选实施例中,模式4和6的编码被简化,在预测要编码的子块的像素值中只使用要编码的子块上方的相邻子块的像素。更确切地说,在模式4和6下,要编码的子块的像素值按以下方式预测:
简化的模式4
a =(A+2*B+C+2)/4;
b,e =(B+2*C+D+2)/4;
c,f,i =(C+2*D+E+2)/4;
d,g,j,m=(D+2*E+F+2)/4;
h,k,n =(E+2*F+G+2)/4;
l,o =(F+2*G+H+2)/4;
p =(G+3*H+2)/4;
简化的模式6
a =(A+B+1)/2;
b,i =(B+C+1)/2;
c,j =(C+D+1)/2;
d,k =(D+E+1)/2;
l =(E+F+1)/2;
e =(A+2*B+C+2)/4;
f,m =(B+2*C+D+2)/4;
g,n =(C+2*D+E+2)/4;
h,o =(D+2*E+F+2)/4;
p =(E+2*F+G+2)/4;
此外,模式7的编码被简化,在预测要编码的子块的像素值中只使用要编码的子块左侧的相邻子块的像素。更确切地说,要编码的子块的像素值按以下方式预测:
简化的模式7
a =(I+J+1)/2;
b =(I+2*J+K+2)/4;
c,e =(J+K+1)/2;
d,f =(J+2*K+L+2)/4;
g,i =(K+L+1)/2;
h,j =(K+2*L+L+2)/4;
l,n,k,
m,o,p =L;
在另一些其它实施例中,宏块可以分为M×N子块,其中M×N可以是8×8、8×4或4×8代替。为了便于这部分的说明,如图9a-9c所示,M×N子块的像素将被称为pij,其中下标i表示子块的行位置,并且在8×8和8×4子块的情况下可以假定为1到8的值,或在4×8子块的情况下假定为1到4的值,而下标j表示子块的列位置,并且同样在8×8和4×8子块的情况下可以假定为1到8的值,或在8×4子块的情况下假定为1到4的值。
如图所示,要编码的子块上方的相邻子块的预测器像素被称为t0到t15,而要编码的子块左侧的相邻子块的预测器像素被称为l0到l15。
对于模式0-2,M×N子块的像素值,无论M×N是8×8、8×4还是4×8,均按以下方式预测:
模式0
如t0-tN和l0-lM可用,
pij=(t0+...+tN+l0+...+lM+N/2+M/2)/(M+N);
否则,如只有t0-tN可用,
pij=(t0+...+tN+N/2)/N;
否则,如只有l0-lM可用,
pij=(l0+...+lM+M/2)/M;
否则
pij=128;
i=0-(N-1),j=0-(M-1)。
模式1
如t0-tN可用
pij=tj;
i=0-(N-1),j=0-(M-1)。
模式2
如l0-lN可用
pij=li;
i=0-(N-1),j=0-(M-1)。
对于模式3-8,M×N子块的像素值按以下方式预测:
模式3
如所有t
0-t
N和l
0-l
M均可用于预测
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
- |
p07 |
p07 |
(t5+t6<<1+t7+2)>>2 |
- |
p06,p17 |
p06,p17 |
(t4+t5<<1+t6+2)>>2 |
- |
p05,p16,p27 |
p05,p16,p27 |
(t3+t4<<1+t5+2)>>2 |
- |
p04,p15,p26,p37 |
p04,p15,p26,p37 |
(t2+t3<<1+t4+2)>>2 |
p03 |
p03,p14,p25,p36 |
p03,p14,p25,p36,p47 |
(t1+t2<<1+t3+2)>>2 |
p02,p13 |
p02,p13,p24,p35 |
p02,p13,p24,p25,p46,p57 |
(t0+t1<<1+t2+2)>>2 |
p01,p12,p23 |
p01,p12,p23,p34 |
p01,p12,p23,p34,,p45,p56,p67 |
(q+t0<<1+t1+2)>>2 |
p00,p11,p22,p33 |
p00,p11,p22,p33 |
p00,p11,p22,p33,p44,p55,p66,p77 |
(l0+q<<1+t0+2)>>2 |
p10,p21,p32,p43 |
p10,p21,p32 |
p10,p21,p32,,p43,p54,p65,p76 |
(l1+l0<<1+q+2)>>2 |
p20,p31,p42,p53 |
p20,p31 |
p20,p31,p42,p53,p64,p75 |
(l2+l1<<1+l0+2)>>2 |
p30,p41,p52,p63 |
p30 |
p30,p41,p52,p63,p74 |
(l3+l2<<1+l1+2)>>2 |
p40,p51,p62,p73 |
- |
p40,p51,p62,p73 |
(l4+l3<<1+l2+2)>>2 |
p50,p62,p72 |
- |
p50,p61,p72 |
(l5+l4<<1+l3+2)>>2 |
p60,p71 |
- |
p60,p71 |
(l6+l5<<1+l4+2)>>2 |
p70 |
- |
p70 |
(l7+l6<<1+l5+2)>>2 |
模式4
如所有t
0-t
N和l
0-l
M均可用于预测
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
p00 |
p00 |
p00 |
(t2+t1<<1+t0+2)>>2 |
p01,p10 |
p01,p10 |
p01,p10 |
(t3+t2<<1+t1+2)>>2 |
p02,p11,p20 |
p02,p11,p20 |
p02,p11,p20 |
(t4+t3<<1+t2+2)>>2 |
p03,p12,p22,p30 |
p03,p12,p21,p30 |
p03,p12,p21,p30 |
(t5+t4<<1+t3+2)>>2 |
p13,p22,p31,p40 |
p04,p11,p22,p31 |
p04,p13,p22,p31,p40 |
(t6+t5<<1+t4+2)>>2 |
p23,p32,p41,p50 |
p05,p14,p23,p33 |
p05,p14,p23,p32,p41,p50 |
(t7+t6<<1+t5+2)>>2 |
p13,p42,p51,p60 |
p06,p15,p24,p33 |
p06,p15,p24,p33,p43,p51,p60 |
(t8+t7<<1+t6+2)>>2 |
p43,p52,p61,p70 |
p07,p16,p25,p34 |
p07,p16,p25,p34,p43,p52,p61,p70 |
(t9+t8<<1+t7+2)>>2 |
p53,p62,p71 |
p17,p26,p35 |
p17,p26,p35,,p44,p53,p62,p71 |
(t10+t9<<1+t9+2)>>2 |
p53,p72 |
p27,p36 |
p27,p36,p45,p54,p63,p72 |
(t11+t10<<1+t9+2)>>2 |
p73 |
p37 |
p37,p46,p55,p64,p73 |
(t12+t11<<1+t10+2)>>2 |
- |
- |
p47,p56,p65,p74 |
(t13+t12<<1+t11+2)>>2 |
- |
- |
p57,p66,p75 |
(t14+t13<<1+t12+2)>>2 |
- |
- |
p67,p76 |
(t15+t14<<1+t13+2)>>2 |
- |
- |
p77 |
(t15+t25<<1+t14+2)>>2 |
模式5
如所有t
0-t
N和l
0-l
M均可用于预测,则
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
- |
p07 |
p07 |
(t6+t7+1)>>1 |
- |
p17 |
p17 |
(t5+t6<<1+t7+2)>>2 |
- |
P06,p27 |
p06,p27 |
(t5+t6+1)>>1 |
- |
p16,p37 |
p16,p37 |
(t4+t5<<1+t6+2)>>2 |
- |
p05,p26 |
p05,p26,p47 |
(t4+t5+1)>>1 |
- |
p15,p36 |
p15,p36,p57 |
(t3+t4<<1+t5+2)>>2 |
- |
p04,p25 |
p04,p25,p46,p67 |
(t3+t4+1)>>1 |
- |
p14,p35 |
p14,p35,p56,p77 |
(t2+t3<<1+t4+2)>>2 |
p03 |
p03,p24 |
p03,p24,p45,p66 |
(t2+t3+1)>>1 |
p13 |
p13,p34 |
p13,p34,p55,p76 |
(t1+t2<<1+t3+2)>>2 |
p02,p23 |
p02,p23 |
p02,p33,p44,p65 |
(t1+t2+1)>>1 |
p12,p33 |
p12,p33 |
p12,p33,p54,p75 |
(t0+t1<<1+t2+2)>>2 |
p01,p22,p43 |
p01,p22 |
p01,p22,p43,p64 |
(t0+t1+1)>>1 |
p11,p32,p53 |
p11,p32 |
p11,p32,p53,p74 |
(q+t0<<1+t1+2)>>2 |
p00,p21,p42,p63 |
p00,p21 |
p00,p21,p42,p63 |
(q+t0+1)>>1 |
p10,p31,p52,p73 |
p10,p31 |
p10,p31,p52,p73 |
(l0+q<<1+t0+2)>>2 |
p20,p41,p62 |
p20 |
p20,p41,p62 |
(l1+l0<<1+q+2)>>2 |
p30,p51,p72 |
p30 |
p30,p51,p72 |
(l2+l1<<1+l0+2)>>2 |
p40,p61 |
- |
p40,p61 |
(l3+l2<<1+l1+2)>>2 |
p50,p71 |
- |
p50,p71 |
(l4+l3<<1+l2+2)>>2 |
p60 |
- |
p60 |
(l5+l4<<1+l3+2)>>2 |
p70 |
- |
p70 |
(l6+l5<<1+l4+2)>>2 |
模式6
如所有t
0-t
N和l
0-l
M均可用于预测
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
p00 |
p00 |
p00 |
(t0+t1+1)>>1 |
p10 |
p10 |
p10 |
(t0+t1<<1+t2+2)>>2 |
p01,p20 |
p01,p20 |
p01,p20 |
(t1+t2+1)>>1 |
p11,p30 |
p11,p30 |
p11,p30 |
(t1+t2<<1+t3+2)>>2 |
p02,p21,p40 |
p02,p21 |
p02,p21,p40 |
(t2+t3+1)>>1 |
p12,p31,p50 |
p12,p31 |
p12,p31,p50 |
(t2+t3<<1+t4+2)>>2 |
p03,p22,p41,p60 |
p03,p22 |
p03,p22,p41,p60 |
(t3+t4+1)>>1 |
p13,p32,p51,p70 |
p13,p32 |
p13,p32,p51,p70 |
(t3+t4<<1+t5+2)>>2 |
p23,p42,p61 |
p04,p23 |
p04,p23,p42,p61 |
(t4+t5+1)>>1 |
p33,p52,p71 |
p14,p33 |
p14,p33,p52,p71 |
(t4+t5<<1+t6+2)>>2 |
p43,p62 |
p05,p24 |
p05,p24,p43,p62 |
(t5+t6+1)>>1 |
p53,p72 |
p15,p34 |
p15,p34,p53,p72 |
(t5+t6<<1+t7+2)>>2 |
p63 |
p06,p25 |
p06,p25,p44,p63 |
(t6+t7+1)>>1 |
p73 |
p16,p35 |
p16,p35,p54,p73 |
(t6+t7<<1+t8+2)>>2 |
- |
p07,p26 |
p07,p26,p45,p64 |
(t7+t8+1)>>1 |
- |
p17,p36 |
p17,p36,p55,p74 |
(t7+t8<<1+t9+2)>>2 |
- |
p27 |
p27,p46,p65 |
(t8+t9+1)>>1 |
- |
p37 |
p37,p56,p75 |
(t8+t9<<1+t10+2)>>2 |
- |
- |
p47,p66 |
(t9+t10+1)>>1 |
- |
- |
p57,p76 |
(t9+t10<<1+t11+2)>>2 |
- |
- |
p67 |
(t10+t11+1)>>1 |
- |
- |
p77 |
(t10+t11<<1+t12+2)>>2 |
模式7
如所有t
0-t
N和l
0-l
M均可用于预测
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
p00 |
p00 |
p00 |
(l0+l1+1)>>1 |
p01 |
p01 |
p01 |
(l0+l1<<1+l2+2)>>2 |
p10,p02 |
p10,p02 |
p10,p02 |
(l1+l2+1)>>1 |
p11,p03 |
p11,p03 |
p11,p03 |
(l1+l2<<1+l3+2)>>2 |
p20,p12 |
p20,p12,p04 |
p20,p12,p04 |
(l2+l3+1)>>1 |
p21,p13 |
p21,p13,p05 |
p21,p13,p05 |
(l2+l3<<1+l4+2)>>2 |
p30,p22 |
p30,p22,p14,p06 |
p30,p22,p14,p06 |
(l3+l4+1)>>1 |
p31,p23 |
p31,p23,p15,p07 |
p31,p23,p15,p07 |
(l3+l4<<1+l5+2)>>2 |
p40,p32 |
p32,p24,p16 |
p40,p32,p24,p16 |
(l4+l5+1)>>1 |
p41,p33 |
p33,p25,p17 |
p41,p33,p25,p17 |
(l4+l5<<1+l6+2)>>2 |
p50,p42 |
p34,p26 |
p50,p42,p34,p26 |
(l5+l6+1)>>1 |
p51,p43 |
p35,p27 |
p51,p43,p35,p27 |
(l5+l5<<1+l7+2)>>2 |
p60,p52 |
p36 |
p60,p52,p44,p36 |
(l6+l7+1)>>1 |
p61,p53 |
p37 |
p51,p53,p45,p37 |
(l6+l7<<1+l7+2)>>2 |
p70,p62,p71,p63,p72,p73 |
- |
p70,p71,p72,p73,p74,p75,p76,p77,p62,p63,p64,p65,p66,p67,p54,p55,p56,p57,p46,p47 |
l7 |
模式8
如所有t
0-t
N和l
0-l
M均可用于预测,则
4×8子块 |
8×4子块 |
8×8子块 |
预测 |
- |
p07 |
p07 |
(t4+t5<<1+t6+2)>>2 |
- |
p06 |
p06 |
(t3+t4<<1+t5+2)>>2 |
- |
p05,p17 |
p05,p17 |
(t2+t3<<1+t4+2)>>2 |
- |
p04,p16 |
p04,p16 |
(t1+t2<<1+t3+2)>>2 |
p03 |
p03,p15,p27 |
p03,p15,p27 |
(t0+t1<<1+t2+2)>>2 |
p02 |
p02,p14,p26 |
p02,p14,p26 |
(q+t0<<1+t2+2)>>2 |
p01,p13 |
p01,p13,p25,p37 |
p01,p13,p25,p37 |
(l0+q<<1+t0+2)>>2 |
p00,p12 |
p00,p12,p24,p36 |
p00,p12,p24,p36 |
(q+l0+1)>>1 |
p10,p22 |
p10,p22,p34 |
p10,p22,p34,p46 |
(l0+l1+1)>>1 |
p11,p23 |
p11,p23,p35 |
p11,p23,p35,p47 |
(q+l0<<1+l1+2)>>2 |
p20,p33 |
p20,p32 |
p20,p32,p44,p56 |
(l1+l2+1)>>1 |
p21,p33 |
p21,p33 |
p21,p33,p45,p57 |
(l0+l1<<1+l2+2)>>2 |
p30,p42 |
p30 |
p30,p42,p54,p66 |
(l2+l3+1)>>1 |
p31,p43 |
p31 |
p31,p43,p55,p67 |
(l1+l2<<1+l3+2)>>2 |
p40,p52 |
- |
p40,p52,p64,p76 |
(l3+l4+1)>>1 |
p41,p53 |
- |
p41,p53,p65,p77 |
(l2+l3<<1+l4+2)>>2 |
p50,p62 |
- |
p50,p62,p74 |
(l4+l5+1)>>1 |
p51,p63 |
- |
p51,p63,p75 |
(l3+l4<<1+l5+2)>>2 |
p60,p72 |
- |
p60,p72 |
(l5+l6+1)>>1 |
p61,p73 |
- |
p61,p73 |
(l4+l5<<1+l6+2)>2 |
p70 |
- |
p70 |
(l6+l7+1)>>1 |
p71 |
- |
p71 |
(l5+l6<<1+l7+2)>>2 |
总结和后记
因此,从上述说明中可以看出,已经描述了一种对视频帧数据进行内编码和解码的新颖方法,包括编码器、解码器以及结合该方法的装置和系统。
虽然根据以上实施例和应用实例对本发明进行了描述,但本领域的技术人员必须认识到,本发明并不限于所述实施例和应用实例。在所附权利要求的思想和范围之内,可以对本发明进行修改和变更。具体地说,本发明的部分或全部(如各种操作逻辑)可以在专用集成电路(ASIC)中实现。
因此,描述应被视为说明性的而不是对本发明的限制。