解释 RemoveGrain

本文翻译自 Actually Explaining RemoveGrain,原作者:kageru

Mode 11 与 12

Mode 11 与 12 等价于

1
std.Convolution(matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])

Mode 11 和 Mode 12 没有区别,从代码上看是复制过来的,下面的测试也证明了这一点。

1
2
3
4
5
>>> d = core.std.Expr([clip.rgvs.RemoveGrain(mode=11),
clip.rgvs.RemoveGrain(mode=12)], 'x y - abs')
>>> d = d.std.PlaneStats()
>>> d.get_frame(0).props.PlaneStatsAverage
0.0

但这两种模式与对应的卷积操作存在细微差别。

Edit:这也可能是 VapourSynth-R36 中已修复的 PlaneStats bug 导致的,因为 0.05 的误差确实太大了。

(译者注:应该是 bug 导致的,在 VapourSynth-R49 中测试没有差别,下述结果为译者测试结果)

1
2
3
4
5
>>> d = core.std.Expr([src.rgvs.RemoveGrain(mode=12),
src.std.Convolution(matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])], 'x y - abs')
>>> d = d.std.PlaneStats()
>>> d.get_frame(0).props.PlaneStatsAverage
0.0

VapourSynth 内置的卷积滤镜通过插值处理边缘,而 RemoveGrain 则不处理边缘。

Mode 13 - 16

这些模式为场内插值,速度非常快,但也非常不精确,类似粗制滥造的 EEDI。没有必要使用这些模式(EEDI2 于2005年发布,无论是这些模式还是 EEDI 都没必要使用)。

Mode 17

Clips the pixel with the minimum and maximum of respectively the maximum and minimum of each pair of opposite neighbour pixels.

听上去可能有些困惑,但描述得很准确。这一模式会创建一个数组,包含极小值(lower)和极大值(upper),然后将中心像素限制在极大值的最小数和极小值的最大数之间。

Mode 21 与 22

Mode 21

中心像素替换为周围四对数字的最大值与最小值的均值。

Mode 22

与 Mode 21 类似,但近似方式不同,比 Mode 21 更快。

Mode 23 与 24

我难以解释这两个模式,也不知道这两个模式有什么用,如果想了解建议阅读代码。