Optimized 2D Cleaner

Some time ago, I modified and optimized the 2D Cleaner filter by Jim Casaburi. I have been using it for TV-captured animations and have been very satisfied. I have no intentions to work on it further (my main business is science), but maybe someone else will also like it as it is.

My TV capture card outputs only odd rows (704x288 pixel capture), therefore I also modified the filter to support different radii for x and y.

There are two binaries in the zip-file, an Athlon version and a Pentium III version. There is a single difference between them: the Athlon version includes two prefetchw opcodes to reduce memory stalls (leads to invalid opcode on PIII). PII cannot be used with either of them, because it does not support SSE extensions (pminub, pmaxub).

It is highly optimized for Athlon and takes approx 4.5 cycles to process each pixel (i.e., 11x11 area takes 4.5 x 120 cycles).

Jaan Kalda

Following text by DAG:

Here is an example of the filter in action. The settings used were threshold 20 and X and Y radii both 5.


On one test of a given clip with equivalent settings the following timings were obtained for the Athlon version:

2D Cleaner (original by Jim Casaburi) -- 200 seconds
2D Cleaner (optimized by Jaan Kalda) -- 32 seconds
Smart Smoother -- 83 seconds

Not only is this version of the filter much faster than the original, but active filter preview and integrated help have been added!

So now we have a spatial denoiser that blows away the existing filters!

2D Cleaner Optimized Version 0.9 [Source code]

Version 0.9 fixes crashes when interlaced mode is used.

[up to home page]