VirtualDub filter (1.2+) : Chroma Noise Reduction
Download
Version 1.1:
The filter (for an end-user) : cnr11.zip (37
kBytes)
The source code in C++ : cnr11-source.zip (17 kBytes)
To compile source code, you must own the VirtualDub
Filter SDK (filtsdk), Visual C++ (6.0).
Previous versions
version 1.0a : cnr10a.zip (36 ko) - cnr10a-source.zip (17 kBytes)
version 1.0 : cnr.zip (36 ko) - cnr-source.zip
(17 kBytes)
What are the conditions of use of this program ?
This program is distributed under GNU GPL version 2. So you can copy it, use it freely with no fee, you have access to source code if you want, but you must not modify the program itself. You can use some peace of code to do other programs, provided that they are freely distributed (it may be distributed for fee), and with the source code.
What is VirtualDub ?
VirtualDub is a program designed to process video under windows. It is distributed under GNU GPL, it is free and the source code in C++ is available. A filter source development kit for VirtualDub allows developpers to add some new features to this program which is become a must for all who do video capture at home. You can get it on the VirtualDub page.
What is the purpose of this filter ?
This filter allows user, as its name means, to reduce the noise on chrominancy. It
exists several way to represent colors : R'G'B' is the most famous.
The chrominancy has a signification in another color system called Y'U'V (in fact
Y'Cb'Cr). Y is the luminancy (brightness intensity), U (chrominancy 1) et V (chrominancy
2) are the chrominancies. the Y'U'V' system is used maily with vidoo (TV program
transmission, VHS recorder, MPEG...) whereas computers use rather the R'G'B' system.
On magnetic tapes used by VHS recorders, the band width reserved for chrominancy is
smaller than the band width reserved for luminancy, since human eye is much less sensitive
to brightness than colors. As a consequence, the chrominancy is more sensitive to
electromagnetic noise and tape's wear.
This filter tries to reduce the noise on chrominancy, without affecting the luminancy
which is already supposed to have a good quality.
How to adjust filter parameters ?
1 - Noise reduction
The filter uses on curve for each signal component (view 1, 2, et 3 on the image below). User can modify :

the sliders at bottom and right of each curve allows you to modify their
envelope.
Each curve tells to the filter how to combine the previous frame with the current frame
according to the variation of the luminancy and the two chrominancies.
View 1:
The variation d(Y) = Y(current frame) - Y(previous frame) of the luminancy (Y) is put on
axis X (expressed in %)
The coefficient q(Y) is put on axis Y (expressed in %).
View 2:
The variation d(U) = U(current frame) - U(previous frame) of the chrominancy 1 (U) is put
on axis X (expressed in %)
The coefficient q(U) is put on axis Y (expressed in %).
View 3:
the variation d(V) = V(current frame) - V(previous frame) of the chrominancy 2 (V) is
put on axis X (expressed in %)
The coefficient q(V) is put on axis Y (expressed en %).
The filter blends the previous frame with the current frame using the following formulas :
U(new frame) = q(Y) * q(U) * U(previous frame) + (1 - q(Y)) * (1 - q(U)) * U(current frame)
V(new frame) = q(Y) * q(V) * V(previous frame) + (1 - q(Y)) * (1 - q(V)) * V(current frame)
The luminancy (Y) is not altered by the filter.
In order to make the filter detect correctly scene change, the
coefficients q(Y), q(U) et q(V) have to be low for significant differences d(Y), d(U), and
d(V). In order to make the filter reduce enough the effects of noise, the coefficients
q(Y), q(U), et q(V) have to be strong for weak differences d(Y), d(U), and d(V). Products
q(Y) * q(U) et q(Y) * q(V) could be seen as persistancies we apply to U and V signals.
Making curves higher, removes much noise, whereas making curves narrower, gives better
scene change detection.
2 - Chroma shift correction
It could exist an horizontal shift between luminancy and chrominancy, which make colors spread on the left, and a purple tape appears on the right edge of the frame. The filter allows you to correct this matter by doing the inverse shift, you only have to tell the filter how chrominancy has to be shifted.