Date Aug 2014

EMail: mohanvc

DeNoise plugins for Avisynth 2.5 and 2.6 versions, are free and the author does not give any guarentee for its operation. It may be downloaded and used at the users risk.

This is an adaptive local noise reduction filter. It uses global variance of the noise, local mean and local variance in a moving grid of specified size. It tries to preserve edges as closely as possible. The global variance value can be specified or it can be computed from a window. The global variance can have one value for the entire clip or can vary frame to frame linearly or computed from a window with its coordinates linearly moving with frame numbers .

version 2.5 plugin works in YUY2, YV12, RGB32 and RGB24 color spaces. version 2.6 plugin works in YUY2, Planar, RGB32 and RGB24 color spaces. In case of YUY2 or planar formats limiting process to luma ( Y) only exists. Option to use Y plane variance for U and V planes exists, however, (as the variance values in a table below shows them to be dissimilar) it may not be good idea to do so

The window for computing global variance should be located in an area with least image grey level variations, so that noise statistic is correctly estimated. Note that this window coordinates must be specified as default values are not provided

The process tries to retain the sharpness of the image, though some blurring may be unavoidable. The process may be repeated number of times to get desired result. However results depend on window selected.

Description |
Name |
Type |
Limits |
Default |

Input clip | clip | none | ||

Starting frame number to process | sf | integer | within clip | 0 |

End frame number to process | ef | integer | within clip and not less than sf | last frame |

Number of pixels along x axis in moving grid | xgrid | integer | 3 to 9 | 5 |

Number of pixels along y axis in moving grid | ygrid | integer | 3 to 9 | xgrid |

Is Global variance to be computed? | getvar | boolean | true for yes, false for is specified | true |

Is variance valid for all clip or only frame | clip | boolean | true for yes, false for frame | true |

window left x at start frame for computing global variance | lx | integer | within clip, less than rx | none. Must be specified |

window top y at start frame for computing global variance | ty | integer | within clip, less than by | none. Must be specified |

window right x at start frame for computing global variance | rx | integer | within clip, more than lx | none. Must be specified |

window bottom y at start frame for computing global variance | by | integer | within clip, more than ty | none. Must be specified |

window left x at end frame for computing global variance | elx | integer | within clip, less than erx | lx |

window top y at end frame for computing global variance | ety | integer | within clip, less than eby | ty |

window right x at end frame for computing global variance | erx | integer | within clip, more than elx | rx |

window bottom y at end frame for computing global variance | eby | integer | within clip, more than ety | by |

Variance specified at start frame | var | int | >0 | 100 |

Variance at end frame | evar | int | >0 | var |

Whether U and V of YUY2 and YV12 formats to be denoised | uv | boolean | true for uv process, false for not process | true |

Whether variance of Y to be used for u and v also | usey | boolean | true yes, false no | false |

Whether variance values are to be displayed as an error message | show | boolean | true yes, false no | false |

Usage examples

Denoise()

DeNoise(a,35,55,clip=false,lx=220,rx=245,ty=322,by=402)

DENOISE(d,getvar=false,var=120,evar=160,xgrid=5,ygrid=7)

On top input, center is Output and at bottom noise removed example

following script used to get the images below:

denoise(img1, lx = 350, rx = 390, ty=460,by=560,uv = true, usey = false)

On left is input, middle is with 2 iterations, right is with 4 iterations

Left 6 iterations, middle 8 iterations, right 10 iterations

The variance values within the specified window after each iteration of the above example is given in the table below.

iter no |
rgb red |
rgb green |
rgb blue |
yuy2 y |
yuy2 u |
yuy2 v |
yv12 y |
yv12 u |
yv12 v |

0 | 116 | 76 | 174 | 61 | 8 | 22 | 61 | 8 | 22 |

1 | 42 | 20 | 98 | 16 | 6 | 19 | 16 | 6 | 19 |

2 | 31 | 14 | 91 | 12 | 5 | 18 | 12 | 4 | 18 |

3 | 28 | 11 | 89 | 9 | 5 | 17 | 9 | 4 | 17 |

4 | 25 | 9 | 88 | 9 | 4 | 17 | 9 | 4 | 17 |

5 | 24 | 9 | 88 | 8 | 4 | 17 | 8 | 3 | 16 |

6 | 22 | 8 | 88 | 8 | 4 | 17 | 8 | 4 | 16 |

7 | 21 | 8 | 88 | 7 | 3 | 17 | 7 | 3 | 15 |

8 | 20 | 7 | 88 | 7 | 4 | 17 | 7 | 3 | 15 |

9 | 19 | 8 | 89 | 7 | 3 | 18 | 7 | 3 | 16 |

10 | 19 | 8 | 89 | 7 | 3 | 18 | 7 | 3 | 16 |