播放图像有锯齿_反隔行操作

Posted 邗影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了播放图像有锯齿_反隔行操作相关的知识,希望对你有一定的参考价值。

摄像机按图像扫描方式可分为隔行扫描像机和逐行扫描像机,常用的是隔行扫描像机。隔行扫描像机拍摄的每帧图像分为顶场和底场,图像中的奇数行为顶场,图像中的偶数行为底场。隔行扫描摄像机在拍摄图像时先拍摄顶场然后拍摄底场,当摄像机以每秒25帧的速率拍摄图像时,顶场和底场之间的拍摄时间差为20毫秒,这20毫秒的时间差使运动物体在顶场和底场中有了位置差异。监视器等隔行显示设备是按场播放图像,因此不会有问题,但电脑等逐行显示设备是按帧显示图像的,此时图像中的运动物体会有锯齿效果产生,如图一所示。总之,这类现象是由于使用逐行显示设备显示隔行拍摄图像造成的。

     为了使隔行扫描的图像能够在逐行显示的设备上正常播放,必须先对图像进行处理,也就是反隔行处理。反隔行算法有很多种,根据算法的复杂度可以分为三类,第一类算法不带运动检测功能,主要是利用一些插值或者中值滤波的方式实现,这类算法现在主要被一些低端的显卡或者图像卡采用,例如可以利用顶场和底场之间的均值来生成一帧图像,其处理效果见图二,该算法在运动区域会形成模糊。总之这类算法都有一些缺陷例如运动区域模糊,或者降低图像分辨率等等。 第二类算法统称为运动自适应算法,这类算法根据前后帧图像差值估算图像中的运动区域,并针对静止区域和运动区域采用不同的算子进行处理,例如在静止区域直接用顶场和底场合成图像,在运动区域只用一场插值生成图像,处理效果见图三,这类算法有较好的处理效果,现在是高端显卡所采用的主流算法。第三类算法统称为运动补偿算法,该类算法根据前后帧图像估算运动区域的位移矢量,并将运动物体在底场中的图像拉回t时间以前的位置。这类算法具有最好的处理效果,但是这类算法非常复杂,一般只有顶级的图像卡才使用这类算法。( )转( )

转.................................................................

交错扫瞄(隔行扫瞄, Interlaced), 就是一个画面分成两次送出, 先送奇数线的画面后, 再送偶数线,显示时再将它们合成完整画面. 非交错扫瞄(逐行扫瞄, Porgressive), 就是每次都送完整的画面, 不需要奇偶画面重新组合.所以在非交错式显示的萤幕上观看时, 交错画面要把它重组回来, 这个动作叫做 "去交错" (Deinterlaced)

直接来看看, 到底它们是什么.
下图是隔行扫瞄 (Interlaced) 的图, 影片镜头是由右而左缓慢移动的为每个选手做特写.
技术分享图片
我们可以发现在上图中, 选手的衣服边缘处有细纹产生, 穿着2号球衣的这个 "2" 字样也可以看出明显的细纹,而且在衣服上胸口处的菱形黑色斜边线条有锯齿纹状.

为了怕大家看不清楚, 做了局部放大, 整理如下图, 让大家可以看的更清楚.
技术分享图片
注意上图中, 左方放大的图 (红色箭头所指的红色框框处), 选手的衣领和脸部边缘处都有细纹出现. 这就是在动态画面下使用 "交错"(Interlaced) 方式显示会产生的问题. 所以有所谓 "去交错" (Deinterlaced),目的在尽量将这种现象降低.

下图是开启 "去交错" (Deinterlaced) 后的状况.
技术分享图片
在上图中, 我们可以发现, 先前的细纹不见了, 但画面变的模糊了一点点, 这是因为做 "去交错" 的关系,做了一些调整所造成的结果.

接着我们来看看, 假设收到的影像已经是使用 "非交错" (逐行扫瞄, Progressive), 表现又如何呢? 贴一张 "非交错"的图如下, 让大家做一个比较.
技术分享图片
不知道大家看出差异了没有, 在 "非交错" 讯号中, 即然是非交错, 当然没有去交错问题, 省了一次处理的麻烦和画质的失真.所以上图中没有锯齿和细纹等等现象.

为了更清楚解释, 我将三个放大图摆在一起, 请参考下图.
技术分享图片
由左而右分别是 "交错扫瞄" (左边), "交错扫瞄+去交错处理" (中间), "非交错扫瞄" (右边). 请注意每个图的左下角,在衣服上的菱形黑色图案, 左边和中间的图都有锯齿状, 而右边的 "非交错扫瞄" 没有这个状况.再来是中间图的菱形图黑色表现没有旁边两个来的黑. 也就是说做 "去交错" 处理 (中间的图) 会比没有做 "去交错"的表现来的糊一点点. 所以 "去交错" 做的好不好也很重要.

以上是比较静态的, 接着来就找个动作大一点, 夸张一点的图, 会看的更清楚一些.下图是一台车快速的转弯移动中.
技术分享图片
由上图中, 我们可以看到很明显的横线, 状似抽丝, 已经不是细纹可以形容, 大家应该都可以清楚的看见了吧, 这个例子是十分夸张的图,为了说明方便特别贴出来.

接下来就是 "去交错" (Deinterlaced) 后的状况, 如下图.
技术分享图片
我们可以发现, 横条细纹在 "去交错" 后不见了, 但是仍有拖影的现象, 在这么大动作的画面中, 这是无法避免的, 就算是用"非交错" (逐行扫瞄) 方式也会有拖影现象, 只是程度上的差别而已.

接着下面几张图, 再来比较一下, 让各位更清楚. 也是一台跑车在过弯时的图, 这次一口气比 "交错", "交错+去交错", "非交错"三种, 每张图为了容易看到差异, 都有贴上一张局部放大的图.
技术分享图片
技术分享图片
技术分享图片

再补上一张 "非交错" 的原图, 让大家自行比对前几张的差异.
技术分享图片

照样在最后将三者排开, 比对差异.
技术分享图片
最左边是 "交错", 所以会看到线条, 中间是 "交错+去交错处理", 虽然线条不见了, 但有点拖影现象, 而最右边是"非交错"

除了图像会有交错现象外, 还有颜色交错 (color interlaced) 与亮度交错(brightnessinterlaced)
参考资料 : http://zh.wikipedia.org/wiki/去交錯













































以上是关于播放图像有锯齿_反隔行操作的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImageView 中显示隔行(逐行)图像

为什么要采用隔行扫描?

Firefox中带有边框图像的旋转div上的抗锯齿

如何设置透明背景颜色并对 kivy 图像进行抗锯齿处理?

图像压缩 - 离散余弦变换后的锯齿形

游戏中的抗锯齿杂谈