去隔行与去交错
什么是场?
在介绍Deinterlacer去隔行方法之前,有必要介绍一下关于交错场和去隔行处理的基本知识。
什么是场呢?场存在于隔行扫描记录的视频中,隔行扫描视频的每帧画面均包含两个场,每一个场又分别含有该帧画面的奇数行扫描线或偶数行扫描线信息,故分别叫奇数场或偶数场,也称上场或下场。
实际拍摄时,若使用隔行扫描的格式作记录的话,比如标清中的PAL制,NTSC制,高清中50i、60i等,它们在记录信号时,总是会先扫描记录下场(偶数场)信号,再扫描记录上场(奇数场)信号;或者相反。如果先记录下场的,就说是下场优先(偶数场优先),反之叫上场优先(奇数场优先)。这样就导致了上场与下场的图像实际上是有一定时间位移之差的,所以这两场的图像在空间上是不能完全重合的,尤其在拍摄活动画面时,活动主体的位置往往会形成梳状条纹,如图所示。
隔行扫描视频的1帧画面由不同时刻取样的上场和下场画面组成
隔行扫描视频在画面中运动的部分出现梳状交错现象(放大示意图)
为什么要去隔行处理?
在对影像做后期处理时,比如抠像等,若直接处理隔行扫描素材会产生边缘锯齿现象,导致画质下降。还有在隔行扫描数字格式转胶片和构建相对完美的逐行扫描视频时,每一格(帧)都需要无交错的高质量的画面,所以也需要对隔行片源视频进行去隔行处理。
隔行扫描图像的奇偶场合并产生梳状条纹示意图
常见的去隔行处理方法和原理
去隔行处理就是通过一定手段,让原本因隔行扫描形成的交错帧显得不再交错,注意是“显得不再交错”而不是“还原”,因为理论上讲是无法复原为100%完整画面的,如此一来,去隔行的目的就是最大限度地去交错,所以两个概念也往往混称。
一般情况下,常见的去隔行处理方法有以下几种:
奇偶场直接合并
当画面中没有运动的时候,奇数场和偶数场的采样信息依然能直接合并为完整的一帧画面,如图所示。
当然,这种情况少之又少,绝大多数情况下,画面中总是会有运动(否则就是照片了),所以这种模式几乎不会采用,不过它给我们提供了某种启示,在随后的运动遮罩合并模式中得到体现。
场复制合并
最简单的一种解决方法就是仅保留单场,抛弃另一场,然后把该单场中的行进行复制组合为新的另一场,最后再合并为一帧。
这样方法虽然大大减少梳状条纹的程度,但同时也会带来明显的锯齿现象,且画面的有效清晰度大大下降,因仅用了一半行数的画面信息。
内插补点(大多数情况适用)
为了改善场复制模式带来的锯齿程度,同时得到相对快捷的处理速度,许多应用软件都使用内插补点的方法作为标准的去交错模式。
这种方法首先依然保留单场信息,然后丢弃另一场,接着通过内插补点的方法创建新的扫描线。与场复制不同的时,它更加智能,会经过计算保留场相邻的行间的信息来创建另一场。
如此处理,大大减少了场复制模式带来的锯齿现象,图像质量大幅提升。不过画面的有效信息依然被抽去了一半。
场融合
为了增加画面的有效信息,可以把内插补点的方法加以延伸,就是分别把原画面的奇数场使用内插补点得到新画面,再把原偶数场使用内场补点得到另一个新画面,然后再把两个新得到画面各取一半合并起来,就便是所谓的场融合方法,也叫奇偶平均合并方法。
这种混合奇偶两个图场的方法,可以大大降低突兀的锯齿现象,是去交错的有效方法之一,而且画面的有效信息扩大为全帧画面信息。不过副作用是画面会因为两中间帧混合导致画面模糊,运动剧烈的画面还会有重影现象。
隔行模拟摄像头缺点
模拟摄像头输出为CVBS信号,通过video AD转换芯片转换为BT656信号,输出的BT656信号再接到MX51 CSI接口。MX51通过对top bottom两场交错生成一帧图像,对于静态图像,效果还可以,但是对于运动图像则会出现锯齿,尤其按一定比例缩放时,运动部分还可能会出现很粗的线条。
出现锯齿的原因:由于上下两场拍摄的时间点是不同的,导致合并后运动部分无法重合到一起
而出现很粗的线条:原因不清楚,可能和mx51 IPU的缩放算法也有关系。
改成用一场代替一帧图像后,效果很不错。
如果是preview模式,interlaced输入带来了很多麻烦。当然如果想获得比较好的静态拍摄,interlaced还是可以接受的。
去隔行不等于去交错
文件有自己的结构规范,视频文件中的“帧”是个重要概念。这个概念在电影胶片中非常重要,在模拟视频中概念相对弱化,而在数字视频中又强起来了。
隔行扫描视频文件中的帧就是一张照片。如果转换视频时想提高帧率,就需要加插几张相同的图片。但是这种方法在帧率低的时候有问题,易造成视频不流畅。实际生活中并没有真正超过30fps的视频,而平板电视在低刷新率下也不会像CRT那出现亮度衰减现象,为什么还需要50p跟60p的规格呢,25p和30p不就行了吗?不行。事实上这么做就是为了解决插帧后流畅度下降的问题。电视机并不能以任意刷新率工作,但视频文件的帧率有太多可能,为了保证流畅度,使用高的刷新率就很有用。比如,如果一个24fps视频想要转换成30fps,每4帧必须要加插一个重复帧。假设原视频为:
A B C D E F G H I J …
现在就会变成:
A B C D (D) E F G H (H) I J K…
每一组的前三帧是加快了速度,而第四帧的播放速又减慢了每帧时间占用很不均匀,流畅度成问题。
但是插帧到60fps:
A A A B B C C C D D E E E F F G G G H H I I I J J…
相邻两幅画面的时间比是3:2,情况就好多了。
时间再倒回到以前。作为观众,会认为电视上播放电影的能力是必须要有的,但NTSC规范是30fps,播放24p的电影时,如果简单插帧,会造成不流畅,而已经成熟电影的24fps规范不可能专门为了电视而修改。所以电视工程师想到了一个折衷的办法。既然已经有了隔行扫描系统,何不好好利用一下?
让电影的第一帧占用3场,也就是在上场、下场都显示出来后再扫描一次上场,以占用时间。很明显,多出来的这一场对第一帧的显像完全不会影响——事实上对第二帧也不会影响。这是由于隔行扫描的特性:在某帧的一个场已经出来的情况下,只要接下来的1/60秒继续把与它互补的场显示出来,人就能看到完整的画面。第一帧是在第一、二、三场时显示的,第二帧则是在第四、五场显示的,满足要求,较好地实现了升帧。
我们用tFn,bFn分别表示原电影中第n帧的上场和下场的,用Gn表示转换后视频的第n帧,那么G1=tF1+bF1
G2=tF1+bF2
G3=tF2+bF3
G4=tF3+bF3
G5=tF4+bF4(这里以上场优先为例)
这种模式,使每相邻的两帧占用的时间比为3:2,类似于上述第二种插帧方案。像这种将24fps的逐行视频转换成30fps的隔行视频的方案叫做3:2pulldown,亦称Film、24p(注意该说法只在做反交错的场合下才是这个意思)。
再回到帧与交错上来。对于逐行扫描,帧指的是一幅完整画面,而隔行扫描是以场为基础的,帧只是将两个相邻场硬性合成的一个小组,不去管画面是不是完整(只因视频文件的结构是以帧为单位,没有帧就不行)。如上面所示,只有G1和G5是由同一个帧的上下场组合而成的完整画面,G2、G3和G4都是由原属于不同帧的上下场凑合而成,不是完整画面。一个帧的上下场分属于两个画面,这种现象叫做交错,有这种现象的帧称为交错帧,而G1和G5这样的为非交错帧。3:2 pulldown的特点就是,连续出现3个交错帧(G2到G4)和2个非交错帧(G5和G6)。对于PAL规范,帧率定义为25fps,由于和24fps相差不大,大多数情况都不插帧,而是进行加速播放。少数PAL规格的视频是每24帧(即每秒)加插一个重复帧。大多数PAL视频都是隔行扫描但无交错。注意,隔行扫描和交错的概念要分开,不是所有隔行视频都有交错哦。
交错现象原本是在升高帧率时产生的,但后来又出现了一些种类的隔行制式摄像机,它们以25或30fps拍摄,采样后不将同一帧的上下场配对,而总是将某帧的上场与上一帧或下一帧的下场组合,即:
Gm=tFm+bFn
或
Gn=tFn+bFm (其中m=n+1)。
这样产生的视频,每一帧都是交错,称为25i和30i,亦称video型。
交错的视频在隔行扫描电视机上播放都是正常的,但是不能直接在逐行扫描显示设备上放,因为对逐行系统来说,它会按帧序依次播放,其中就包含了让原本不属于同一幅画面的上下场——即所谓的“帧”——共同显示1/30的时间,这样人们就很容易看到奇偶数行画面的明显差异,也就是横纹。正是因为交错视频的存在,隔行扫描才一直没有被废除,如果想使用逐行扫描设备播放隔行视频,就必须先进行反交错处理,用专用播放软件,或者进行一次转换,在转换过程中进行反交错。计算机尚且有这个能力,而DVD机、电视机就难说了,所以还不如保留隔行体系来得容易。倍线DVD机之所以输出1080i信号而非1080p,原因并不是机内带宽不够,而是因为这样的话就要增加一个反交错模块,成本将会产生劣势。
反交错
有交错就有反交错。并非所有隔行扫描视频都要进行反交错处理,只有那些存在交错的视频才需要这么做。所以大多数PAL DVD的Rip工作理论上是可以直接跳过反交错步骤(实际仍然需要修正意外的交错帧)。
反交错主要分为场匹配反交错(IVTC)和Deinterlace。场匹配反交错,如果是上场优先,先指定本帧的上场,通过对比它与前一帧、本帧和下一帧的下场的耦合度,力求能把原本属于同一幅画面的上下场找到并重新组合到一起。而Deinterlace是基于单个的帧,将其处理成你看不出交错的程度,并非还原,跟原画面还是有不一样的。对于3:2pulldown的视频,采取的一般为IVTC,具体过程如下:
H1=tG1+bG1=tF1+bF1
H2=tG2+bG1=tF1+bF1
H3=tG3+bG2=tF2+bF2
H4=tG4+bG3=tF3+bF3
H5=tG5+bG5=tF4+bF4
这样一来,H1和H2重复了,采用删帧程序删掉其中一个即可。这样就把3:2 pulldown还原成24fps的逐行扫描视频,可以在计算机上播放了。(25i/30i的视频则通常使用Deinterlace处理)。