版面规则
提问时请注意:尽量详细描述操作过程、AVS脚本内容等,最好能写出片名,只贴图有时无法看出问题原因。
提示:发布原创内容请尽量使用附件上传。使用网盘会出现过期失效的问题,请注意。
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

HQDering mod v1.8 - 高质量去除ringing/edge clean的脚本

HQDering mod v1.8
NMM碗柜:http://nmm.me/z2
我的所有avsi脚本所需滤镜(Requirements)打包下载(文件夹分享):http://pan.baidu.com/s/1Bt2fY

简要说明
函数名HQDeringmod()
以dering及edge clean为目的的脚本,以MinBlur/dfttest为核心,prewitt edge mask经过处理后用作ring mask保护非ringing区域。
部分参数的默认值随画面分辨率而有所变化,宽度小于1280并且高度小于720时算作SD,否则为HD。

核心处理部分
nrmode控制dering时处理luma的方式,默认为1/2(SD/HD)。
nrmodec控制dering时处理chroma的方式,默认等于nrmode。(只在U=3或V=3时起作用)

nrmode=0时使用dfttest:速度较慢,强度低,损失小。参数sigma默认128,控制对中低频域的滤波强度(ringing主要分布的频域),参数sigma2默认8,控制对极低频域和高频域的滤波强度。
nrmode为1到3时使用MinBlur:速度较快,强度较大,损失较大。MinBlur的范围(radius)=nrmode,越高强度越大。
注:nrmode=1~3并且lsb=true时,假如需要处理的输入clip为8bit,强烈建议不要自行升到16bit,而应该在HQDeringmod里设置lsb_in=false,那样可以避免一部分完全没意义的16bit精度处理,速度能快不少。

smoothed参数可以指定自定义的经过dering/edge clean处理的clip,此时nrmode不起作用。
(利用HQDering mod的mask进行保护并可以进行其他后处理)例如:
src = last
dr = src.RemoveGrain(4, 2)
src.HQDeringmod(dr, drrep=13, sharp=1, thr=14.0, darkthr=0, Y=3, U=3, V=3)
后处理部分
sharp:0为不处理,设为1~3时使用Contra-Sharpen还原锐度,但也会减弱dering效果。默认为1。
drrep:0为不处理,大于0时为使用Repair还原的mode,例如可以设为24/13/12/1(还原效果依次增强)。默认设置:drrep在nrmode>=1时为24/13(lsb=false/true),在nrmode=0时为0。
thr: 限制luma处理结果像素值降低量的阈值,限制chroma处理结果像素值改变量的阈值。对于lsb=False/True有效范围分别为[0, 255.0]/[0, 128.0],默认为12.0。
darkthr:限制luma处理结果像素值增高量的阈值,可以用于防止深色线条变浅。对于lsb=False/True有效范围分别为[0, 255.0]/[0, 128.0],默认为thr/4。
当thr和darkthr均为0或大于等于255/128(lsb=False/True)时代表不对处理结果做限制处理,只有thr/darkthr其中一个为0时代表只允许处理后像素值增加/减少。
elast:有效范围为[1, inf),具体作用和Dither_limit_dif16的elast相同。默认为2.0。

mask相关
mthr控制edge mask的阈值,默认60,值越小被视为edge的区域越多。
minp控制ring mask的内部范围,默认1,值越大处理区域越大。
mrad控制ring mask的外部范围,默认1,值越大处理区域越大。
msmooth控制ring mask的外部平滑范围,默认1,值越大处理区域越大。
incedge控制ring mask是否包含中心的edge mask部分,默认为False。

YUV平面的设置
Y/U/V三个参数控制是否处理各个平面,3为处理,2为不处理,1为完全不管输出的结果。
默认Y=3、U=2、V=2,也就是只处理luma,chroma保持原样输出。

输入输出的设置
lsb_in默认False,决定输入的clip是否为stacked 16bit格式。
lsb默认False,决定处理过程是否使用16bit(影响速度及精度)
lsb_out默认lsb,决定输出的clip是否为stacked 16bit格式。
tv_range默认True,当设为False时使用SmoothAdjust进行PC-Range下正确的Bit Depth转换。
tv_range为True/False时,dither默认6/50,设置16bit降至8bit时使用的dither方式,等于DitherPost中的mode参数/SmoothCurve16中的dither参数。
show默认False,设为True时输出ring mask,可以用于预览并调整mask相关的参数。

Changelog

v0.4
增加16bit输入输出支持,分别由lsb_in和lsb控制。
增加参数sharp,默认为false,使用Contra-Sharpen还原(但也会减弱dering效果)。
增加参数drrep,默认为0,使用Repair还原,例如可以设为24/13/12/1(还原效果依次增强)。

v0.5
增加Y、U、V三个参数控制是否处理三个平面,用法跟masktools的YUV参数相同。
默认参数的调整,根据输入分辨率是否为HD参数有所变化。

v0.6
修复脚本内将Ymask转为YUVmask时在2.5版Avisynth下不支持mod2的问题。

v0.7
较大的改动
增加新的参数nrmode、nrmodec,增加并默认使用MinBlur的处理核心,改进dfttest的处理效率。增加参数show用于显示mask,改变部分默认值。

v0.8
修正前一版本中lsb=true时报错的问题——由于Dither_repair16只支持1-4和11-14的mode,所以更改了lsb=true时drrep的默认值为13。

v0.9
MinBlur 16bit处理过程的优化,lsb=true时MinBlur部分可以有30-50%的速度提升。

v1.0
修复v0.8引入的bug:没有设定lsb时报错的问题。感谢Holy君报错。
另外Contra-Sharpen部分略微优化(感觉也不怎么用的到)。

v1.1
一些杂七杂八的小改动及bug修复

v1.4
重大更新。
sharp的默认值从false改为true。
新增后处理及参数thr、elast——通过Dither_limit_dif16限制处理结果的改变量,能有效避免dering、sharp中产生的artifacts(blurry、aliasing等),配合sharp=true大幅度减少了HQDeringmod的处理损失。
新增clip型参数ringmask,可以输入自定义的ring mask。
新增mask调整参数minp、msmooth、incedge。

v1.5
增加更多注释并提高可读性。
用mt_lutxy写了一个与Dither_limit_dif16基本功能相同、用于8bit处理的函数HQDeringmod_limit_dif8。
lsb=False时会使用HQDeringmod_limit_dif8代替Dither_limit_dif16来进行limit部分的处理,由于后者是通过有较好优化的实时运算而非像前者那样通过LUT实现,所以尽管精度前者是8bit后者是16bit,实际两者的运行速度基本一样。HQDeringmod_limit_dif8主要好处是thr和elast的最大值不像Dither_limit_dif16那样被限制在10.0。
需要注意的一点是在elast大概不超过5时(我没有做更多的测试来确定这个数字),这两个函数的运算公式是相同的,但是超过5时Dither_limit_dif16的运算结果显得有些奇怪(得到了比设置的elast更大一点的结果,我也不确定这是bug还是故意的),而HQDeringmod_limit_dif8则是始终保持了运算公式的一致性。
参数thr默认值由10.0改为8.0,参数elast默认值由3.0改为2.0。

v1.6
增加参数darkthr,thr默认值改为12.0,darkthr默认为thr的1/4。处理后darkthr用于允许luma像素值增高的阈值,thr则用于允许luma像素值降低的阈值,chroma像素值改变量的阈值始终由thr控制。降低darkthr能够避免诸如深色线条变浅的问题(thr或darkthr可以一个大于0,另一个设为0)。当thr和darkthr均为0时会禁用limit处理(否则都按照0来处理等于完全没有改变,没有意义)。
增加函数HQDeringmod_limit_dif16代替Dither_limit_dif16,实现的功能与HQDeringmod_limit_dif8相同,16bit处理时thr和elast的值不再具有上限。
增加参数lsb_out,默认值等于lsb。由于nrmode>=2并且lsb=True时处理速度较慢,当需要输入输出16bit时,可以设置lsb_in=True, lsb=False, lsb_out=True来保证非处理区域原样保留原先的16bit精度画面,而处理区域使用速度较快的8bit精度处理(edge部分对于精度并不敏感所以对处理结果基本没有影响)。
增加参数tv_range,默认True,当设为False时使用SmoothAdjust进行PC-Range下正确的Bit Depth转换。
参数sharp由Bool型改为Int型,范围0~3,0为禁用Contra-Sharpening,1~3则为Sharpening Kernel的radius。默认值为1。
Requirements中,RemoveGrain改为RgTools,RemoveGrainHD改为MedianBlur2,增加SmoothAdjust。

v1.7
由于O16mod对于PC Range下CbCr的改动,相应地改动HQDeringmod内部的bit depth转换函数。
修正thr=0且darkthr>0时的处理方式(原版本为不对像素值降低做限制,新版本为不允许像素值降低)。
脚本内部的MinBlur在调用MedianBlur时不处理的平面参数设为-256,所以MedianBlur2需要更新至0.94及以上版本才能运行。

v1.8
由于O16mod对于PC Range下CbCr的改动,相应地改动Bit Depth转换函数——将CbCr表达式超界的部分通过线性缩放限制在对应Bit Depth的上界,防止CbCr降低Bit Depth且输出为PC Range时导致Overflow。
上次由 mawen1250 在 2016-01-08 11:19,总共编辑 32 次。
头像
sammysui
帖子: 87
注册时间: 2012-07-06 20:13

Re: HQDering mod v0.4

请问楼主 这个HQDering mod v0.4,是否就是只处理ring和halo 而不抹杀非halo区的细节吗
头像
sammysui
帖子: 87
注册时间: 2012-07-06 20:13

Re: HQDering mod v0.4

非常好,一直为这个问题苦恼呢,呵呵,及时雨啊。。。

还想多问一下,请问这个avsi如何使用呢。

可否有一些使用说明呢?

是否这样使用

Import("...HQDeringmod_v0.4.avsi")

HQDeringmod_v0.4()

还需要什么文件载入
头像
sammysui
帖子: 87
注册时间: 2012-07-06 20:13

Re: HQDering mod v0.4

呵呵 看到了

masktools v2.0a48, RemoveGrain v1.0pre, dfttest v1.9.2, dither v1.21.0

直接使用HQDeringmod()

看来要好好研究一下,谢谢了
头像
sammysui
帖子: 87
注册时间: 2012-07-06 20:13

Re: HQDering mod v0.4

hi 楼主 我想问你有没有研究过如何去掉以前的老dvd的色斑,用MergeChroma去掉绿色色斑溢出。。。

这个有没有办法使用msktool 去除
264768502
核心会员
核心会员
帖子: 402
注册时间: 2010-09-23 17:38

Re: HQDering mod v0.4

新问题开新楼比较好 最好再有图片示例
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: HQDering mod v0.6

更新v0.6,和GrainStabilizeMC一样修复脚本内将Ymask转为YUVmask时在2.5版Avisynth下不支持mod2的问题。
因为处理U或V时,我在脚本内手动将luma的mask转换为三个平面的mask,如果是2.6版Avisynth会转换为Y8之后resize,所以没有问题,而2.5版Avisynth不支持Y8,而我又没有考虑到mod2时的问题,于是就出错了。
所以更新了一下,在2.5版Avisynth碰到mod2时会自动pad 2 pixel来变成mod4处理。2.6版的Avisynth没有影响。

回到 “AviSynth”