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?