The bilateral filter is defined as : I^\text{filtered}(x) = \frac{1}{W_p} \sum_{x_i \in \Omega} I(x_i)f_r(\|I(x_i) - I(x)\|)g_s(\|x_i - x\|), and normalization term, {W_p}, is defined as : W_p = \sum_{x_i \in \Omega}{f_r(\|I(x_i) - I(x)\|)g_s(\|x_i - x\|)} where : I^\text{filtered} is the filtered image; : I is the original input image to be filtered; : x are the coordinates of the current pixel to be filtered; : \Omega is the window centered in x, so x_i \in \Omega is another pixel; : f_r is the range kernel for smoothing differences in intensities (this function can be a
Gaussian function); : g_s is the spatial (or domain) kernel for smoothing differences in coordinates (this function can be a Gaussian function). The weight W_p is assigned using the spatial closeness (using the spatial kernel g_s) and the intensity difference (using the range kernel f_r). Consider a pixel located at (i, j) that needs to be denoised in image using its neighbouring pixels and one of its neighbouring pixels is located at (k, l). Then, assuming the range and spatial kernels to be
Gaussian kernels, the weight assigned for pixel (k, l) to denoise the pixel (i, j) is given by : w(i, j, k, l) = \exp\left(-\frac{(i - k)^2 + (j - l)^2}{2 \sigma_d^2} - \frac{\|I(i, j) - I(k, l)\|^2}{2 \sigma_r^2}\right), where σd and σr are smoothing parameters, and
I(
i,
j) and
I(
k,
l) are the intensity of pixels (i, j) and (k, l) respectively. After calculating the weights, normalize them: : I_D(i, j) = \frac{\sum_{k, l} I(k, l) w(i, j, k, l)}{\sum_{k, l} w(i, j, k, l)}, where I_D is the denoised intensity of pixel (i, j). == Parameters ==