------------------------------------------------------ Adaptive Noise Removal Filter, Version 1.1, README.TXT ------------------------------------------------------ Contents System requirements Description New in version 1.1 How does it work? Source code Settings Contact ------------------- System requirements ------------------- - Windows 95 or newer - a fast CPU recommended ----------- Description ----------- The filter reduces noise in the image without blurring the edges. The results are much better than can be achieved by using the popular adaptive median or smoothing filters.Like modern compression algorithms (including JPEG) the filter operates in Y,Cr, Cb color space, hence it is useful for removing compression artifacts. ------------------ New in version 1.1 ------------------ - Added saving to JPEG - Added adaptive median filtering for comparisons - Released source code ----------------- How does it work? ----------------- At first the image is transformed from RGB to Y,Cr,Cb color space, then a pixel neighbor graph is created with edge weights corresponding to color differences between the pixels. This graph is used to create a different filter for each pixel in each color plane. - for the pixel being filtered calculate the shortest path from it to all the other pixels reachable with path length < d - replace the pixel value with the weighted average of all reached pixels, weights are taken as the Gaussian function of the path length This way only the relevant filtering neighborhood for each pixel is selected. The size and shape of the neighborhood adapt to the image features, including curved ones and sharp corners. If there is an edge in the image, the proposed algorithm creates a filter that does not include pixels in the opposite side of the edge. In this way edges are not smoothed out. Note that we select different maximum path length for each color plane resulting in different noise reduction level for each. ----------- Source code ----------- The full source code is available under the terms of GNU General Public License. Please see the homepage of the filter. The program is compiled under Borland C++ Builder 5.0. The adoption to other C++ compiler should not be hard. -------- Settings -------- You can adjust several parameters to obtain the best noise reduction level for each particular image: - Filter radius for each luma, Cr, Cb color channels: Larger radius will remove more noise, however some detail also can be lost. - Edge sensitivity: larger values will preserve more edges but sacrifice smoothness in low contrast areas. For very large value banding may appear. - Chroma 2x reduction: The resolution of Cr and Cb channels is reduced two times, what improves the speed of the algorithm for large radiuses with little loss of quality. Recommended settings are. - for high quality scanned images radius luma 2, Cr 2 Cb 2 Edge Sensitivity 76 Chroma 2x reduction false - for high quality JPEG images radius luma 2, Cr 3 Cb 4 Edge Sensitivity 76 Chroma 2x reduction false - for low quality JPEG images radius luma 3, Cr 4 Cb 6 Edge Sensitivity 76 Chroma 2x reduction true ------- Contact ------- Please visit the website of the filter at: http://www.gradetools.com/karlisf/image/filter.html The author is waiting for your comments and questions by email: Karlis.Freivalds@mii.lu.lv