大多数普通视频信号在利用视频压缩编解码器进行编码之前都必须进行预处理,这要求数据采用420平面格式(planarformat)以获得更高的处理性能。例如,NTSC和PAL等广播标准可能需要将隔行扫描(interlaced)格式转换为逐行扫描(progressive),此外还常常需要对色度和亮度信息进行格式重定。 特别的是,CCD相机的视频是以4:2:2交错式隔行扫描格式被捕获的。但视频压缩标准的特定规格只接受逐行扫描4:2:0格式的输入。在这种情况下,必须去掉隔行扫描伪信号,因为对逐行扫描编码器而言,处理隔行扫描视频内容可能相当困难。 有大量复杂的去隔行(de-interlacing)算法可供工程师选择,但并非所有应用都需要最高级别的视频质量。此外,复杂的算法往往需要大量的计算,而开发人员总是受到数字信号处理器(DSP)的MIPS预算限制。 当应用不需要最高级别的视频质量时,可在硬件中采用缩放算法来实现去隔行。这种技术可以将4:2:2到4:2:0格式的转换工作和去隔行操作卸载给其它硬件,这对于节省珍贵的DSPMIPS资源特别有帮助。令人惊讶的是,当把视频压缩处理考虑进来之后,缩放硬件有时能获得可与高复杂度去隔行算法相媲美的去隔行质量。 本文描述的简单方法可用于视频应用的去隔行处理。当视频数据帧中存在大量动作时,这种技术最为有效,因为静态图像往往会更加突出缺陷。 亮度和色度编码 NTSC将标准清晰度(NTSC SD)的分辨率定义为每行720像素,每列480像素,每秒30帧。每个像素的信息包含三个分量:Y是亮度(luma)信息,Cb(U)是蓝色信息,Cr(V)是红色信息。 过去采用NTSC标准时,工程师在视频流编码方面受到传输带宽和计算能力的限制。由于人眼对于亮度信息更为敏感,而NTSC标准只要求色度信息进行2:1的水平下采样,从而减轻了这一负担。 CCD相机捕获到的每一帧都具有720×480的Y值、360×480的U值和360×480的V值。其中每一个值都是8位(1个字节),范围在[0,255],这样,每一个NTSC SD帧就是(720+360+360)×480=691,200字节。 被捕获帧的Y/U/V分量一般进行隔行扫描,通常采用YUV 4:2:2的格式。有两种方法构成这些数据,但为了简单起见,假设数据是以UYVY 4:2:2隔行扫描格式构成的(图1)。 如前所述,大多数编码器都要求输入视频采用YUV 4:2:0格式。在4:2:2隔行扫描数据和4:2:0平面数据之间存在着两大差异。 在4:2:0格式中,色度信息还需进一步进行2:1的垂直下采样。也就是说,对每一个NTSCSD帧,每个U或V分量都包含360×240字节而不是360×480字节。这样,每个4:2:0格式的NTSCSD帧为518,400字节[(720×480)+(360×240×2)]。为平衡实时性能和合格的图像质量,需要额外的色度下采样。 视频压缩标准的有效实现还常常需要将亮度和色度分量分别存储,因为编码算法可能采用不同的方法来处理它们。图2所示为4:2:0平面格式的NTSC SD视频帧。 隔行扫描伪像 隔行扫描包含对图像的两次扫描,一次扫描捕获偶数行,另一次扫描捕获奇数行。两次捕获以很小时差分隔开,然后再合在一起形成一个完整的帧。 在合并这两部分时,可能会形成隔行扫描伪信号。例如,矩形框的垂直边缘将导致锯齿效应(见图3的最后一帧)。在不同时间捕获一个运动视频目标而产生的这种伪信号被称为隔行伪像。 对于NTSC标准,若以30帧/秒的速度捕获视频帧,两个连续镜头(即顶场及其互补的底场)之间的启动时间是16.67ms。如果在这类帧中捕获视频场景中的快速运动行为,将会产生隔行扫描伪像。 由于这些伪信号被表示为高频噪声,它们有可能会导致逐行视频编码器出现严重问题,其主要原因在于人眼的敏感度以及压缩标准的工作方式。实际上所有的视频压缩标准都是基于两个非常重要的假设:1.人眼对低频信息更为敏感,这意味着即使去掉原始帧中的部分高频信息,仍然可以保持可接受的视觉质量。2.编码过程基于像素块进行,这意味着对于视频帧中的每个16×16或8×8的像素块,在相邻帧中都可能存在非常相似的模块。因此,编码的实现通常是在前面的编码帧中寻找一个相似的像素块,并仅对它们之间的delta进行编码。这样可以获得很高的压缩比,而在大多数压缩标准中,运动评估(ME)模块就是专为该目的而定义的。 遗憾的是,几乎所有像素块中都可能出现隔行扫描伪像,这使得ME模块很难在前面的编码帧中找到相似的像素块。结果使得delta更大,并且ME需使用更多的比特来对其进行编码。因此,最好的方法是在将被捕获的帧馈入到逐行视频编码器之前,减少或去除其中的隔行扫描伪信号。 去隔行视频处理 如前所述,可以通过采用大量计算的复杂算法来实现高质量的去隔行处理。此外,还有一种更直接简单的方法,即采用缩放硬件,例如德州仪器的TMS320DM6446数字媒体处理器。采用缩放硬件可完全去除全部场力线,它利用剩余场的信息来产生丢失数据。 去除480i60(480像素、隔行扫描、60帧/秒)视频的所有底场数据,将产生一个240p30(240像素、逐行扫描、30帧/秒)的视频。该数据被垂直缩放,以产生一个480p30的去隔行结果。这种方法的优点是可以100%地消除所有隔行扫描伪信号,但垂直保真度会有明显损失。 当用作逐行压缩之前的预处理步骤时,这种方案能够产生非常棒的效果。这是因为有损视频压缩算法通常都去掉了高频信号(尤其是在低比特率下)。 因此,根据数据源内容的不同,在把压缩处理考虑进来之后,该方案可以达到和复杂算法一样的效果。例如,可以利用复杂度较低的去隔行器来把隔行扫描广播数据转换成低比特率数据以供逐行扫描手机屏显示。 设计实现 TMS320DM6446处理器中的缩放器(resizer)执行和所有缩放器相同的常用功能,但有少许差别。需注意的两个主要特性是,缩放器模块在水平和垂直方向上都能支持1/4x到4x的缩放,且缩放因子与方向无关。 此外,所有滤波器系数都是可编程的。例如,如果使用4:2:2隔行扫描格式(由UYVY格式构成)的输入帧(图1),分辨率为每帧720×480像素(NTSC SD)。 在去隔行处理中,缩放器首先被告知输入帧的宽度为724像素,而非实际的720像素。这是由于为准确实现1:1的缩放,DM6446处理器的水平输入大小必须被调节为720+delta,delta由缩放器中的公式计算求得。 接着,缩放器获知间距是实际间距的两倍宽,这样它就可以把第一组两个水平扫描行当作一个来接收。这使得缩放器可以在偶数行上实现1:1的水平缩放(见图4中的左上角),并将奇数行丢弃(右上角)。输入和输出在垂直方向上尺寸分别被设定为244和480,因此缩放器执行1:2的垂直放大以插入被丢弃的奇数行。 然后缩放器被告知输出帧的宽度是720像素,输出间距是1440[720+(360×2)]字节,从而形成一个输出帧(图4)。 为实现从4:2:2到4:2:0的转换,以便逐行编码器能够利用这些数据,对于每个4:2:2隔行扫描格式的输入帧,缩放器都被调用三次以生成去隔行的4:2:0帧。必须保持三组配置参数分别作为U、Y和V值。因此,需调用缩放器三次。 起始点是采用UYVY 4:2:2格式的输入帧(NTSC SD分辨率)。输出帧被定义用4CIF分辨率(704×480)代替NTSCSD分辨率(720×480)。由于缩放器的32字节输出对齐限制,输入帧的右边16列必须被丢弃。一种替代方法可能是将右边8列和左边8列删减掉。 首次调用是提取输入帧中的Y分量,然后对其进行去隔行处理。通过指示缩放器将输入帧当作一个4:2:0平面格式的图像(图5),去隔行操作应该仅应用于Y分量上。此外,缩放器还被指示执行2:1的水平缩放,间隔提取输入帧中的Y分量,并执行1:2的垂直缩放以在奇数行中插入被丢弃的Y分量。 对缩放器的第二次调用是修改U分量,这需要以2:1的比例进一步垂直下采样。由于下采样需丢弃所有的奇数行,这会自动生成逐行U缓冲器,因此不再需要进行去隔行操作。为实现垂直下调节(downscaling),垂直输入大小被设为484,输出大小被设为240。对V分量的操作类似于U分量。 对于在利用视频压缩编解码器进行编码之前需要去隔行和YUV格式转换的视频,可通过一个缩放引擎来对其进行预处理。由于某些因素(例如视频编解码器往往去除了高频分量)的影响,需对压缩后的视频质量进行考虑。不过,这项技术并不适合于所有应用,而且必须小心确保输出质量是应用可以接受的。 作者:Zhengting He、Snethil Natarajan 软件应用工程师 德州仪器公司 track:http://cn.fpdisplay.com/technology/Tech_Shtml/2_2007124102915701.shtml |