Log in

View Full Version : Deasy - quick HBD denoiser


anton_foy
23rd September 2021, 00:46
Yet another denoising filter DEASY

Usage (first for Luma filtering and then Chroma filtering):
Deasy_L()
Deasy_C()

or with a more robust chroma denoise, Deasy_CM:

Deasy_L()
Deasy_CM()

or combined luma and chroma, Deasy_LC:
Deasy_LC()


### Needs: avs+, hqdn3d, rgtools, extools, sharpenerspack(dogway), masktools2, fft3dfilter, neo_f3kdb and manyplus

## Deasy_L ##
function Deasy_L(clip Input, float "tpow", int "restart", float "sigma", float "sigma3", int "bt")
{

tpow = Default(tpow, 4.0)
restart = Default(restart, 5)
sigma = Default(sigma, 1)
sigma3 = Default(sigma3, 2.7)
bt = Default(bt, 4)

clip = Input.hqdn3d(lt=tpow, ls=0, cs=0, ct=0, restart=restart, Y=3, U=2, V=2)
LD = clip.fft3dfilter(bt=bt,sharpen=0.6,ncpu=4,plane=0,sigma=1,sigma3=sigma3)
dmask = clip.coloryuv(autogain=true).ex_median().Adaptive_Sharpen(str=1.3).
\ ex_edge(mode="dob").mt_inpand(paramscale="i16").mt_expand(paramscale="i16").
\ mt_expand(paramscale="i16").mt_expand(paramscale="i16").mt_expand(paramscale="i16").
\ removegrain(20,-1).mt_invert(paramscale="i16")
mt_merge(clip,LD,dmask, Y=3,U=2,V=2, paramscale="i16")
return last

}

## Deasy_C ##
function Deasy_C(clip Input, float "tcow", int "restart")
{

tcow = Default(tcow,9.0)
restart = Default(restart,10)

raw = Input
mec = Input.mergechroma(clense(input).ex_median(mode="medianT").tweak(sat=1.4).
\ hqdn3d(lt=tcow, restart=restart))
temporalrepair(mec,raw).neo_f3kdb()
return last

}

function Deasy_cm(clip Input, float "csigma", float "csigma3", int "bt")
{

csigma = Default(csigma,1)
csigma3 = Default(csigma3,9)
bt = Default(bt,4)

cclip = Input.hqdn3d(lt=6,ls=7,ct=10,cs=0,restart=7, Y=3,U=3,V=3).tweak(sat=1.4)
fden = Input.fft3dfilter(bt=bt,sharpen=0.6,ncpu=4,plane=3,sigma=csigma,sigma3=csigma3)
cmask = cclip.coloryuv(autogain=true).ex_median(mode="medianT").
\ ex_edge(mode="dob").mt_expand(paramscale="i16").mt_expand(paramscale="i16").removegrain(20,-1).
\ mt_invert(paramscale="i16")
cm=mt_merge(cclip,fden,cmask, Y=2,U=3,V=3, paramscale="i16")
mergechroma(Input, temporalrepair(cm,cclip)).neo_f3kdb().tweak(sat=0.82)
return last

}

## Deasy_LC ##
function Deasy_LC(clip Input, float "tpow", float "cpow", float "cspa", int "restart", float "sigma", float "sigma3", int "bt")
{

tpow = Default(tpow, 6.0)
cpow = Default(cpow, 10.0)
cspa = Default(cspa, 4.2)
restart = Default(restart, 7)
sigma = Default(sigma, 1)
sigma3 = Default(sigma3, 2.7)
bt = Default(bt, 4)

clip = Input.hqdn3d(lt=tpow, ls=1, cs=0, ct=4, restart=restart, Y=3, U=3, V=3).tweak(sat=1.4)
LCD = clip.hqdn3d(lt=0, ls=0, cs=cspa, ct=cpow, restart=1, Y=3, U=3, V=3).fft3dfilter(bt=bt,sharpen=0.6,ncpu=4,plane=4,sigma=1,sigma3=sigma3)

lcmask = clip.coloryuv(autogain=true).ex_median().Adaptive_Sharpen(str=1.3).
\ ex_edge(mode="dob").mt_inpand(paramscale="i16").mt_expand(paramscale="i16").
\ mt_expand(paramscale="i16").mt_expand(paramscale="i16").mt_expand(paramscale="i16").
\ removegrain(20,-1)

cmask = clip.coloryuv(autogain=true).ex_median(mode="medianT").morph(opt="dilate").morph(opt="erode").
\ ex_edge(mode="dob").mt_expand(paramscale="i16").mt_expand(paramscale="i16").removegrain(20,-1)

mlc=mt_merge(lcd,clip,lcmask, Y=3,U=3,V=3, paramscale="i16").neo_f3kdb().tweak(sat=0.77)
mt_merge(mlc,clip, cmask, Y=2,U=3,V=3, paramscale="i16")
return last

}



Images, original and denoised comparison:

original (https://ibb.co/BzvkCmG)
deasy_L().deasy_CM() (https://ibb.co/SQ9q56D)

original (https://ibb.co/4KxjTWm)
deasy_L(sigma3=4.7).deasy_CM() (https://ibb.co/K5ytn2D)

deasy_LC() (https://ibb.co/ChMKkS1)

kedautinh12
23rd September 2021, 02:03
It's right in line??
\hqdn3d(lt=tcow, restart=restart))

anton_foy
23rd September 2021, 02:11
It's right in line??
\hqdn3d(lt=tcow, restart=restart))

Thanks, I think its okay now...beers made me (don't) do it.