This weight can be based on a Gaussian distribution.
Crucially, the weights depend not only on Euclidean distance of pixels, but also on the radiometric differences (e.g., range differences, such as color intensity, depth distance, etc.).
The bilateral filter is defined as[1][2] and normalization term,
is given by where σd and σr are smoothing parameters, and I(i, j) and I(k, l) are the intensity of pixels
The bilateral filter in its direct form can introduce several types of image artifacts: There exist several extensions to the filter that deal with these artifacts, like the scaled bilateral filter that uses downscaled image for computing the weights.
Adobe Photoshop implements a bilateral filter in its surface blur tool.
GIMP implements a bilateral filter in its Filters → Blur tools; and it is called Selective Gaussian Blur.
The free G'MIC plugin Repair → Smooth [bilateral] for GIMP adds more control.
[7] A simple trick to efficiently implement a bilateral filter is to exploit Poisson-disk subsampling.
[1] The bilateral filter has been shown to be an application of the short time kernel of the Beltrami flow [8] [9] [10] that was introduced as an edge preserving selective smoothing mechanism before the bilateral filter.
Other edge-preserving smoothing filters include: anisotropic diffusion,[11] weighted least squares,[12] edge-avoiding wavelets,[13] geodesic editing,[14] guided filtering,[15] and domain transforms.