# Noise Removal from an Image Using OpenCV (Comparison to Neat Image)

I tried removing noise from the image shown below using Median Blur in OpenCV. But i'm not able to remove the colour noise completely as it is done in Neat Image. Any suggestions.?

1. Original Input Image

Median Blur Output

Neat Image Output

• You'll find many cutting-edge denoising algorithms on github and academic web sites. What's your goal; why not use NeatImage since you have it? – Emre Apr 21 '15 at 19:59
• @Emre: I like to implement an algorithm for low light noise reduction rather than using neat image every time. I have tried anisotropic diffusion filter, bilateral filter also to remove noise but i dont achieve the result as that of neat image. Any other suggestions..? – OpenCV User Apr 22 '15 at 4:48

I've had pretty good luck with using OpenCV's built-in fastNlMeansDenoisingColored.

• Yeah, OpenCV's fastNlMeansDenoisingColored function removes the noise completely but it does not preserve the edges very well in my case. Used default values for the parameters of the function. – OpenCV User Apr 27 '15 at 4:37

Since you're interested in implementing algorithms yourself, I would suggest this as a very flexible algorithm which can be adapted to a very wide variety of situations:

The adaptability and flexibility of it is very appealing.

Well of course the canned filters are rudimentary, and there is a vast literature of more more advanced solutions out there. The only problem is that most of them exist only on paper; you have to implement them yourself. And since you're prepared to do that, then I suggest studying the literature to see what the latest methods are. In my archive I found this survey from 2005:

I frequently hear about non-local means methods mentioned in a favorable light, and it is supported by OpenCV, so I would suggest starting there.

• Thank you for the suggestion. I already tried Non local Means algorithm, the noise gets removed but the edges are getting breaked. And, I will look into the paper. – OpenCV User Apr 22 '15 at 10:59
• And any suggestion in frequency domain is also welcome. – OpenCV User Apr 22 '15 at 11:01

NeatImage probably uses Wavelets based Noise Reduction.
You can look for methods based on that.

Today you need methods which are "Edge Aware", namely they smooth yet keep edges in tact.

• I have tried out Anisotropic Curvature in Matlab that preserves the edges but does not remove the noise properly. – OpenCV User Apr 22 '15 at 13:42
• The one above is much more advanced and works better. Pay attention that Neat Image do 2 things which are crucial for good results: Multi Scale Analysis and Noise Estimation. – Royi Jun 24 at 18:05

Have you tried bilateral filtering? It is also in OpenCV.

• I have tried almost all smoothing operations available in OpenCV. – OpenCV User Apr 23 '15 at 4:38