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).
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]