Topic: How does artifact masking work
We're investigating how to optimize frame interpolation for quality instead of for real-time processing in this thread.
https://forum.doom9.org/showthread.php? … ost1800439
This code does give significantly better results than SVP/Interframe ... *when* it behaves.
function jm_fps(clip source, float "fps")
{
fps = default(fps, 25.000)
fps_num = int(fps * 1000)
fps_den = 1000
prefiltered = RemoveGrain(source, 22)
super = MSuper(source, hpad = 16, vpad = 16, levels = 1) # one level is enough for MRecalculate
superfilt = MSuper(prefiltered, hpad = 16, vpad = 16) # all levels for MAnalyse
backward = MAnalyse(superfilt, isb = true, blksize = 16, overlap = 4, search = 3, dct = 0)
forward = MAnalyse(superfilt, isb = false, blksize = 16, overlap = 4, search = 3, dct = 0)
forward_re = MRecalculate(super, forward, blksize = 8, overlap = 2, thSAD = 100)
backward_re = MRecalculate(super, backward, blksize = 8, overlap = 2, thSAD = 100)
out = MFlowFps(source, super, backward_re, forward_re, num = fps_num, den = fps_den, blend = false, ml = 200, mask = 2)
return out
}
This has no artifact masking, and produces considerable artifacts.
My question is: how does artifact masking work in SVP, and how could it be added to this script?
Then I'm thinking, artifact masking could fall-back on frame blending instead of disabling frame interpolation altogether.
Then, this algorithm most likely will still will result in some serious artifacts that must be removed manually (replacing these frames with a clip using frame blending).