用于视频编码优化的方法和设备
交叉引用相关申请
本申请要求2004年6月18日提交的美国临时申请序号No.60/581,280的权益,其在此整个被引入作为参考。
技术领域
本发明一般涉及视频编码器和解码器,并且尤其涉及一种用于视频编码优化的方法和设备。
技术背景
多遍视频编码方法已用于许多视频编码架构中,如MPEG-2(运动图像专家组2)和JVT(联合视频工作组)/H.264/MPEG AVC(高级视频编码),以便获得更好的编码效率。这些方法背后的思想是,通过执行分析并收集能够用于将来迭代中的统计特性以试图提高编码性能,来设法利用几次迭代来对整个序列进行编码。
两遍编码方案已经用于几种编码系统中,包括MICROSOFT(微软)WINDOWS MEDIA和REALVIDEO编码器。根据这种编码方案,编码器首先利用一些初始预定的设置来对整个序列执行初遍编码,并收集关于该序列内每个图像的编码效率的统计特性。在完成该过程之后,通过同时考虑先前所产生的统计特性来再一次重新处理并编码整个序列。这可以大大提高编码效率,甚至允许我们满足某些预定的编码约束或要求,例如对于编码后的流满足给定的比特率约束。这是因为,编码器现在更加了解整个视频序列或图像的特征,从而能够更加适当地选择参数,如将要用于编码的量化器、死区处理(deadzoning)等。能够在该第一遍编码期间收集的、并且能够用于该用途的一些统计特性是每个图像的位数、空间活性(即平均标准化宏块方差和均值)、时间活性(即运动矢量/运动矢量方差)、失真(例如均方差(MSE))等。虽然利用这些方法能够大大提高编码性能,但是这些方法也倾向于具有很高的复杂性,只能脱机使用(先对整个序列编码、然后执行第二遍编码),而不适于实时编码器,并且不一定考虑到可以从第一步编码推断的所有可能统计特性。
发明内容
本发明致力于解决现有技术的这些及其它缺点和不利条件,本发明涉及一种用于视频编码优化的方法和设备。
根据本发明的一方面,提供了一种用于对与多个图像相对应的视频信号数据进行编码的编码器。该编码器包括重叠窗口分析单元,该重叠窗口分析单元用于利用多个重叠分析窗口,对与视频信号数据相对应的多个图像的至少一些图像执行视频信号数据的视频分析,并基于视频分析的结果来修改该视频信号数据的编码参数。
根据本发明的另一方面,提供了一种用于对与多个图像相对应的视频信号数据进行编码的方法。该方法包括以下步骤:利用多个重叠分析窗口,对与视频信号数据相对应的多个图像的至少一些图像执行视频信号数据的视频分析,并基于视频分析的结果来修改视该频信号数据的编码参数。
根据以下连同附图一起阅读的示范性实施例的详细描述,本发明的这些及其它方面、特征和优点将变得很清楚。
附图说明
根据以下示例图可以更好地理解本发明,其中:
图1示出了根据本发明原理的、基于窗口的示范性两遍编码架构的框图;
图2示出了根据本发明原理的、在变换和量化期间死区处理的影响的曲线图;
图3示出了根据本发明原理的编码器的框图;以及
图4示出了根据本发明原理的示范性编码过程的流程图。
具体实施方式
本发明涉及一种用于视频编码优化的方法和设备。有利的是,本发明允许视频编码器在给定的特定比特率下,以大大提高的主观和客观质量来压缩视频序列。这是通过对与仍待编码的N个随后图像相比的当前图像执行简单分析,通过视频序列的非因果处理而得以实现的。然后,编码器利用该分析结果,对将要用于当前图像的编码的编码参数(包括但不限于图像/片类型、量化器、阈值处理参数、拉格朗日算子λ等)作出更好的决定。和对整个序列执行两遍或多遍编码以获得更好编码性能的几种现有技术系统不同,本发明较简单,从而对复杂性具有较小的影响。本发明的原理也可以和其它多遍编码策略一起使用,以获得更高的效率。以类似的方式,可以创建因果系统(使用M个先前已编码的图像)。
按照本发明的原理,首先只对整个序列的重叠图像窗口子集进行分析。基于所产生的统计特性,来适当地调节每个图像的编码参数。这些编码参数可以包括但不限于:图像/片类型决策(I、P、B)、帧/场决策、B图像距离、图像或宏块(MB)量化值(QP)、阈值处理系数、拉格朗日参数、色度偏移、加权预测、参考图像选择、多块大小决策、熵参数初始化、帧内模式决策、去块滤波器参数等。可以利用可能需要不同复杂性代价的分析方法来执行图像/宏块分析,包括完全第一遍编码、具有空间分析的简单第一遍运动估计,乃至简单的时间与空间分析度量,包括但不限于方差、图像差等。此外,重叠图像窗口(及重叠图像)可以根据需要变大或变小(变多或变少),由此提供不同的延迟/性能折衷。
本说明书举例说明本发明的原理。因而,应该理解,本领域技术人员将能够设计出虽然在此未明确描述或示出、但是能具体实施本发明原理且被包括在本发明精神和范围内的各种配置。
在此列举的所有例子和条件语言都试图用于教学,以帮助读者理解本发明人所提出的、有助于促进本技术领域发展的本发明的原理和概念,并且应该被认为不限于这些具体列举的例子和条件。
而且,在此列举本发明的原理、方面和实施例及本发明的特定例子的所有语句,都试图包括本发明的结构和功能等效物。另外,这种等效物试图包括当前已知的等效物以及将来开发的等效物,即与结构无关的、执行相同功能的任何被开发元件。
因而,例如本领域技术人员应该理解,在此给出的框图代表具体实施本发明原理的说明性电路的概念图。类似应该理解,任何流程表、流程图、状态转移图、伪码等,都代表实质上可以在计算机可读介质中表示、从而可通过计算机或处理器来执行的各种过程,而不管这种计算机或处理器是否明确示出。
通过利用专用硬件以及能够与适当软件关联地执行软件的硬件,可以提供图中所示的各种元件的功能。当通过处理器来提供这些功能时,可以通过单个专用处理器、通过单个共享处理器、或通过其中一些可以被共享的多个单独处理器,来提供这些功能。而且,术语“处理器”或“控制器”的显式使用不应被认为专门指能够执行软件的硬件,而是可以隐含地包括但不限于数字信号处理器(DSP)硬件、用于存储软件的只读存储器(ROM)、随机存储器(RAM)和非易失性存储器。
也可以包括其它常规和/或定制的硬件。类似地,图中所示的任何开关都只是概念性的。如从上下文更具体地理解的,可以通过程序逻辑的操作、通过专用逻辑、通过程序控制和专用逻辑的交互、乃至手动操作的可以由实施者选择的特定技术来实现它们的功能。
在本发明权利要求中,被表示为用于执行指定功能的装置的任何元件都试图包括执行该功能的任何方式,例如包括:a)执行该功能的电路元件的组合;或b)任何形式的软件,因而包括和用于执行该软件的适当电路相结合以执行该功能的固件、微码等。如这些权利要求所定义的本发明在于,以权利要求所要求的方式来组合并集合由所列举的各种装置所提供的功能性。因而,申请人认为能够提供这些功能性的任何装置都等效于在此所示出的那些装置。
根据本发明的原理,公开了一种新的多遍编码架构,与在每一遍编码期间都考虑整个视频序列或独立窗口的以前方法不同,该新的多遍编码架构对允许在相邻窗口之间重新使用先前确定的特征的重叠窗口,执行每遍编码。虽然由于能够利用少得多的步骤来实现最优编码,而得到更低的成本/复杂性、以及更小的存储器需求/低等待时间,但是该架构仍然能够获得多遍编码的好处,如大大提高的视频质量。考虑到由于相邻窗口之间的相似性,编码器有可能甚至在第一遍编码期间就决定了最佳参数、从而不需要更多的迭代进行最终编码,所以该特征对于实时编码应用尤为重要。
转到图1,一般用附图标记100来表示基于窗口的两遍编码架构。处理/分析窗口的大小为Wp个图像,而相邻两组之间允许的重叠大小为Wo个图像。第一窗口的处理将提供某些初始统计特性,这些初始统计特性能够用于为该窗口内的所有帧确定一组初步编码特征。更具体地说,如果使用两遍方案,则可以基于所产生的参数,立即对也不属于将来窗口的所有帧进行编码。然而,该信息能够立即用于该将来窗口的处理/分析。例如,在该窗口的处理期间这些参数可用作初始种子,并且考虑到大多数序列中所存在的高度时间相关,这些参数能够改进分析。更重要的是,可以基于新产生的统计特性,对用于由于Wo的选择而也属于先前窗口的该窗口中的初始帧的编码参数,进行进一步改进/限制。例如在处理整个序列或M个相邻窗口之后,如果使用较多迭代/遍,这基本上允许更快地收敛到最优解。显然,取决于编码器的能力或需求,时间窗口可以尽可能的大或小,同时也可利用不同窗口大小(更大或更小的Wo和Wp)来执行这种方案的迭代。
在我们的多遍方案的预分析步骤期间,可以使用多种不同的准则。这种准则可以取决于编码器架构的复杂性约束,并且可以考虑从简单的空间-时间方法(包括但不限于边缘检测、纹理分析度量以及绝对图像差)到更复杂的策略(包括但不限于离散余弦变换(DCT)分析、第一遍帧内编码、运动估计/补偿、乃至完全编码)。也可以通过增加或减少分析和/或重叠窗口,来调节等待时间。
作为这种系统的例子,在该分析期间可以计算以下准则:
对于窗口Wp内的每个图像k,进行以下计算:
(i)对于位置(i,j)处的每个宏块,如下计算均值MBmean(k,i,j):
MBmean ( k , i , j ) = 1 B W × B H Σ y = 0 , x = 0 y = B H - 1 , x = B W - 1 c [ k , i × B W + x , j × B H + y ] ]]>
(ii)如下计算均方值MBsqmean(k,i,j):
MBsqmean ( k , i , j ) = 1 B W × B H Σ y = 0 , x = 0 y = B H - 1 , x = B W - 1 ( c [ k , i × B W + x , j × B H + y ] ) 2 ]]>
(iii)如下计算方差值MBvariance(k,i,j):
MBvariance(k,i,j)=MBsqmean(k,i,j)-(MBmean(k,i,j)2
(iv)对于整个图像,如下计算平均宏块均值AMMk:
AMM k = 1 PMB W × PMB H Σ j = 0 , i = 0 j = PMB H - 1 , i = PMB W - 1 MBmean ( k , i , j ) ]]>
(v)如下计算平均宏块方差AMVk:
AMV k = 1 PMB W × PMB H Σ j = 0 , i = 0 j = PMB H - 1 , i = PMB W - 1 MBvariance ( k , i , j ) ]]>
(vi)如下计算图像方差PVk:
PV k = 1 PMB W × PMB H Σ j = 0 , i = 0 j = PMB H - 1 , i = PMB W - 1 MBsqmean ( k , i , j ) - AMM k 2 ]]>
其中c[x,y]对应于位置(x,y)的像素值,PMBW和PMBH分别是用宏块表示的图像宽度和高度,以及BW和BH是当前图像中每个宏块的宽度和高度(通常为BW=BH=16)。
此外,也可以如下计算以下相对于图像m(例如m=k+1)的时间特征:
(I)如下计算平均绝对图像差MAPDk,m:
MAPD k , m = 1 PMB W × PMB H × B W × B H Σ y = 0 , x = 0 y = PMB H × B H - 1 , x = PMB W × B W - 1 | c [ k , x , y ] - c [ m , x , y ] | ]]>
(II)如下计算平均绝对加权图像差MAWPDk,m:
MAWPD k , m = 1 PMB W × PMB H × B W × B H Σ y = 0 , x = 0 y = PMB H × B H - 1 , x = PMB W × B W - 1 | c [ k , x , y ] - AMM k AMM m c [ m , x , y ] | ]]>
(III)如下计算平均绝对偏移图像差MAWPDk,m:
MAWPD k , m = 1 PMB W × PMB H × B W × B H Σ y = 0 , x = 0 y = PMB H × B H - 1 , x = PMB W × B W - 1 | c [ k , x , y ] - c [ m , x , y ] + AMM k - AMM m | ]]>
(IV)如下计算均方图像差MSPEk,m:
MSPE k , m = 1 PMB W × PMB H × B W × B H Σ y = 0 , x = 0 y = PMB H × B H - 1 , x = PMB W × B W - 1 ( c [ k , x , y ] - c [ m , x , y ] ) 2 ]]>
(V)如下计算图像方差之绝对差APVDk,m:
APVDk,m=|PVk-PVm|
可以计算的其它空间-时间特征是:直方图的绝对差,绝对差的直方图,k与M之间的χ2度量,使用任何(乃至多个)边缘算子(包括但不限于canny、sobel或prewitt边缘算子)的k的边缘,乃至用于检测序列交错特性的基于场的度量。可能有用并且可以从以上推断的另外两种统计信息是,当前图像到最接近的过去(last_idistancek)及最接近的将来(next_idistancek)已编码帧内图像的距离,如例如用图像数、编码顺序或图像顺序计数(poc)所度量的。通过考虑场景变化/镜头检测器(shotdetector)和/或默认的图像组(GOP)结构,可以增强这些统计特性。可以利用原始或重构图像来计算时间特征(例如,如果本发明应用于多遍编码实施中),同时这些度量的计算也可考虑运动估计/补偿。
基于以上度量,编码器可以决定修改与编码过程相关的某些图像、宏块乃至子块参数。这些包括诸如以下的参数:量化值(QP),死区/阈值处理系数,用于宏块编码以及帧与场间图像级决策的拉格朗日值,去块滤波器参数,编码和参考图像排序,场景/镜头(包括但不限于淡入淡出/溶解/擦除/闪烁等)检测,GOP结构等。
在本发明的一个说明性实施例中,当对cur_slice_typek片类型的图像k进行编码时,如下考虑以上参数以执行图像QP修改。在该实施例中,将distancek,k+1看作用图像数表示的相邻两个图像之间的距离:
if (next_idistancek>3 && cur_slice_typek==I_Slice){if (PVk<1 && MAPDk,k+1<1 && last_idistancek>5*distancek,k+1)QPk=QPk-4else if (MAPDk,k+1<3 && (k=0 // last_idistancek>5*distancek,k+1))QPk=QPk-3else if (MAPDk,k+1<10)QPk=QPk-2else if (MAPDk,k+1<15)QPk=QPk-1}else if (AMVk>10 && AMVk<60){if (PVk<500 && next_idistancek>3*distancek,k+1){if (MAPDk,k+1<10 && AMVk<35 && last_idistancek>2*distancek,k+1)QPk=QPk-2elseQPk=QPk-1}else if (PVk<1500 && next_idistancek>0){if (MAPk,k+1<25)QPk=QPk-1}}else if (MAPDk,k+1==0 && next_idistancek>3*distancek,k+1 && last_idistancek>4*distancek,k+1)QPk=QPk-2else (((MAPDk,k+1<2 && next_idistancek>3*distancek,k+1 && last_idistancek>2*distancek,k+1)||last_idistancek>30) && next_idistancek>5){if (MAPDk,k+1<1)QPk=QPk-3else if (MAPDk,k+1<4)QPk=QPk-2<!-- SIPO <DP n="9"> --><dp n="d9"/>else if (MAPDk,k+1<10)QPk=QPk-1}
在以上实施例中,没有考虑先前图像或邻近的过去图像是否由于以上规则而已经更新了其QP。这可能导致不必要地更新QP值,在率失真(RD)性能方面这可能是不希望的。为此,与图像类型无关地将参数last_idistance
k更新为等于最后经过QP调节的图像的值。
类似地,可以使用宏块/块方差、均值和边缘统计特性来确定局部编码参数。例如,对于位置(i,j)处的宏块的拉格朗日算子λ的选择,可以考虑以下规则:
if (cur_slice_typek!=B_Slice){if (contains_edges(k,i,j))<paragraph id="d64"><image width="83" height="21" src="A20058001997100151.gif"/></paragraph>else if (cur_slice_typek=I_Slice){if (MBvariance(k,i,j)<15 || MBvariance(k,i,j)>60)<paragraph id="d65"><image width="92" height="22" src="A20058001997100152.gif"/></paragraph>else if (MBvariance(k,i,j)>=15 && MBvariance(k,i,j)<=40)<paragraph id="d66"><image width="92" height="21" src="A20058001997100153.gif"/></paragraph>else<paragraph id="d67"><image width="92" height="22" src="A20058001997100154.gif"/></paragraph>}<!-- SIPO <DP n="10"> --><dp n="d10"/>else // cur_slice_typek==P_Slice{if (MBvariance(k,i,j)<15 || MBvariance(k,i,j)>60)<paragraph id="d68"><image width="92" height="21" src="A20058001997100161.gif"/></paragraph>else if (MBvariance(k,i,j)>=15 && MBvariance(k,i,j)<=40)<paragraph id="d69"><image width="92" height="21" src="A20058001997100162.gif"/></paragraph>else<paragraph id="d70"><image width="92" height="21" src="A20058001997100163.gif"/></paragraph>}}else{bscale=max(2.00,min(4.00,(QP/6.0)));if (contains_edges(k,i,j))<paragraph id="d71"><image width="141" height="21" src="A20058001997100164.gif"/></paragraph>else{if (MBvariance(k,i,j)<15 || MBvariance(k,i,j)>60)<paragraph id="d72"><image width="141" height="22" src="A20058001997100165.gif"/></paragraph>else if (MBvariance(k,i,j)>=15 && MBvariance(k,i,j)<=40)<paragraph id="d73"><image width="141" height="22" src="A20058001997100166.gif"/></paragraph><!-- SIPO <DP n="11"> --><dp n="d11"/>else<paragraph id="d74"><image width="92" height="22" src="A20058001997100171.gif"/></paragraph>}if(nal_reference_idc==1)λ=0.80×λ}
对于用于残差编码的量化值或阈值处理系数的选择,可以作出类似的决策。更具体地说,如下执行H.264中系数W的量化:
Z=int({|W|+f×(1<<q_bits)}>>qbits)·sgn(W)
其中Z是最终量化值,而q_bits则基于当前宏块的量化器QP。f×(1<<q_bits)项用作量化过程的舍入项,该项“最佳地”应该等于1/2×(1<<q_bits)。现在转到图2,一般用附图标记200来表示变换和量化期间死区处理的影响。在图2中,零周围的区间被称为死区。用以下两个参数来表征死区量化器:零箱(bin)宽度(2s-2f)和箱外宽度(s),如图2所示。常常把通过f执行的死区优化,用作获得良好率失真性能的有效方法。然而,众所周知,该过程期间死区的引入(即f项的减小)可能通常使附加的比特率减小,同时对质量产生小的影响。对于缺少较高分辨率素材的细节(及胶片颗粒信息)的较低分辨率内容,尤其如此。虽然可以使用f=1/2,但这也可能造成比特率的较大幅度增加,并可能损害RD评价方面的性能。
考虑到不同的频率比其它更为重要,一种备选方法将是考虑该观测结果、以提高性能。不是对所有变换系数都使用固定的f值,而是实质上用矩阵方法来考虑不同值,其中基于频率位置来选择每个死区参数。因此,现在可以如下计算Z:
Z=int({|W|+f(i,j)×(1<<q_bits)}>>qbits)·sgn(W)
其中i和j对应于块变换系数内的当前列或行。阵列f现在可以取决于片或宏块的类型,并且也可取决于当前块的纹理特征(方差或边缘信息)。例如,如果块包含边缘、或具有低方差特征,则重要的是不引入由于死区处理所产生的更多人为产物,因为这些人为产物将更加可见。另一方面,具有高空间活性的块可以掩蔽更多的人为产物,并且可以在不对质量产生大的影响的情况下增加死区处理。也可以取决于当前块是否为将来图像中的块提供任何有用信息(即,当前块内的任何像素是否用于预测其它像素),来改变死区处理。
例如,如果使用4×4变换,则可以使用以下死区处理矩阵:
if (cur_slice_typek==I_Slice){if (MBvariance(k,i,j)<15 || MBvariance(k,i,j)>60)<paragraph id="d83"><image width="170" height="90" src="A20058001997100181.gif"/></paragraph>else if (MBvariance(k,i,j)>=15&&MBvariance(k,i,j)<=40||contains_edges(k,i,j))<paragraph id="d84"><image width="172" height="90" src="A20058001997100182.gif"/></paragraph>else<paragraph id="d85"><image width="173" height="90" src="A20058001997100183.gif"/></paragraph>}<!-- SIPO <DP n="13"> --><dp n="d13"/>else if (cur_slice_typek==P_Slice){if (MBvariance(k,i,j)<15 || MBvariance(k,i,j)>60)<paragraph id="d86"><image width="208" height="90" src="A20058001997100191.gif"/></paragraph>else if (MBvariance(k,i,j)>=15 &&MBvariance(k,i,j)<=40||contains_edges(k,i,j))<paragraph id="d87"><image width="196" height="90" src="A20058001997100192.gif"/></paragraph>else<paragraph id="d88"><image width="211" height="90" src="A20058001997100193.gif"/></paragraph>}else // B_slices{<paragraph id="d89"><image width="174" height="91" src="A20058001997100194.gif"/></paragraph>}
在某些条件下,可能编码器不可能利用将来帧来执行时间分析。在这种情况下,可以通过只考虑先前已编码的图像、并假定将来图像具有类似的时间特征,来执行时间分析。例如,如果当前图像具有高度相似性(例如MAPD
k,k-1小),则假定待编码的下一个图像的相似性(MAPD
k,k+1)也将小。因而,在用(k,k-1)代替所有索引(k,k+1)的同时,可以基于已经可得的信息来修改编码参数。
现在转到图3,一般用附图标记300来表示视频编码器。视频编码器300的输入以信号通信方式连接到预分析块310的输入。预分析块310包括多个帧延迟器312,这多个帧延迟器312以信号通信方式互连,以致这多个帧延迟器312的每一个都顺序地串联,并且全都通过并行信号路径而并联。该并行信号路径也以信号通信方式连接到时间分析器315的输入。所串联连接的、距编码器300的输入最远的最后一个帧延迟器312的输出,以信号通信方式连接到空间分析器320的输入、第一求和点325的反相输入、运动补偿器375的第一输入、以及运动估计器/模式决策块370的第一输入。第一求和点325的输出以信号通信方式连接到变换器330的输入。变换器330的输出以信号通信方式连接到量化器335的第一输入。量化器335的输出以信号通信方式连接到可变长编码器340的第一输入以及逆量化器345的输入。可变长编码器340的输出是视频编码器300的外部可用输出。逆量化器345的输出以信号通信方式连接到逆变换器350的输入。逆变换器350的输出以信号通信方式连接到第二求和点355的非反相第一输入。第二求和点355的输出以信号通信方式连接到环路滤波器360的第一输入。环路滤波器360的输出以信号通信方式连接到图像参考存储器365的第一输入。图像参考存储器365的输出以信号通信方式连接到运动估计器/模式决策块370的第二输入以及运动补偿器375的第二输入。运动估计器/模式决策块370的第一输出以信号通信方式连接到可变长编码器340的第二输入。运动估计器/模式决策块370的第二输出以信号通信方式连接到运动补偿器375的第三输入。运动补偿器375的输出以信号通信方式连接到第一求和点325的非反相输入以及第二求和点355的非反相第二输入。空间分析器320的第一输出以信号通信方式连接到量化器335的第二输入。空间分析器320的第二输出以信号通信方式连接到环路滤波器360的第二输入、运动估计器/模式决策块370的第三输入、以及第一求和点325的非反相输入。时间分析器315的第一输出以信号通信方式连接到量化器335的第二输入。时间分析器315的第二输出以信号通信方式连接到运动估计器/模式决策块370的第四输入。时间分析器315的第三输出以信号通信方式连接到环路滤波器360的第三输入以及图像参考存储器365的第二输入。
在时间分析步骤期间考虑一组图像,这样决定几个参数,包括:片类型决策、GOP结构、加权参数(通过运动估计器/模式决策块370)、量化值和死区处理(通过量化器335)、参考顺序和处理(图像参考存储器365)、图像编码排序、帧/场图像级自适应决策、乃至去块参数(环路滤波器360)。类似地,对每个编码后的帧执行空间分析,这样可以类似地影响量化和死区处理(量化器335),拉格朗日参数及片类型决策(运动估计器/模式决策块370),帧间/帧内模式决策,帧/场图像级和宏块级自适应决策以及去块处理(环路滤波器360)。
现在转到图4,一般用附图标记400来表示用于对视频信号数据进行编码的示例过程。该过程能够通过在每次迭代中收集并更新所需统计特性,来多次分析或编码相同的位流。这些统计特性用于随后的每一遍编码中,以便在给定的视频特征或用户要求下、通过修改编码器参数来提高编码性能。具体而言,要利用大小为(N,M)的窗口、对k帧(即把未存储的图像排除在外)编码L遍(在此也称为“重复”和“迭代”),其中N是窗口内的总帧数,且M是相邻窗口之间的重叠帧数。用变量frm索引待编码的帧,而用变量w
index索引窗口内的当前位置。
该过程包括开始块405,它将控制传递给功能块410。功能块410将序列大小设为k,将重复次数设为L,将变量i设为0,并将控制传递给功能块415。功能块415将窗口大小设为N,将重叠大小设为M,将变量frm设为零(0),并将控制传递给功能块420。功能块420将变量w
index设为零(0),并将控制传递给功能块425。因而,应该理解,对于每一遍编码都对窗口参数进行初始化。这允许使用不同的窗口大小,乃至基于先前的分析步骤来修改它们(例如,如果检测到场景变化,则可以据此调节N和M,以便只包括完整的场景)。
功能块425通过考虑窗口内的所有N帧,对待处理的每个窗口执行时间分析,产生时间统计特性(tstat
i,frm...frm+N-1),并可选地利用当前统计特性、来修改或改进来自前面几遍编码或前面编码步骤的统计特性。然后,功能块425将控制传递给功能块430。功能块430对具有索引frm(当前窗口内的w
index)的帧执行空间分析,直到不再满足条件w
index<N-M为止,并将控制传递给功能块435。功能块435基于时间和空间分析结果来对这些帧进行编码,产生/收集在需要进行多遍编码时可使用的编码器统计特性,并将控制传递给功能块440。
功能块440递增变量frm和w
index的值,并将控制传递给决策块445。决策块445判定变量frm是否小于k。
如果变量frm小于k,则控制被传递给决策块450,决策块450判定w
index是否小于(N-M)。否则,如果变量frm不小于k,则控制被传递给决策块455,决策块455判定i是否小于L。
如果w
index小于(N,M),则控制被传递给功能块430。否则,如果w
index不小于(N-M),则控制被传回给功能块420。
如果i不小于L,则控制被传回给功能块415。否则,如果i小于L,则控制被传递给结束块460。
现在将描述按照本发明的各说明性实施例的本发明的许多相关优点/特征中的一些优点/特征。例如,一个优点/特征是,提供一种基于待编码内容的受约束但重叠的窗口来执行视频分析、且利用该信息来修改编码参数的编码设备和方法。另一个优点/特征是,在视频分析中使用空间-时间分析。又一个优点/特征是,对于视频分析考虑初遍编码。而且,另一个优点/特征是,在视频分析中联合考虑空间-时间分析和初遍编码。而且,另一个优点/特征是,利用图像编码类型、边缘、均值和方差信息的至少之一,来执行空间分析、拉格朗日参数修改、量化和死区处理。又一个优点/特征是,利用绝对差和方差来修改量化参数。另外,另一个优点/特征是,所执行的视频分析只考虑先前已编码的图像。此外,另一个优点/特征是,所执行的视频分析用于决定几种编码参数的至少之一,包括但不限于:片类型决策,GOP和图像编码结构及顺序,加权参数,量化值和死区处理,拉格朗日参数,参考数,参数顺序和处理,帧/场图像和宏块决策,去块参数,帧间块大小决策,帧内空间预测,以及直接模式。而且,另一个优点/特征是,可以通过考虑先前所产生的统计特性以修改编码参数或分析统计特性,利用多次迭代来执行视频分析。而且,另一个优点/特征是,基于先前所产生的分析统计特性来修改窗口大小和重叠窗口区。
相关领域的普通技术人员根据在此给出的教导可以容易地弄清本发明的这些及其它特征和优点。应该理解,可以用各种形式的硬件、软件、固件、专用处理器或它们的组合,来实施本发明的教导。
更为优选地,把本发明的教导实施为硬件和软件的组合。而且,优选地把软件实施为确实可在程序存储单元上具体实施的应用程序。该应用程序可以被上载到包括任何合适架构的机器上,并被该机器所执行。优选地,在具有硬件如一个或多个中央处理单元(CPU)、随机存取存储器(RAM)和输入/输出(I/O)接口的计算机平台上,实现该机器。该计算机平台也可包括操作系统和微指令码。在此描述的各种过程和功能可以是,可由CPU执行的微指令码一部分、或应用程序一部分、或它们的任何组合。另外,其它各种外围单元如附加数据存储单元和打印单元,可以连接到该计算机平台。
进一步应该理解,因为附图中所描述的一些组成系统部件和方法优选地是用软件来实现的,所以系统部件或过程功能块之间的实际连接可以随本发明的编程方式而有所不同。给定在此的教导,相关领域普通技术人员将能够预期本发明的这些及类似实施或配置。
虽然在此参考附图描述了说明性实施例,但是应该理解,本发明不限于这些具体实施例,并且相关领域普通技术人员可以在不脱离本发明的范围或精神的情况下进行各种变动和修改。所有这种变动和修改都包括在所附的权利要求所阐述的本发明的范围内。