用于帧率转换的低延迟节奏探测 【技术领域】
本发明涉及视频处理技术,更具体地说,涉及帧率转换技术。
背景技术
运动画面(moving picture)视频通常以预定帧率进行录制或编码。例如,影院电影通常以24帧/秒(fps)的固定帧率进行录制。而另一方面,基于NTSC标准的电视广播类视频则以30fps进行编码。基于欧洲PAL标准或SECAM标准的广播视频则以25fps进行编码。
帧率转换带来了挑战。用于进行帧率转换的一种常见技术包括在帧序列中丢弃或重播帧。例如,电视电影转换(通常称为3:2下拉(pull down))用于将24fps的运动画面视频转换为60场/秒(30fps)。每秒帧扩展3个视频场,而每另一秒帧扩展2个视频场。电视电影转换在例如Charles Poynton撰写的“Digital Video and HDTV Algorithms and Interface(数字视频和HDTV算法和接口)”(San Francisco:Morgan Kaufmann出版社,2003)中进行了详细的描述,本发明参考了其中的全部内容。
在John Watkinson撰写的“The Engineer’s Guide to Standards Conversion(转换标准工程师导读)”(Snell和Wilcox手册系列)和“The Engieer’s Guide toMotion Compensation”(运动补偿工程师导读)中还描述了用于进行帧率转换的多种其它技术。
最近,帧率转换不仅用来在标准之间进行转换,也用来增强整体视频质量。例如,为了降低传统PAL电视的可感觉得到的闪烁,已经研制出高帧率100场/秒(50fps)的电视。
将来,更高的帧率将成为用来提供更高质量家庭视频的重要组成。然而,现有的视频还不能在更高的帧率下使用。因此,帧率转换变得非常必要。在实时状态下,这种转换会带来很多挑战。
例如,如果帧率转换引入内容(material)延迟,相关的音频将无法再与视频同步。类似的,这种转换也有可能被应用在已经进行过电影电视或其他帧率转换的视频源上。
因此,需要一种改进的帧率转换技术。
【发明内容】
在本发明的示范性实施例中,帧率转换后的视频是这样提供的,将视频帧序列中的视频帧连续地缓冲存储在缓冲器中,并且基于至少一个插值参数在多个视频帧中的至少两个中进行插值,以此来构建输出帧。为便于实现,插值参数依据每个新近缓冲的帧进行调整,这取决于帧序列节奏的当前值。通过这种方式,与节奏探测相关的延迟将得以降低。
依据本发明的另一方面,提供了一种视频设备,包括用于缓冲视频帧序列的缓冲器;节奏探测器,其与缓冲器通信,以分析每个新近缓存到缓冲器中的缓冲帧,以此来确定视频帧序列的节奏,并用于构建节奏指示符以反映这种节奏;帧率转换器,用于依据取决于节奏指示符当前值的插值参数通过缓冲器中存储的多个视频帧中的至少两个构建插值后的视频帧。
在阅读完下列本发明具体实施例的详细描述并参考相关附图之后,本发明的其它方面和特征对于本领域的技术人员来说将变得更加清晰。
【附图说明】
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是依据本发明一较佳实施例的包含帧率转换器的视频设备的简化结构示意图;
图2是构成图1中设备一部分的帧率转换器的简化结构示意图;
图3是帧率转换后的输出帧、解码后的输出帧和原始视频源的帧的对比示意图;
图4是用来展示3:2下拉方式的视频帧序列中的运动的运动图;
图5是用来展示3:2下拉方式的来自于解码后的帧序列的帧率转换后的视频输出的运动图;
图6是用来展示图5中帧率转换后的视频输出中的运动的运动图,以展示解码延迟;
图7是用来描述在生成图5和图6中展示的视频输出的过程中缓冲器中内容的示意图;
图8是描述图1中设备所执行的步骤的流程图;
图9是用来展示从3:2下拉方式进行变化的来自于解码后的帧序列地帧率转换后的视频输出的运动图;
图10是用来描述在生成图9中展示的视频输出的过程中缓冲器中内容的示意图。
【具体实施方式】
图1展示了依据本发明一较佳实施例的包括帧率转换器16的视频设备10。如图所示,设备10包括视频解码器12,其接收视频信号,该视频信号采用数字视频流的形式,例如MPEG2、MPEG4、H264或者其他数字流,模拟视频解码器、视频接口(例如DVI、HDMI、VGA或者类似的)。视频解码器12还可包括解交错器,用于从收到的场中生成帧。视频解码器12依次解码视频流,并将用来构建解码视频帧的解码像素流发往缓冲器14。类似地,视频解码器12输出解码后的/解复用后的音频流,用于进行进一步的处理。音频流通常与输出视频帧同步。此处未详细描述对解码后的/解复用后的音频流的进一步处理。
视频设备10可采用机顶盒、卫星接收器、地面广播接收器、媒体播放器(例如DVD播放器)、媒体接收器的形式或者类似的形式。设备10可选择性地集成在显示设备中,例如平板电视机、计算机显示器、便携式电视机或者类似的设备。
设备10可采用定制硬件的方式实现,或者采用由软件控制的定制硬件和通用计算机硬件的组合的方式实现。
缓冲器14为先进先出(FIFO)缓冲器,其中存储有几个视频帧。在描述的实施例中,缓冲器14存储有至少4个连续的视频帧-Fi,Fi+1,Fi+2和Fi+3。帧率转换器16与缓冲器14通信,并从中提取帧以便生成最终展示在互联的显示器22上的帧fj。在描述的实施例中,帧率转换器16将用于在显示器22上展示的帧存储在帧缓冲器20中。显示器接口(未示出)对帧缓冲器20进行采样,以便将帧展示在显示器上。显示器接口可采用传统的随机访问存储器数模转换器(RAMDAC)的形式、遵循HDMI或DVI标准的单端或差分发射器的形式,或者为其他合适的接口,用于对帧缓冲器20中的数据进行转换,以便以模拟或数字的形式显示在显示器22上。应明白,帧缓冲器20是可选的,视频可由帧率转换器16直接输出。
节奏探测器18分析缓冲器14中相邻的帧,以确定解码的视频中是否包含以已知方式重复出现的帧。例如节奏探测器30确定生成的视频帧是否是从3:2/2:2或者类似的下拉方式的源中生成的。节奏指示符将提供给帧率转换器16。
设备10中的功能模块(包括视频解码器12、节奏探测器18、帧率转换器16)可使用本领域技术人员熟知的传统的VLSI设计技术和工具来构建。
更为详细的帧率转换器16结构在图2中做了描述。帧率转换器16包括插值器30,其在缓冲器14中插帧,以进行帧率转换。可选的内部缓冲器32和34可对帧进行存储,这些帧将由插值器30合并。插值器30还将收到节奏信息,该信息与当前解码的帧序列中的帧有关。此外,用于生成最终帧率的频率缩放因子SCALE_FREQU和时钟信号(CLK)也将提供给插值器30。
为便于表述,本文将缓冲帧(例如视频解码器12输出的解码帧)表示为帧F0、F1、F2、......Fn,而视频源中的彼此不同的帧表示为帧S0、S1、S2、......。因此,例如,24fps源将具有源帧S0、S1、S2、S3、......,并转换为电视电影格式,其将由视频解码器12解码和/或重建为对应于源帧{S0、S0、S0、S1、S1、S2、S2、S2、S3、S3、......}的帧{F0、F1、F2、F3、F4、F5、F6、F7、F8、F9、......}(60fps)。电视电影转换帧F0、F1、......将存储在存储介质上,例如DVD或者类似的介质,或者使用地面、卫星或CATV广播技术以模拟(例如NTSC)格式或数字格式(MPEG流或类似的格式)进行广播,或者以其它方式进行提供。具有转换后的帧率的输出帧可表示为帧f0、f1、f2、......fn,如本文所述,其可从帧F0、F1、......中构建。这在图3中进行了描述。
在本文中,也可将插值帧表示为I{Sj、Sj+1、I/m}。这种表示形式表示最终的运动插值帧,该帧表示原始帧Sj、Sj+1之间的中间帧,插入该帧以表示从Sj到Sj+1的部分I/M运动。例如插入的帧I{Sj、Sj+1、1/2}用来表示Sj和Sj+1之间的运动中途的运动效果。这种运动插值由帧率转换器16使用从缓冲器32和34中读取的两个输入帧来进行。可由插值器30执行的运动补偿/插值技术在2005年出版的由Keith Jack撰写的第4期视频(数字工程师手册)中和JohnWatkinson撰写的“运动补偿工程师导读”(Snell和Wilcox手册系列,http://www.snellwilcox.com/community/knowledge center/engineering guides/emotion.pdf)以及JohnWatkinson撰写的“转换标准工程师导读”(Snell和Wilcox手册系列,http://www.snellwilcox.com/community/knowledge center/engineering/estandard.pdf)中做了描述,本文引用了其中的全部内容。
图4描述了由视频解码器12解码的示范性帧序列中的运动。具体来说,图4描述了视频解码器12所解码的示范性帧序列F0、F1、F2、F3......的运动。所描述的帧序列源自3:2下拉源,通常是24帧/秒(表示为源帧S0、S1、S2、S3......)到60交错场/秒转换产生的结果,转换为60fps的帧。如此一来,初始源(影院)中的每一秒帧被采样两次,而初始源中每另一秒帧被采样三次。最终的帧F0、F1、F2、F3显示出3:2下拉效果,因为他们是通过对交错场进行解交错来生成的。
最终的帧序列将显示出急动运动(通常称为颤动),只在第3、第5、第8、第10等解码帧之后才会出现运动。这种颤动在帧率转换后仍然存在,其无法解决视频源的节奏问题。
为了消除或降低可以感觉到的颤动,设备10的帧率转换器16插入相邻的源帧,以构建帧率转换后的帧序列。为实现此目的,节奏探测器18首先探测是否存在下拉方式。具体来说,节奏探测器18可通过比较缓冲器14中两相邻帧的内容来为视频解码器12所解码的帧序列确定是否存在下拉方式。例如,在多个解码帧中将缓冲器14中最新缓冲的帧(也就是Fi+3)与其最直接相邻的帧(也就是Fi+2)进行比较,以揭示相邻帧之间的相似性/差异性。例如,将帧差异性标记为H,相似性标记为L,节奏探测器18可通过识别相邻帧中的HLHLLHLHLLHLH..差异图样来确定3:2下拉方式。用于存储多个解码后的帧F0......F11的缓冲器14中的内容在图7中做了描述。
节奏探测器18向帧率转换器16提供下拉方式标识符以执行插值,从而从原始源帧中产生运动补偿的插入的帧。为了实现精确的插值,可使用节奏指示符来在源中插入不同的帧(相对于重复的帧),并调整插值参数(例如所需的从插入帧到插入帧的部分运动)。
图5和图6描述了帧率转换器16从解码帧序列F0、F1、F2......输出的所需的输出帧序列f0、f1、f2、f3......。在图5中,运动表示为帧数的一个函数。相同的运动在图6描述为时间的函数,其中包含了缓冲进站视频导致的延迟,以及决定哪些帧应进行合并而引入的延迟。在描述的例子中,帧率转换器16将帧率(也就是SCALE_FREQU=2)加倍。随着帧率转换器16输出比视频解码器12原始生成的帧更多的帧,帧率转换器16中的插值器30(图2)使用传统运动补偿技术来生成帧以便以更高的速率显示。在描述的实施例中,每个插入的帧fj或者与视频解码器12输出的帧Fi相同,或者由解码帧序列(例如Si、Si+1)中两个相邻的源帧构成。当然,也可使用两个以上的相邻源帧来生成插入帧。
在描述的例子中,执行运动补偿来生成相对平滑的运动,以及降低颤动。在描述的实施例中,运动是线性插值的,帧f0、f1、f2、f3等中每个帧之间的运动是相同的。由于连续的源帧S并不是在相等的时间间隔内解码的,在这些帧由视频解码器12进行解码的同时,任意线性插入的序列f0、f1、f2、f3......通常将不包括对应于源中帧S0、S1......的帧。
应注意,f0=F1,而f1、f2、f3和f4是对F0(或者等效的帧F1或F2)和F3(也就是源帧S0或S1)进行插值而生成的。每个插入的帧f1、f2、f3和f4提高(advance)从F0到F3(也就是从原始源的帧S0到帧S1)的运动。输出帧f5是原始源帧S1(也就是帧F3/F4)。类似的,输出帧f6和f7是从解码帧F3/F4和F5(对应于源帧S1和S2)中生成的。
在采用3:2下拉方式时,帧率转换器16依赖于缓冲的帧,这些帧之间间隔多达两个帧(也就是F0和F3;F3和F5),帧率转换器16将在处理至少这些帧时引入处理延迟。因此,f1不会在F3解码完成之前生成。类似的,f6不会在F5解码完成之前生成,f11不会在F8解码完成之前生成。这一点可在图6中反映出来,图6按照时间顺序描述了源帧f和最终的帧F,其中计入了由源帧无法立即可用而导致的延迟。通过对比可以发现,图5按照帧顺序描述了源帧f和最终的帧F,其中忽略了源帧f到达时引入的延迟(也就是假设在构建输出帧F之前,所有源帧都是可用的)。
现在,在使用3:2下拉方式且频率扩展因子为2时,在理想情况下,将为每5(3+2)个缓冲帧生成10个输出帧。这一点在图5和图6中也可以很清楚的看到。最终的帧f1、f2、f3、f4、f5......f10对应于S0,I{S0、S1、1/5},I{S0、S1、2/5},I{S0、S1、3/5}、I{S0、S1、4/5}、S1,I{S1、S2、1/5},I{S1、S2、2/5},I{S1、S2、3/5},I{S1、S2、4/5},S2。
通过对比,2:2下拉源的最终的帧图样f1、f2、f3......f10将对应于帧S0,I{S0、S1、1/4},I{S0、S1、1/2},I{S0、S1、3/4}、S1、I{S1、S2、1/4}、I{S1、S2、1/2}、I{S1、S2、3/4}、S2、I{S2、S3、1/4}、I{S2、S3、1/2}......也就是说,为每个缓冲帧生成4个输出帧。
类似的,没有使用下拉方式的最终帧图样(也就是从隔行视频中生成的)将对应于帧S0,I{S0、S1、1/2},S1,I{S1、S2、1/2},S2,I{S2、S3、1/2}......为每个缓冲帧生成2个输出帧。
当然,取决于解码帧F的节奏,源帧在缓冲器14中的位置会发生变化。为显示这种情况,用来构建图5和图6中的输出帧的缓冲器14中的源帧在图7中特别做了标记。
由上文可知,应当明白,为了能够平滑的插帧,下列应当是可用的:
1、源图片帧(源中的至少两个相邻帧);
2、所需输出帧和源帧之间(例如两个源帧之间的位置)的关系。
该信息可以从例如在插值后的帧序列中从帧到帧进行的所需的运动(也就是运动的倾斜程度/图5中描述的帧图样)的量来生成;解码帧序列(也就是F0,F1,......);缓冲器14的结构;解码序列的节奏。
帧F将不断写入到缓冲器14中。每个帧所需的时间可能会发生变化,这取决帧源。其可能例如花费原始帧率的整个周期来缓冲帧F。只有在整个帧出现时才分析帧的节奏。这意味着新的插值参数只有在帧的末端接收完成之后的一些处理时间之后才是可用的,因此只适用于下一个帧。在另一方面,插值操作不需要整个帧都进行了缓冲。具体来说,当新的缓冲帧的第一部分已经缓冲存储到缓冲器14之中时,插值操作就可以开始。
插值操作自身会引入一些处理延迟。从帧开始直到插值开始时的一些小的延迟,并且处理过程自身的延迟也可出于本文所述的目的而忽略不计,但事实上该处理过程将花费两个帧之间时间的1/3或者更多的时间,这取决于具体的实现方法。尽管如此,就算处理延迟可以忽略不计,新的节奏信息也只能对下一帧才可用,这是因为缓冲新收到的帧会存在实际的延迟。
现在,为了确切的检测m:n下拉方式,下拉方式可在m+n+1解码帧后得以确切地检测。然而,这需要一些延迟,并可能需要缓冲m+n+1个帧。然而,生成任何当前帧fi只需要fi前后的两个源帧。
如图5和图6所示,在3:2下拉且频率缩放因子为2时,帧率转换过程只需要引入大概1.5个缓冲帧的延迟。在本发明的一个示范性实施例中,也可无需分析m+n+1个解码帧,取而代之的是,缓冲足够多的帧,以此来生成当前输出帧,并且为此后插入帧,节奏探测器18将每个新收到的帧与至少一个此前缓冲的帧进行比较,以确定是否存在期望的下拉方式。
对于2:2下拉方式,帧率转换可在只引入1个缓冲帧延迟的情况下实现;对于未使用下拉方式的情况,只需引入0.5个缓冲帧的延迟。当然,随着缩放频率增加,引入的延迟也随之增加。
具体来说,视频设备10为缓冲器14中每一个新的缓冲存储的视频帧执行的步骤在图8中做了描述。如图所示,在收到新的帧之后,在步骤S802将该帧缓冲存储。先入先出的缓冲器14可以采用传统缓冲器。缓冲新的帧意味着需要构建新的输出帧,以及确定/确认帧序列的节奏。作为选择,也可在新帧到达缓冲器14后产生一个信号,例如由时序生成器(未示出)产生一个信号来作为提示。
具体地,在步骤S804,节奏探测器18分析新收到的缓冲帧,以评估视频帧序列的节奏。特别地,节奏探测器18通过将新近缓冲的帧与一个或多个先前缓冲的帧进行比较,和/或已经在收到的帧中探测到节奏,来确定新近缓冲的帧是否具有已知的节奏(例如3:2下拉;2:2下拉等等)。例如,如图7所示,可通过将新近缓冲的帧与缓冲器14中前一缓冲的帧进行比较,来确定二者的相似性或者差异性(例如绝对差值),相关的技术在美国专利申请No.10/837835或者美国专利申请No.11/381234中做了详细的描述,本发明参考并引用其全部内容。在步骤S806,将生成一节奏指示符,其将从节奏探测器18发送给帧率转换器16。节奏指示符可以是任意的数值。例如,节奏指示符可指示3:2下拉;2:2下拉或者未知的节奏。
帧率转换器16基于步骤S808中提供的视频帧序列的节奏来构建一个或多个参数。该参数可以例如指出缓冲器14中的哪些缓冲帧需要进行合并,并指出插值参数(例如%MOTION),以指示输出帧相对于缓冲帧的位置(例如扩展的缓冲帧应当插入到哪里以构建输出帧(也就是构建I{Sa,Sb,%MOTION}))。例如,在使用3:2下拉方式的情况下,插值参数将控制在五分之一帧的倍数之前出现运动;在采用2:2下拉方式的情况下,在四分之一帧的倍数之前出现运动;在不使用下拉的情况下,在半个帧的倍数之前出现运动。插值参数可应用到帧率转换器16输出的下一帧中。
同时,通过分析新到达的帧,帧率转换器16可使用缓冲器14中的至少两个视频帧来插入输出帧,这两个帧的选择过程是基于步骤S810中节奏探测器18提供的节奏指示符中的当前参数值来进行的。
帧率转换器16将缓冲帧进行合并,以便构建输出帧。通常,由于插值参数仅在新的缓冲帧完全缓冲存储之后才进行更新,因此将在前面的缓冲帧中插入插值参数,这些插值参数是使用前面收到的帧来确定的(如上文描述的实施例所述)。可选的,新的缓冲帧可在其完全缓冲存储之后用于插值。
例如,若新的缓冲帧无法确认存在此前假设的下拉方式(例如3:2下拉等),则不存在下拉方式的情况将通知帧率转换器16,并且将帧F视为不存在下拉方式,而后的帧将进行插值。
在步骤S812中,插值后的输出帧将输出给例如帧缓冲器20。
通过这种方法,帧率转换器16进行的插值操作可依据探测到的节奏为每一新帧进行调整。帧率转换器16构建的下一输出帧将基于节奏的变化来构建。
当节奏发生变化时,解码器10的操作参考图9和图10做了最佳的描述。具体地,在探测到3:2下拉方式之后,三个解码帧Fj,Fj+1和Fj+2将缓冲存储到缓冲器14中,以便构建当前插入帧。如图9所示,对于3:2下拉方式,零帧f0可使用帧F1来构建,帧f1,f2,f3和f4可使用帧F1和F3等来构建,这与图5中描述的构建输出帧的方法类似。很明显,任意输出帧都可使用当前帧Fj,或当前帧Fj和Fj+2来构建。如此一来,在3:2下拉方式下构建插入帧将引入至少1.5个解码帧的延迟(也就是1.5帧加上处理延迟等)。
缓冲器14(图1)相应的存储4个帧,包括代表原始源中至少两个连续帧Sk,Sk+1的帧Fj,Fj+1,Fj+2和Fj+3,如图10所示。节奏探测器18将监视当前到达帧和前一帧之间的差异,如上文结合图5和图6所述。探测到的节奏可用来为后续插入的输出帧fi调整插值参数。
在操作过程中,在探测到3:2下拉方式后,帧率转换器16的插值器30开始插入相邻的帧以构建I{S0、S1、1/5},I{S0、S1、2/5}、I{S0、S1、3/5}、I{S0、S1、4/5}、S1。一旦插值器30输出f5,缓冲器14中将包含S1和S2。如此一来,f6,f7,f8和f9可很容易的从帧S1和S2中生成,如I{S1、S2、1/5},I{S1、S2、2/5},I{S1、S2、3/5},I{S1、S2、4/5}。
现在,如果下拉方式突然发生变化(例如帧F8到达缓冲器14),基于3:2下拉方式的插值操作将无法产生合适的结果。应注意,节奏上的变化只能在收到帧F9之后探测到。如此一来,节奏探测器18将在收到帧F9之后提供一个节奏变化指示符,该指示符将用在f12之后。
为了准确探测到3:2下拉方式,至少需要比较5个帧以探测HLLHLHLL方式,如上文所述。一旦未探测到期望的LL或HL图样时,节奏探测器立即在两个帧中通知不存在3:2下拉方式。因此,插值器30使用的插值参数可进行调整,以便后续的帧将进行插值,尽管他们是从隔行场中生成的。也就是说,下一帧f13(在图9中标记为f13b)将生成为I{S2,S3,1/2},而不是I{S2,S3,3/5}。类似的,f14将生成为S3,f15将生成为I{S3,S4,1/2}。如图10所示,将依此确定应选择缓冲器14中的哪个帧。
此外,帧f13将生成为I{S2,S3,3/4},在图9中标记为f13a。
再一次的,依赖于视频帧F的序列的节奏,源帧S在缓冲器14中的位置将可能会变化。为说明这一点,用来构建图9中的输出帧的源帧在图10中做了突出显示。
在另一实施例中,节奏信息可从上行视频处理器件传送到帧率转换器,例如,有关的具体技术在标题为“用于进行帧率转换的视频处理器结构和方法(Video Processor Architecture and Method for Frame Rate Conversion)”的美国专利申请no.xx/xxx,xxx中做了描述,该申请的发明人与本申请相同,且该申请与本申请同时提交,本申请引用了其中的全部内容。通过这种方式,可在整个帧都缓冲存储到缓冲器18中之前,为每个帧提供节奏信息。通过提供节奏信息,可更快地指示插值参数。
应明白,从2:2下拉方式或者其他下拉方式进行切换可采用下列方法进行处理:在探测到下拉方式时,可基于该下拉方式将插值参数调整为线性插值;一旦探测到节奏发生变化,将视为没有采用下拉方式进来处理帧。
类似的,在下拉方式未知的情况下,在对多个帧进行分析之后,将检测到3:2,2:2或者类似的已知下拉方式,插值参数也将进行相应的修改。
当然,上文所述的例子是以3:2和2:2下拉方式为例进行描述的,并且缩放频率SCALE_FREQU=2。但是,其他的下拉方式和缩放频率也可采用类似方式使用。
当然,上述实施例仅仅用于描述,并非用于限定本发明的范围。上文所述的实施本发明的实施例可以进行许多修改,包括构成、各部分的排列、操作的细节和顺序等。如本发明权利要求所述,所有上述修改都应划归到本发明的范围之内。