分享

视频处理之反交错

 hhs179 2022-04-05

什么是反交错呢?先简单了解下什么是交错编码,或叫场编码。那得从上个世纪说起。

早期的电视制式均采用隔行扫描,但是现在很多的高清、专业级的视频采集卡都是采用逐行扫描模式,虽然现在的视频设备和数字视频技术已近有了很大的发展和进 步,但是在时候中这两种扫描模式和显示模式一直还存在。

隔行扫描(Interlaced)就是每一帧被分割为两场,每一场包含了一帧中所有的奇数扫描行或者偶数扫描行,通常是先扫描奇数行得到第一场,然后扫描偶数行得到第二场。由于视觉暂留效应,人眼将会看到平滑的运动而不是闪动的半帧半帧的图像。

逐行扫描(Progressive)每次显示整个扫描帧,如果逐行扫描的帧率和隔行扫描的场率相同,人眼将看到比隔行扫描更平滑的图像,相对于隔行扫描来说闪烁较小。每一帧图像均是由电子束顺序地一行接着一行连续扫描而成。

明显的,逐行扫描比隔行扫描要好啊,为什么还要隔行扫描呢?众所周知,帧率只要达到24fps就达到流畅,电影就是按这个标准执行的。但是考虑到交流电频率50或60Hz,电视标准制订者确定了25或30fps的帧率(25:PAL制式,30:NTSC制式)。如果电视机采用逐行扫描,每秒扫描25或30帧行不行呢?理论上可以,但实际不行。原因在于,在电子束的照射下,CRT的荧光粉会立即发光,但只要电子束一离开,几乎瞬间就会暗下来。人眼虽然看不到这么明显的变化,但仍然会有亮度衰减的感觉。可以想象,如果采用30p扫描方式显示,当电子束从屏幕的上半部分移到下半部时,屏幕上半部分的亮度就有了可以观察到的衰减,于是画面下半部分显得更亮。这只是一个瞬间,事实上最亮的部分(当然就是电子束刚经过的区域)会不断移动,从而产生闪烁现象。这种现象你也见过,就是在电视上看见CRT电脑显示器那种感觉。

为了解决这个问题,最佳的办法是加倍刷新率,改成50p(以PAL制式为例)扫描,将每幅画面扫描2次,因为在1/50秒内,人眼能感觉到的亮度衰减就很小了。可是这样做,单位时间内扫描的总行数会加倍,那么水平扫描的速度就要加快。如此一来技术要求就会过高,以当时的条件做不到。于是标准制订者想到了一个折衷的办法,先花1/50分之一秒扫描奇数行(上场),然后再用后1/50秒扫描偶数行(下场),两者互补成完整的画面。虽然扫描下场时,上场的亮度衰减了,但是由于亮暗的部分交织在一起,反而不易察觉。机智!但是,看下图:

可以看到,隔行扫描会出现俗称拉丝或水文或重影的问题,导致看起来画面不清晰。摄像机的采像,从一开始其实不存在扫描,因为无论是胶片还是电子原件都是同时受光的。但是,要读取感光器上的信息(其核心任务将画面采样为YUV/RGB电信号),还是要靠扫描,于是读取每个像素的顺序就必须考虑。可以采取按顺序依次读取(逐行方式),也可以每行按顺序读取,但是先读完所有奇数行再读偶数行(隔行方式)。为了兼容电视机的隔行扫描体系,过带机(将胶片上的画面采样为YUV/RGB电信号并保存在磁带上的机器)和有些摄像机是隔行扫描制式的。

有了交错编码,就有反交错(deinterlacing):将交错式(即隔行扫描)(interlace)影像讯号转换为渐进式(逐行扫描)(progressive)影像讯号的一种方法。在直播中,的确也会存在一些源是交错编码的情况,比如从电视台转播的节目,电子竞赛,足球篮球竞技比赛,为了让画面清晰(不出现拉丝),需要进行反交错处理。反交错常见有几种方法:

场间插值:

一种简单的场间插值去隔行方法是相邻两场直接合并,即直接将输入的相邻两场(奇场和偶场,或偶场和奇场)合并成一幅完整的顿图像输出到屏幕上,这种方法就是我们常说的“编织法(weave)”。这种直接六并的时域插值方法简单方便易实现,可以提高图像静止区域的垂直清晰度,对阁像的静止部分来说可以得到非常完美的效果,但对图像中运动的部分则会产生严重的缺陷,如梳状线条,锯齿,边缘闪烁等问题。

场内插值:

场内插值的思想是利用单场内与缺失行相邻两行(或几行)通过内插运算还原出缺失行的图像信号,再与当前场的图像信号进行组合成一个完整图像的去隔行方法。常见的主要算法有空域线性去隔行算法(包括场内上下行均值插值法,场内双线性插值法,场内重复插值法等),空域非线性去隔行算法,如基于边缘角度信息插值法。这类方法仅需要几行高速存储器空间,所以场内空域插值去隔行具有算法较简单,运算也相对比较小的优点,占用系统资源少,同时可以的减少行闪烁现象,对运动图像不会产生图像模糊感和梳妆线条现象,提高图像的画面质量。不过场内插值算法仅仅利用了单场的空域相关性,没有利连续场的时域相关性。

运动补偿:

运动补偿是对一个连续的视频序列,通过估计方法来检测视频序列中的物体运动矢量,然后在运动轨迹上进行插值的过程。在视频序列中,只要物体没有消失,都可以在相邻几场内找到当前场缺失的那部分信息补上,这就是运动补偿去隔行的基本原理。

由于用来补偿的这部分图像是来自于原始场图像,而运动自适应去隔行的运动部分的缺失信息是“人造”出来的,由此可以看出,运动补偿去隔行从理论上来讲能提高清晰的图像。 但运动补偿去隔行算法中对运动估计有一些特殊要求,运动估计得到的运动矢量场的准确度要求很高,因为它对去隔行结果影响非常的明显。运动补偿去隔行算法的计算复杂度非常高,开发成本高,通常是在芯片上实现。

同时,ffmpeg有多种反交错的滤镜实现,可以结合原理和代码看看。

视频是否交错编码的检测并不是那么直观,需要通过解码视频源的SPS,PPS,slice header等信息组合判断,如下图的规则:

其中:frame_mbs_only_flag和mb_adaptive_frame_field_flag在sps信息里面, field_pic_flag字段在每帧的slice header里面。

由左而右分别是 "交错扫瞄" (左边), "交错扫瞄+去交错处理" (中间), "非交错扫瞄" (右边). 请注意每个图的左下角,在衣服上的菱形黑色图案, 左边和中间的图都有锯齿状, 而右边的 "非交错扫瞄" 没有这个状况.再来是中间图的菱形图黑色表现没有旁边两个来的黑. 也就是说做 "去交错" 处理 (中间的图) 会比没有做 "去交错"的表现来的糊一点点. 所以 "去交错" 做的好不好也很重要.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多