2017-01-15, 05:16 AM
This is a denoiser made by althor1138 and posted on OT a long time ago; I think it could be useful for someone here, too.
Code:
function LDdenoise(clip input, float "strength", int "mc", int "temporalframes",\
int "blksize", int "search", int "searchparam", int "overlap", int "dct")
{
# Set default options.
strength=default(strength,1)
temporalframes=default(temporalframes,1)
mc = default(mc, 0)
# Prepare supersampled clip.
super = input.MSuper(levels=6,chroma=true)
# Motion vector search.
b5vec = MAnalyse(super, delta=5, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, dct=dct)
b4vec = MAnalyse(super, delta=4, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b3vec = MAnalyse(super, delta=3, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b2vec = MAnalyse(super, delta=2, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b1vec = MAnalyse(super, delta=1, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f1vec = MAnalyse(super, delta=1, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f2vec = MAnalyse(super, delta=2, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f3vec = MAnalyse(super, delta=3, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f4vec = MAnalyse(super, delta=4, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f5vec = MAnalyse(super, delta=5, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
# Motion Compensation.
b5clip = MCompensate(input,super, b5vec)
b4clip = MCompensate(input,super, b4vec)
b3clip = MCompensate(input,super, b3vec)
b2clip = MCompensate(input,super, b2vec)
b1clip = MCompensate(input,super, b1vec)
f1clip = MCompensate(input,super, f1vec)
f2clip = MCompensate(input,super, f2vec)
f3clip = MCompensate(input,super, f3vec)
f4clip = MCompensate(input,super, f4vec)
f5clip = MCompensate(input,super, f5vec)
# Create compensated clip.
interleaved = mc >= 5 ? Interleave(f5clip, f4clip, f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip, b4clip, b5clip) :
\ mc == 4 ? Interleave(f4clip, f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip, b4clip) :
\ mc == 3 ? Interleave(f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip) :
\ mc == 2 ? Interleave(f2clip, f1clip, input, b1clip, b2clip) :
\ mc == 1 ? Interleave(f1clip, input, b1clip):
\ input
#Perform DFTTEST
params="""dfttest(y=true,u=true,v=true,f0beta=0.5,sigma=0,dither=0,sbsize=25,sosize=20,tbsize="""+string(temporalframes)+""",tosize="""+string(temporalframes)+"""/3,nstring=\
"a:"""+string(strength)+""" \
"+string(current_frame)+",0,440,10 \
"+string(current_frame)+",0,10,10 \
"+string(current_frame)+",0,10,340 \
"+string(current_frame)+",0,10,680 \
"+string(current_frame)+",0,440,680 \
"+string(current_frame)+",1,440/2,3 \
"+string(current_frame)+",1,3,3 \
"+string(current_frame)+",1,3,340/2 \
"+string(current_frame)+",1,3,680/2 \
"+string(current_frame)+",1,440/2,350 \
"+string(current_frame)+",2,120,3 \
"+string(current_frame)+",2,3,3 \
"+string(current_frame)+",2,3,340/2 \
"+string(current_frame)+",2,3,680/2 \
"+string(current_frame)+",2,440/2,680/2")
"""
filter=eval("scriptclip(interleaved,params)")
return SelectEvery(filter, mc * 2 + 1,mc)
}
function LDdenoise2(clip input, float "strength", int "mc", int "temporalframes",\
int "blksize", int "search", int "searchparam", int "overlap", int "dct")
{
# Set default options.
width=width(input)
height=height(input)
strength=default(strength,1)
temporalframes=default(temporalframes,1)
mc = default(mc, 0)
# Prepare supersampled clip.
super = input.MSuper(levels=6,chroma=true)
# Motion vector search.
b5vec = MAnalyse(super, delta=5, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, dct=dct)
b4vec = MAnalyse(super, delta=4, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b3vec = MAnalyse(super, delta=3, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b2vec = MAnalyse(super, delta=2, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
b1vec = MAnalyse(super, delta=1, isb=true,chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f1vec = MAnalyse(super, delta=1, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f2vec = MAnalyse(super, delta=2, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f3vec = MAnalyse(super, delta=3, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f4vec = MAnalyse(super, delta=4, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
f5vec = MAnalyse(super, delta=5, chroma=true, search=search, searchparam=searchparam, overlap=overlap, blksize=blksize, dct=dct)
# Motion Compensation.
b5clip = MCompensate(input,super, b5vec)
b4clip = MCompensate(input,super, b4vec)
b3clip = MCompensate(input,super, b3vec)
b2clip = MCompensate(input,super, b2vec)
b1clip = MCompensate(input,super, b1vec)
f1clip = MCompensate(input,super, f1vec)
f2clip = MCompensate(input,super, f2vec)
f3clip = MCompensate(input,super, f3vec)
f4clip = MCompensate(input,super, f4vec)
f5clip = MCompensate(input,super, f5vec)
# Create compensated clip.
interleaved = mc >= 5 ? Interleave(f5clip, f4clip, f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip, b4clip, b5clip) :
\ mc == 4 ? Interleave(f4clip, f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip, b4clip) :
\ mc == 3 ? Interleave(f3clip, f2clip, f1clip, input, b1clip, b2clip, b3clip) :
\ mc == 2 ? Interleave(f2clip, f1clip, input, b1clip, b2clip) :
\ mc == 1 ? Interleave(f1clip, input, b1clip):
\ input
#Perform DFTTEST
yparams="""dfttest(y=true,u=false,v=false,f0beta=0.5,sigma=0,dither=0,sbsize=25,sosize=20,tbsize="""+string(temporalframes)+""",tosize="""+string(temporalframes)+"""/3,nstring=\
"a:"""+string(strength)+""" \
"+string(current_frame)+",0,"""+string(height-40)+""",10 \
"+string(current_frame)+",0,10,10 \
"+string(current_frame)+",0,10,"""+string(width/4)+""" \
"+string(current_frame)+",0,10,"""+string(width/2)+""" \
"+string(current_frame)+",0,10,"""+string(width/1.5)+""" \
"+string(current_frame)+",0,10,"""+string(width-40)+""" \
"+string(current_frame)+",0,"""+string(height-40)+""","""+string(width-40)+""" ")
"""
yfilter=eval("scriptclip(interleaved,yparams)")
uvparams="""dfttest(y=false,u=true,v=true,f0beta=0.5,sigma=0,dither=0,sbsize=25,sosize=20,tbsize="""+string(temporalframes)+""",tosize="""+string(temporalframes)+"""/3,nstring=\
"a:"""+string(strength)+""" \
"+string(current_frame)+",1,"""+string((height/2)-30)+""",3 \
"+string(current_frame)+",1,3,3 \
"+string(current_frame)+",1,3,"""+string((width/2)/2)+""" \
"+string(current_frame)+",1,3,"""+string((width/2)-30)+""" \
"+string(current_frame)+",1,"""+string((height/2)-30)+""","""+string((width/2)-30)+""" \
"+string(current_frame)+",2,"""+string((height/2)-30)+""",3 \
"+string(current_frame)+",2,3,3 \
"+string(current_frame)+",2,3,"""+string((width/2)/2)+""" \
"+string(current_frame)+",2,3,"""+string((width/2)-30)+""" \
"+string(current_frame)+",2,"""+string((height/2)-30)+""","""+string((width/2)-30)+""" ")
"""
uvfilter=eval("scriptclip(yfilter,uvparams)")
return SelectEvery(uvfilter, mc * 2 + 1,mc)
}