Log in

View Full Version : LRemoveDust - improvement ideas?


FredThompson
4th May 2006, 17:24
A buddy of mine (who is unbelievable anal about image quality) made this comment yesterday about LRemoveDust:

Erm, Lremovedust; frankly I don't like it since I'm seeing a distracting motion artifact. Essentially if there is significant movement in the frame then there is a ghost image of the previous frame defined by snow. That is, is a person moves an inch to the right between two frames, the second frame will have heavier snow or grain for an inch to the left of the person defining where he was in the previous frame.

It's not the same as smearing or skitter, though there is a little skitter/mosquito noise also. You can't really see this on a still frame, just in the eye's memory comparing two frames. FaeryDust is the only cleanup tool I've encountered that adds no motion problems, though there is a little flattening of greys. That Dust examines both previous and following frames to average out temporal noise is why it's so slow, but it does make the active frame more accurate.

After a little digging, I'm pretty sure motion compensation would help and possibly replacing Cleanse with it's finer-grit sibling.

Have any of you played with these ideas. If so, what guidance would you have to improve the filter chain without bogging it down to 1 fps?

Didée
5th May 2006, 09:23
MVTools come along with a nice documentation ...

Originally Posted by MVTools documentation

To denoise with some external denoiser filter (which uses 3 frames: prev, cur, next):

backward_vectors = source.MVAnalyse(isb = true, truemotion=true, delta = 1, idx = 1)
# we use explicit idx for more fast processing
forward_vectors = source.MVAnalyse(isb = false, truemotion=true, delta = 1, idx = 1)
forward_compensation = source.MVFlow(forward_vectors, idx=1) # or use MVCompensate function
backward_compensation = source.MVFlow(backward_vectors, idx=1) # or use MVCompensate function
# create interleaved 3 frames sequences
interleave(forward_compensation, source, backward_compensation)

DeGrainMedian() # place your preferred temporal (spatial-temporal) denoiser here

return selectevery(3,1) # return filtered central (not-compensated) frames only


Also have a look at RemoveNoiseMC (http://forum.doom9.org/showthread.php?t=110078). Overall it's fast & effective, though occasionally it might show some problems around hard edges.

(All those "play it safe, but still fast" scripts aren't able to fully denoise around moving hard edges, because there the SADs usually are high, forcing cheap safety checks to bail out even when not necessary.)