Gaussian blur

From Wikipedia, the free encyclopedia

Gaussian blur is a widely used effect in graphics software such as Adobe Photoshop, The GIMP, Inkscape, and Paint.NET. It is typically used to reduce image noise and reduce detail levels. The visual effect of this blurring technique is a smooth blur resembling that of viewing the image through a translucent screen, distinctly different from the bokeh effect produced by an out-of-focus lens or the shadow of an object under usual illumination. Gaussian smoothing is also used as a pre-processing stage in computer vision algorithms in order to enhance image structures at different scales—see scale-space representation and scale-space implementation.

Mathematically speaking, applying a Gaussian blur to an image is the same as convolving the image with a Gaussian or normal distribution. (In contrast, convolving by a circle (i.e., a circular box blur) would more-accurately reproduce the bokeh effect.) Since the Fourier transform of a Gaussian is another Gaussian, applying a Gaussian blur has the effect of low pass filtering the image.

Contents

[edit] Mechanics

The Gaussian blur is a type of image-blurring filter that uses a normal distribution (also called "Gaussian distribution", thus the name "Gaussian blur") for calculating the transformation to apply to each pixel in the image. The equation of Gaussian distribution in N dimensions is

G(r) = \frac{1}{2\pi \sigma^ N} e^{-r^2/(2 \sigma^N)}

or specifically in two dimensions

G(u,v) = \frac{1}{2\pi \sigma^2} e^{-(u^2 + v^2)/(2 \sigma^2)}

where r is the blur radius (r2 = u2 + v2), and σ is the standard deviation of the Gaussian distribution. When applied in two dimensions, this formula produces a surface whose contours are concentric circles with a Gaussian distribution from the center point. Pixels where this distribution is non-zero are used to build a convolution matrix, which is applied to the original image. Each pixel's value is set to a weighted average of that pixel's neighborhood. The original pixel's value receives the heaviest weight (having the highest Gaussian value), and neighboring pixels receive smaller weights as their distance to the original pixel increases. This results in a blur that preserves boundaries and edges better than other, more uniform blurring filters; see also scale-space implementation.

In theory, the distribution at every point on the image will be non-zero, meaning that the entire image would need to be included in the calculations for each pixel. In practice, when computing a discrete approximation of the Gaussian function, pixels outside of approximately 3σ are small enough to be considered effectively zero. Thus, pixels outside of that range can be ignored. Typically, an imaging program need only calculate a matrix with dimensions (6 \sigma + 1) \times (6 \sigma + 1) to ensure all relevant pixels are accounted for.

In addition to being circularly symmetric, the Gaussian Blur can be applied to a two-dimensional image as two independent one-dimensional calculations, and so is termed Linearly Separable. That is, the effect of applying the two-dimensional matrix can also be achieved by applying a series of single-dimensional Gaussian matrices in the horizontal direction, then repeating the process in the vertical direction. In computational terms, this is a useful property, since the calculation can be performed in O(n \times M \times N) + O(m \times M \times N) time, as opposed to O(m \times n \times M \times N) for a non-separable kernel, where M,N are the dimensions of the image being filtered and m, n are the dimensions of the filter kernel.

Applying multiple, successive gaussian blurs to an image has the same effect as applying a single, larger gaussian blur, whose radius is the square root of the sum of the squares of the blur radii that were actually applied. For example, applying successive gaussian blurs with radii of 6 and 8 gives the same results as applying a single gaussian blur of radius 10, since \sqrt{6\times6 + 8\times8} = 10. Because of this relationship, processing time cannot be saved by simulating a gaussian blur with successive, smaller blurs — the time required will be at least as great as performing the single large blur.

Gaussian blurring is commonly used when reducing the size of an image. When downsampling an image, it is common to apply a low-pass filter to the image prior to resampling. This is to ensure that spurious high-frequency information does not appear in the downsampled image (aliasing). Gaussian blurs have nice properties, such as having no sharp edges, and thus do not introduce ringing into the filtered image.

[edit] Sample Gaussian matrix

This is a sample matrix, produced by calculating the Gaussian distribution for σ = 0.84089642. Note that the center element (at [4, 4]) has the largest value, decreasing symmetrically as distance from the center increases.

0.00000067 0.00002292 0.00019117 0.00038771 0.00019117 0.00002292 0.00000067
0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.00002292
0.00019117 0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117
0.00038771 0.01330373 0.11098164 0.22508352 0.11098164 0.01330373 0.00038771
0.00019117 0.00655965 0.05472157 0.11098164 0.05472157 0.00655965 0.00019117
0.00002292 0.00078633 0.00655965 0.01330373 0.00655965 0.00078633 0.00002292
0.00000067 0.00002292 0.00019117 0.00038771 0.00019117 0.00002292 0.00000067

Note that 0.22508352 (the central one) is 1177 times larger than 0.00019117 which is just outside 3σ.

[edit] Example

The following example shows the effect of a Gaussian blur; Image 2 was created by applying a Gaussian blur filter (σ = 2) to Image 1.

[edit] See also

[edit] References

In other languages