For most noise reduction algorithm, the same process is applied to every pixel no matter the pixel belongs to one of three types of pixels such as homogeneous regions, edges or textures.

Different filtering strength is required for these three kinds of the pixel because human visual system has different tolerance of noise in these three regions. Most strong filtering should be applied to pixels in homogeneous regions, less strong filtering to pixels on edges and weak filtering to pixels on textured regions.

I need to determine what kind of pixels is in an noisy image and this is a difficult problem even for an clean image. I plan to use Sobel operator to calculate the gradient and use the magnitude of the gradient to do that. Large magnitude will be considered as edges, less magnitude as textures and small magnitude as homogeneous regions. The Sobel operator uses a 3x3 mask and noise will affect the gradient greatly in the case the noise level is high. Is there better method to do this?

  • $\begingroup$ For most noise reduction algorithm, the same process is applied to every pixel no matter the pixel belongs to one of three types of pixels such as homogeneous regions, edges or textures. <sup>[Citation needed]</sup> Noise reduction algorithms tend to be nonlinear and environment-dependent. $\endgroup$ Oct 21, 2022 at 6:57
  • $\begingroup$ @MarcusMüller Thanks. I agree with you. The same process can adapt its behavior based on image content to achieve edge-preserving effect without detecting edges explicitly. However the same filtering strength is applied. I hope to adapt filtering strength with edgeness measurement. $\endgroup$ Oct 21, 2022 at 7:13

1 Answer 1


Even not anymore modern methods like the Bilateral Filter, Guided Filter and Non Local Means do not filter the image in a uniform manner.
They all apply some kind weighing based on the properties of the surrounding of the filtered pixel.

Usually they do very well in the homogeneous and zone, they struggle more with textures.

More advanced methods can do better in textured zones, some build a Bayesian model which you may thing as some kind of classifier to the surrounding information while other build a low rank model of the window which is learned for different kind of surrounding.

The state of the art use Deep Learning based methods which basically learn the properties of all pixels and their surrounding during training.

You may have a look at Which Noise Reduction Algorithms Are Used in Commercial RAW Image Processors.

Regarding your specific idea, if you don't go the Deep Learning path, you may try build a classifier for the pixel. One way to do so is building a data set of each kind of pixel and look at the response to the Sobel filter you suggested.
Yet a better approach would be using a more advanced feature extractor. You may use SIFT / SURF or similar method and use their response for the classification.

The main challenge in those methods will be building the labeled data set of such cases. Once you have it, I think modern classifiers will do the work for you.

  • $\begingroup$ Currently I am reading the paper $A Bias-Variance Approach for the Nonlocal Means$. Tuning parameters for non local means are patch size, size of search window and weight calculation parameters. The author suggests that selecting weight calculation parameters with two other parameters fixed depends on the local content of the image (textured areas, smooth regions, etc.) and uses a time consuming method for that. I attempt to process the image in realtime, so need one not very accurate,but efficient method for that. $\endgroup$ Oct 24, 2022 at 11:32
  • $\begingroup$ As I wrote, if you have labeled data you may do it easily with a CNN or a classifier working on features of SIFT / SURF etc... $\endgroup$
    – Royi
    Oct 25, 2022 at 6:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.