Two suggestions for better control over results

suggest a way to improve Neat Video
Post Reply
AlabasterButtShine
Posts: 3
Joined: Thu Dec 02, 2010 8:08 pm

Two suggestions for better control over results

Post by AlabasterButtShine »

I've been messing around with the Virtualdub demo version of Neat Video lately. The noise reduction greatly improves upon the original image, but I've identified two areas where the plugin could be made even better:

First, I propose giving users finer-grained control over noise amounts/noise reduction levels. Currently, there are six settings for each:
  • High [Frequency]
  • Mid
  • Low
  • Y [Channel]
  • Cr
  • Cb
This works well, with one exception: At least in my sources, there tends to be a lot more low frequency noise in the chroma channels than in the luma channel. It would be helpful to be able to precisely target that without unduly affecting the low frequency features in the luma channel. To accomplish that, I propose changing those six options to the following nine:
  • High Y
  • Mid Y
  • Low Y
  • High Cr
  • Mid Cr
  • Low Cr
  • High Cb
  • Mid Cb
  • Low Cb
This would allow people to target e.g. low frequency chroma noise without muddying their low frequency luma features.


My second suggestion is a bit more interesting: I propose either splitting the temporal threshold into two temporal thresholds, or decoupling the temporal filter from the spatial filter. The reason is because the temporal threshold setting seems to affect two logically different aspects of filtering: First, setting it lower reduces the strength of the effect on grainy noise, and setting it higher increases the strength of the effect on grainy noise. That is to be expected. However, setting it higher actually reduces the effect of the spatial filter on persistent features, resulting in less spatial noise reduction than if temporal filtering were disabled entirely.

I understand the rationale behind doing things the way they seem to be done now: "Hey, the user turned on temporal filtering, so why don't we take temporal results into account during spatial noise reduction and reduce the effects on persistent features?" The problem is, this makes Neat Video significantly less effective when a video has both random grain and persistent noise patterns. To give an example of a persistent noise pattern, look at this relatively recent thread from butler360: http://www.neatvideo.com/nvforum/viewtopic.php?t=563

My own persistent noise pattern is somewhat different. On top of regular VHS noise, I have an odd "scanline" issue in my old VHS home movies where approximately every other line within each interlaced field is darker than the previous line, although the strength of this effect depends on the color tones underneath. (It's very strong on red/peach/yellow highlights, for instance.). It doesn't seem to be an interlacing issue, since it actually occurs within each interlaced field. After weaving the image together, the pattern repeats every four lines (two regular lines followed by two darkened lines, or vice versa). It seems to be an artifact of the camcorder, and I've seen it in direct VHS playback from both VCR's I've tried.

In my testing, I created a noise profile to specifically target this issue, since it's much more noticeable and distracting than regular noise. This is important, because the ordinary noise somewhat masks this pattern in the source, and it's very stark when regular noise is removed without specifically targetting the pattern as well. Even with a carefully constructed 100% profile (chosen from several 100% profiles I've made ;)), the pattern can still be mildly distracting in some areas, unless I ramp up luma noise reduction to 100% (major overkill for all other noise) and end up with an artificial-looking image. Still, I can get it to do very well for the most part...at least until I crank up the temporal threshold. Then, Neat Video decides that the persistent noise pattern must be genuine detail and leaves it in (and sharpens it ;)).

This creates a dilemma for people with both grainy noise and persistent noise patterns: Do we keep the temporal threshold low, leaving in more grain, or do we bump it up, strengthening persistent noise patterns? As far as I see, there are two solutions:
a.) Include two temporal thresholds: One should affect how much noise the temporal filter should reduce. The second should affect how much detail (or "detail") the temporal filter should prevent the spatial filter from removing.
b.) Completely decouple the temporal and spatial filters, so that the spatial filter is not influenced by what the temporal filter thinks is detail. (This seems a bit extreme though, since the second threshold in option a would essentially determine the strength of this coupling).

I should also note that increasing the temporal radius similarly makes persistent noise patterns starker. Actually, increasing the radius from 1 to 2 makes the persistent noise patterns worse than increasing the threshold from the default to the max. I guess this is because the more frames the temporal filter gets, the higher its level of confidence that a persistent feature is genuine detail? In addition, turning on adaptive filtering seems to make persistent noise patterns starker too, but I don't really know what to make of that.

Finally, I thought I'd mention something odd: Using Neat Video in progressive mode works significantly better for me than using it in interlaced mode, and I'm working with interlaced sources. For some reason, interlaced mode obscures certain details, like thin diagonal (more horizontal than vertical) lines in wood grain, whereas they come out crystal clear in progressive mode. My best guess is that individual fields do not have a high enough resolution for Neat Video to clearly recognize certain details/patterns within, and denoising/sharpening the fields separately results in subpar results here. Interlaced mode also adds occasional artifacts, such as dark scanlines (this time I'm talking about actual scanlines corresponding to interlaced fields) near the top and bottom of the image in some scenes, though I haven't figured out why. In both cases, it doesn't seem to matter whether the noise profile was created in progressive or interlaced mode.

I'm not a licensed user or anything (yet, at least), so take my opinion with a grain of salt. Still, I thought my feedback might be helpful anyway. :)
NVTeam
Posts: 2748
Joined: Thu Sep 01, 2005 4:12 pm
Contact:

Post by NVTeam »

Thank you for the detailed suggestions.

Yes, most controls would offer a bit finer control over individual sub-components and perhaps we will add this as an option in the future updates. Of course remembering that more controls is not always better or easier to use than fewer but better chosen ones.

Regarding the temporal vs spatial filtration, the description of the functionality of the filter controls is not entirely accurate (the temporal filter threshold controls filter's sensitivity to moving details in the video stream), but in general you have a valid point - it may be possible to improve treatment of static patterns (specific for certain cameras) by using additional optional adjustments to the filters to prevent situations when using more frames (a larger temporal filter radius) makes those static patterns more stable and more visible in the output instead of reducing them along with random noise. There are several ways to achieve that and we plan to consider several approaches to see which works better and which is more efficient and easier to use. Once we are happy with the results, we will add it to the filter.

Until then, the best possible solution to deal with such static patterns seems to be the regular one: include the most strong and visible patterns into the profiling area (manually select such an area with visible patterns, noise, and no useful details), build the profile and then try to filter. Quite often this allows to reduce both static patterns and regular random noise.

On the progressive vs interlaced mode, yes, it is always easier to work with progressive frames as compared with half-resolution interlaced fields. A progressive frame contains more details than any single field, so it is to be expected that the filter is able to detect more of those fine details and better preserve them in the output.

BTW, it is of course important to use the matching noise profile: a profile built using interlaced data is to filter interlaced data, a profile built upon progressive frame is to filter progressive video. It is not right to mix them.

Once again, thank you for your suggestions. We have already been thinking over these topics and will continue to work on that for the new versions of Neat Video.

Vlad
Post Reply