Contra-Sharpen mod 3.7 | CSmod16 1.6 —— EP锐化/还原用脚本,增加16bit版
发表于 : 2012-06-26 22:46
CSmod 3.7 + CSmod16 1.6
NMM碗柜
我的所有avsi脚本所需滤镜(Requirements)打包下载:http://pan.baidu.com/s/1Bt2fY
因为是随便搞出来给自己用的,所以也没有写什么完整的说明文档,avsi打开里面会有一些详细的英文注释。
第二页有更新日志。
Contra-Sharpen的基本原理就是,如果有一个源视频clip source,对其进行如降噪、AA、Dehalo等处理后得到clip filtered,这些处理导致视频中细节损失、边缘变模糊,于是通过unsharp的方式对filtered进行锐化(对画面做模糊处理前后的差值再加回源视频就是锐化)。但同时通过source与filtered的差值对这个锐化的差值进行限制(使用Repair的方式),于是能将画面的锐度还原到和source类似的程度但又不超过source,能还原不少的细节。
我这个CSmod里还加入了可以在还原基础上进一步锐化超过source的功能,所以有更好的通用性与效率(原来我想实现这种效果就要用2个LSFmod像是filtered.LSFmod(source=source).LSFmod())。
2012.9.3添加16bit版本,内部全程16bit处理(除了当ss_hq=true时用的nnedi3_rpow2为8bit输入输出,不过我觉得这个没必要所以默认为false),可以减小8bit处理过程rounding error造成的锐化结果不平滑,从实际对比中也能比较明显看得出来区别。更高的处理精度是CSmod16的主要优势,至于是否输入输出16bit对于edge部分并没有那么大区别,对于non-edge部分的话16bit输入输出的意义更大一些(lsb_in和lsb控制输入输出是否为stack 16bit)。
同时thr、thrc、Sovershoot、Sundershoot、Tovershoot、Tundershoot、Soft、strength等参数都改为float,以配合16bit精度(1.0对应16bit下的256)。
另外部分功能未能16bit化于是去除(Soothe)。如果用filter_ss那也是要在16bit下进行处理。
由于内部精度的提升,CSmod16版能将一些CSmod难以增强的细节也增强,相同设置下的锐化强度也明显更高,再加上没有Soothe temporal stabilization,所以对于动画可能会出现一些很细小的锯齿,这时可以选择开启Tlimit=true,让输出的结果更加柔和,时域上也更稳定。
CSmod主要特点以及相比LSFmod的主要区别:
(CSmod16大部分特性和CSmod一致,但个别会有区别而且预设值也有所不同,详细请见avsi脚本中的注释)
在我电脑上的速度测试结果:
一些简单的用法示例:
AA的最简单方法:在CSmod内做1.5倍的super sampling并做SangNom式的AA,只处理luma不处理chroma,并且锐化强度不超过输入的clip,使用filter_ss="AA"时CSmod会自动设置preblur=0, Smethod=1, edgemode=1, edgemask=7, Repmode=13。通过增大ss_w和ss_h可以减弱AA强度。
在CSmod内做1.5倍的super sampling并做SangNom式的AA,只处理luma不处理chroma,并且锐化强度可以超过输入的clip,至多允许超过2点像素值,使用filter_ss="AA"时CSmod会自动设置preblur=0, Smethod=1, edgemode=1, edgemask=7, Repmode=13。
在CSmod内做1.5倍的super sampling并做SangNom式的AA,只处理luma不处理chroma,锐化强度为80,并且锐化强度不受输入的clip限制,而通过Slimit和Tlimit限制。
用CSmod16做16bit内部精度的luma锐化,用Tlimit进行限制,只处理edge部分,输入输出均为8bit。
用dfttest做luma+chroma的Spatial-Temporal降噪,然后再用CSmod16对flat区域的细节做luma+chroma的锐化,锐化强度不超过原始的画面。不处理edge部分,输入输出均为16bit。
功能和上一个例子相同,但这里注意一个语法问题:当没有clip参数输入时函数会自动使用last作为输入clip filtered,而指定clip参数作为输入时则按照clip filtered、clip "source"的顺序依次赋值。
所以如果你想要输入两个clip来使用Contra-Sharpen进行还原,下面的例子中就必须指定两个clip参数last和source,而不能将last省略,否则(只输入一个clip参数source)CSmod16是将其作为clip filtered输入而不是clip "source",那么等于这里的dfttest完全没有起到作用。
用CSmod16做luma的锐化,只处理flat区域不处理edge区域,自动用Tlimit进行锐化限制,用于噪点、细节的增强,调整Tovershoot控制锐化强度。输入输出均为16bit,如果要输入输出8bit则改为lsb_in=false, lsb=false。嫌原盘噪点不够锐利不够有质感、细节糊的同学赶快上吧……
NMM碗柜
► 显示剧情透露 CSmod 3.4 + CSmod16 1.3
因为是随便搞出来给自己用的,所以也没有写什么完整的说明文档,avsi打开里面会有一些详细的英文注释。
第二页有更新日志。
Contra-Sharpen的基本原理就是,如果有一个源视频clip source,对其进行如降噪、AA、Dehalo等处理后得到clip filtered,这些处理导致视频中细节损失、边缘变模糊,于是通过unsharp的方式对filtered进行锐化(对画面做模糊处理前后的差值再加回源视频就是锐化)。但同时通过source与filtered的差值对这个锐化的差值进行限制(使用Repair的方式),于是能将画面的锐度还原到和source类似的程度但又不超过source,能还原不少的细节。
我这个CSmod里还加入了可以在还原基础上进一步锐化超过source的功能,所以有更好的通用性与效率(原来我想实现这种效果就要用2个LSFmod像是filtered.LSFmod(source=source).LSFmod())。
2012.9.3添加16bit版本,内部全程16bit处理(除了当ss_hq=true时用的nnedi3_rpow2为8bit输入输出,不过我觉得这个没必要所以默认为false),可以减小8bit处理过程rounding error造成的锐化结果不平滑,从实际对比中也能比较明显看得出来区别。更高的处理精度是CSmod16的主要优势,至于是否输入输出16bit对于edge部分并没有那么大区别,对于non-edge部分的话16bit输入输出的意义更大一些(lsb_in和lsb控制输入输出是否为stack 16bit)。
同时thr、thrc、Sovershoot、Sundershoot、Tovershoot、Tundershoot、Soft、strength等参数都改为float,以配合16bit精度(1.0对应16bit下的256)。
另外部分功能未能16bit化于是去除(Soothe)。如果用filter_ss那也是要在16bit下进行处理。
由于内部精度的提升,CSmod16版能将一些CSmod难以增强的细节也增强,相同设置下的锐化强度也明显更高,再加上没有Soothe temporal stabilization,所以对于动画可能会出现一些很细小的锯齿,这时可以选择开启Tlimit=true,让输出的结果更加柔和,时域上也更稳定。
CSmod主要特点以及相比LSFmod的主要区别:
(CSmod16大部分特性和CSmod一致,但个别会有区别而且预设值也有所不同,详细请见avsi脚本中的注释)
► 显示剧情透露 CSmod主要特点
► 显示剧情透露 Sharpener speed test
一些简单的用法示例:
AA的最简单方法:在CSmod内做1.5倍的super sampling并做SangNom式的AA,只处理luma不处理chroma,并且锐化强度不超过输入的clip,使用filter_ss="AA"时CSmod会自动设置preblur=0, Smethod=1, edgemode=1, edgemask=7, Repmode=13。通过增大ss_w和ss_h可以减弱AA强度。
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
CSmod(chroma=false, ss_w=1.50, ss_h=1.50, thr=0, filter_ss="AA")
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
CSmod(chroma=false, ss_w=1.50, ss_h=1.50, thr=2, filter_ss="AA")
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
CSmod(chroma=false, ss_w=1.50, ss_h=1.50, strength=80, limit=false, Slimit=true, Tlimit=true, filter_ss="AA")
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
CSmod16(lsb_in=false, lsb=false, chroma=false, edgemode=1, Tlimit=true)
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
source = last
denoised = source.dfttest(sigma=4.0, sigma2=4.0, lsb_in=true, lsb=true, Y=true, U=true, V=true)
denoised.CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true)
denoised = source.dfttest(sigma=4.0, sigma2=4.0, lsb_in=true, lsb=true, Y=true, U=true, V=true)
denoised.CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true)
所以如果你想要输入两个clip来使用Contra-Sharpen进行还原,下面的例子中就必须指定两个clip参数last和source,而不能将last省略,否则(只输入一个clip参数source)CSmod16是将其作为clip filtered输入而不是clip "source",那么等于这里的dfttest完全没有起到作用。
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
source = last
dfttest(sigma=4.0, sigma2=4.0, lsb_in=true, lsb=true, Y=true, U=true, V=true)
#Wrong# CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true)
last.CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true) #Correct#
dfttest(sigma=4.0, sigma2=4.0, lsb_in=true, lsb=true, Y=true, U=true, V=true)
#Wrong# CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true)
last.CSmod16(source, preset="detail", lsb_in=true, lsb=true, chroma=true, mergesrc=true) #Correct#
CODEBOX_PLUS_CODE: [全选]
[CODEBOX_PLUS_EXPAND/CODEBOX_PLUS_COLLAPSE]
CSmod16(preset="grain", lsb_in=true, lsb=true, chroma=false, Tovershoot=2.0)