f3kdb、KNLMeans与Cnr2色度降噪滤镜使用文档翻译

A@NAZOrip
A@NAZOrip 2017年10月28日
  • 在其它设备中阅读本文章

网上找不到翻译就自己做了。
文章引用自:www.cnblogs.com/luo-peng
翻译:iAove

f3kdb去色带滤镜

f3kdb全名为flash3kyuu_deband,用在Avisynth和Vapoursynth上的去色带(de-banding)滤镜. 其原理是将构成色带的像素替换为临近像素的中间值,并抖动加噪从而彻底摆脱色带. 本文翻译自2.0版文档


在VS中导入f3kdb:

import vapoursynth as vs
CR = vs.get_core()
CL = CR.f3kdb.Deband(video,range=,Y=,Cb=,Cr=,...)

在AVS中导入f3kdb:

f3kdb(...)

range
色带检测范围,默认15

Y,Cb,Cr
三个空间各自的色带判定值. 类似于PS油漆桶工具的敏感度,如果当前像素与临近像素的差值小于这个阀值就判为是色带,默认64

grainY,grainC
指定在去色带最后步骤添加多少抖动噪点(dithering),默认64

sample_mode
搜索采样模式,默认2:
•1: 根据色带检测范围找出其中的上下2个像素作为参考像素.
•2: 根据色带检测范围找出其中的上下左右4个像素作为参考像素.

seed
启用随机数发生器

blur_first
模糊处理,默认true:
•true: 当前像素比较所有参考像素的平均值
•false: 当前像素与临近像素挨个比较. 如果2或4个全部不同则判为是色带

dynamic_grain
使用动态噪点,即每帧的加噪点位置都不同,默认关闭

opt
指定优化方式,默认-1(自动):
•-1: 自动选择当前CPU支持的最好方式
•0: 不优化
•1: SSE2 (奔腾 4,AMD K8)
•2: SSSE3 (Core 2)
•3: SSE4.1 (Core 2 45nm)

mt
多线程处理,默认true:
同时处理Y,U,V三个平面以达到加速的目的,由于VS本身支持多线程所以仅在Avisynth中可用

dither_algo
抖动加噪算法选择,默认3:
•1: 不抖动,同时删除最低有效位
•2: 规则抖动,效果见下图
•3: 扩散抖动,能避免产生规则抖动带来的规则斑点

注:
0.抖动的原理大体的说将临近像素的颜色复制到一点上并交替闪烁来利用视觉误差产生中间色,从而用更少颜色表现更多颜色的功能.由于去色带相当于对画面进行了修改,所以可以通过加噪来降低修改的痕迹
1.论画质3最好,但去过色带的像素可能会很容易被x264/x265破坏,建议以画质优先的方式设定x264/x265的参数
2.虽然1和2画质不如3,但论码率它们效果最好. 由于色带越少码率就越低,所以在低码率编码时3的效果反而不如1和2

keep_tv_range
重设所有像素为tv色彩范围(亮度16~235,色度16~240,16或更低的值重设为纯黑)

input_mode
指定视频源处理方式,视频源不同会导致处理方式的区别. 受到VS的clip属性所以不可用,默认0
0: 视频源是8bit
1: 视频源是9~16bit
2: 视频源是9~16bit且使用分行扫描

input_depth
指定视频源色深,受到VS的clip属性所以不可用,默认0,范围8~16,默认8

output_depth
指定输出视频流色深,范围8~16,设在16时dither功能将不可用,默认8

random_algo_ref, random_algo_grain
选择随机选取参考像素与动态噪点的算法,默认1
0: 旧版随机数发生算法
1: 不随机选取
2: 高斯分布式随机数发生算法

random_param_ref, random_param_grain
用于相应随机数发生算法的参数. 目前仅用于高斯随机数发生器,默认1.0,范围-1.0~1.0

KNLMeansCL时域降噪滤镜

KNLMeansCL 是一种通过 OpenCL 优化的非局部均值降噪滤镜。★非局部均值(Non Local-means)是近年来提出的一项简单而高性能的降噪技术。该方法充分利用了图像中的重复特征,在去噪的同时能最大程度地保持图像的细节特征。★

★转载自 www.cnblogs.com/luo-peng★
为了节约计算量,KNLMeansCL 继承了 NL-means 中补丁的概念,下图中整个表格就是搜索窗口,X 和 Y 代表补丁窗口,通过使 Y 滑动,并对比 X 和 Y 中结构相似处来重新调整像素值.

A3.png

VapourSynth 中导入 KNLMeansCL:

import vapoursynth as vs
CR = vs.get_core()
CL = knlm.KNLMeansCL(video,d=,a=,s=,h=,...)

AviSynth 中导入 KNLMeansCL:

KNLMeansCL(...)
d [整数,默认 1]
指定从当前帧向前,后搜索的半径。通常来说,这个值越大就越有效,同时越明显的影响速度。通常对于高噪的源才会设在 2(一共 5 帧),否则保持默认
d=0 表示只使用当前帧; d=1 表示使用前后各一帧和当前帧; d=11 表示使用前后各 11 帧和当前帧

a [整数,默认 2]
指定搜索窗口的半径。通常来说,这个值越大就越有利于降噪,同时越明显的影响速度
a=0 面积为一个像素,a=1 面积为 9 个像素

s [整数,默认 4]
指定补丁窗口 (X 和 Y 的匹配面积) 的半径。面积受到 a 的限制,太小 (=1) 时会出现锯齿,太大 (>9) 时会忽略一些蚊噪

h [浮点,默认 1.2]
指定降噪的强度。越高对画面的冲击就越大,需要自己根据源调整,通常对于需要放大多倍才能看到噪点的源使用 0.4

cmode [默认 false]
处理 YCbCr 源的 CbCr 通道。通常 KNLMeansCL 只会处理亮度通道然后将结果复制给色度通道。如果源是 RGB 色彩则都处理.

channels [默认自动]
手动指定使用哪个色度通道。可设值为 "YUV","Y","UV" 或 "RGB"

以下为高级设定:

wmode [整数,默认 0]
0: 威尔士加权函数,衰减快但不会为不相似的结构分配负权重
1: 双立方加权函数的修改版,输出稳定性较差
2: 双立方加权函数,相比其他函数更柔和 (一旦超过给定的阈值就设权重为 0,而权重为 0 能减少大量不相似区块对降噪的干扰)
3: 双立方加权函数的修改版,输出稳定性更高

wref [默认 1.0]
指定源像素对滤镜输出的有助程度,与找到的最相似像素的权重相对。一般保持默认,源的画质越高,这个值就越低,反之越高

rclip [默认关闭]
导入额外用于参考权重的视频片段,可以只要画风相同即可。也就是说,直接导入低噪的视频来重定义权重,从而进一步纠正高噪的视频

以下为 OpenCL 设定:

device_type [默认自动]
accelerator: CPU 处理,GPU 加速
cpu: 只用 CPU
gpu: 只用显卡
自动: "accelerator" -> "gpu" -> "cpu"

device_id [整数,默认 0]
显示 CPU / 显卡信息 (?),例如: device_type = "GPU",device_id = 0 会显示系统里第一张显卡的信息,=1 则显示第二张

ocl_x,ocl_y,ocl_r [整数,默认 0]
在你清楚后果之前不建议修改。ocl_x 与 olc_y 指定本地工作组中可分离卷积核的大小。olc_r 指定一个工作项处理的像素的数量

以下为杂项设定:

lsb_inout [默认 false]
打开最低有效位进出 (?)

stacked [默认 false]
使 Avisynth 强制输出 16bit 色深

info [默认 false]
显示信息。仅在 YUV 色彩空间时可用

Cnr2色度降噪滤镜

Cnr2是用于8bit,YUV片源的时间域色度平面用降噪插件,全称为Chroma noize reducer。适用于静态的彩虹(rainbow)以及动漫片源的噪点

受到其处理原理的限制,Cnr2只能在一个线程上运行,也造成了拖累整个VS脚本的可能性。解决这个问题的方法之一是将视频沿场景变化的位置分为2~3段,并在VSpipe中平行的处理

在VS中导入Cnr2:

cnr2.Cnr2(video,mode=“”,scdthr=,ln=,un=,...)

在AVS中导入Cnr2:

Cnr2(...)

video
导入视频,必须为YUV420P8,YUV422P8,YUV440P8或YUV444P8

mode
字符串,指定YUV三个平面各自的处理模式。o代表宽松,对像素变化敏感度低且效率更高。x代表狭窄,效率低。默认为“oxx”

scdthr
浮点数。场景变化检测敏感度的百分比阀值,值越低就越敏感。默认10.0

ln,un,vn
整数。指定Y,U,V三个平面物件移动的敏感度。值越高,降噪就越强,同时会在色度平面带来鬼影的副作用。默认为35,47,47

lm,um,vm
整数。指定三个平面的降噪强度。值越高,对噪点的冲击就越强。默认192,255,255

scenechroma
T/F。如果设True,转场检测会将色度平面纳入考虑,通常不需要开。默认False