Non-local means

(Redirected from Non-local means filter)

Non-local means is an algorithm in image processing for image denoising. Unlike "local mean" filters, which take the mean value of a group of pixels surrounding a target pixel to smooth the image, non-local means filtering takes a mean of all pixels in the image, weighted by how similar these pixels are to the target pixel. This results in much greater post-filtering clarity, and less loss of detail in the image compared with local mean algorithms.[1]

If compared with other well-known denoising techniques, non-local means adds "method noise" (i.e. error in the denoising process) which looks more like white noise, which is desirable because it is typically less disturbing in the denoised product.[2] Recently non-local means has been extended to other image processing applications such as deinterlacing[3] and view interpolation.[4]

Definition

Suppose ${\displaystyle \Omega }$ is the area of an image, and ${\displaystyle p}$ and ${\displaystyle q}$ are two points within the image. Then, the algorithm is:[5]

${\displaystyle u(p)={1 \over C(p)}\int _{\Omega }v(q)f(p,q)dq.}$

where ${\displaystyle u(p)}$ is the filtered value of the image at point ${\displaystyle p}$, ${\displaystyle v(q)}$ is the unfiltered value of the image at point ${\displaystyle q}$, ${\displaystyle f(p,q)}$ is the weighting function, and the integral is evaluated over ${\displaystyle \forall q\in \Omega }$.

${\displaystyle C(p)}$ is a normalizing factor, given by:

${\displaystyle C(p)=\int _{\Omega }f(p,q)dq.}$

Common weighting functions

The purpose of the weighting function, ${\displaystyle f(p,q)}$, is to determine how closely related the image at the point ${\displaystyle p}$ is to the image at the point ${\displaystyle q}$. It can take many forms.

Gaussian

The Gaussian weighting function sets up a normal distribution with a mean, ${\displaystyle \mu =B(p)}$ and a variable standard deviation:[6]

${\displaystyle f(p,q)=e^{-{{\left\vert B(q)-B(p)\right\vert ^{2}} \over h^{2}}}}$

where ${\displaystyle h}$ is the filtering parameter (i.e., standard deviation) and ${\displaystyle B(p)}$ is the local mean value of the image point values surrounding ${\displaystyle p}$.

Discrete algorithm

For an image, ${\displaystyle \Omega }$, with discrete pixels, a discrete algorithm is required.

${\displaystyle u(p)={1 \over C(p)}\sum _{q\in \Omega }v(q)f(p,q)}$

where ${\displaystyle C(p)}$ is given by:

${\displaystyle C(p)=\sum _{q\in \Omega }f(p,q)}$

Then, for a Gaussian weighting function,

${\displaystyle f(p,q)=e^{-{{\left\vert B(q)-B(p)\right\vert ^{2}} \over h^{2}}}}$

where ${\displaystyle B(p)}$ is given by:

${\displaystyle B(p)={1 \over |R(p)|}\sum _{i\in R(p)}v(i)}$

where ${\displaystyle R(p)\subseteq \Omega }$ and is a square region of pixels surrounding ${\displaystyle p}$ and ${\displaystyle |R(p)|}$ is the number of pixels in the region ${\displaystyle R}$.