# Gabor filter

This article may be too technical for most readers to understand. Please help improve it to make it understandable to non-experts, without removing the technical details. (February 2017) (Learn how and when to remove this template message) |

In image processing, a **Gabor filter**, named after Dennis Gabor, is a linear filter used for texture analysis, which means that it basically analyzes whether there are any specific frequency content in the image in specific directions in a localized region around the point or region of analysis. Frequency and orientation representations of Gabor filters are claimed by many contemporary vision scientists to be similar to those of the human visual system, though there is no empirical evidence and no functional rationale to support the idea. They have been found to be particularly appropriate for texture representation and discrimination. In the spatial domain, a 2D Gabor filter is a Gaussian kernel function modulated by a sinusoidal plane wave.

Some authors claim that simple cells in the visual cortex of mammalian brains can be modeled by Gabor functions.^{[1]}^{[2]} Thus, image analysis with Gabor filters is thought by some to be similar to perception in the human visual system.

## Contents

## Definition[edit]

This section's factual accuracy is disputed. (February 2013) (Learn how and when to remove this template message) |

Its impulse response is defined by a sinusoidal wave (a plane wave for 2D Gabor filters) multiplied by a Gaussian function.^{[3]}
Because of the multiplication-convolution property (Convolution theorem), the Fourier transform of a Gabor filter's impulse response is the convolution of the Fourier transform of the harmonic function (sinusoidal function) and the Fourier transform of the Gaussian function. The filter has a real and an imaginary component representing orthogonal directions.^{[4]} The two components may be formed into a complex number or used individually.

Complex

Real

Imaginary

where

and

In this equation, represents the wavelength of the sinusoidal factor, represents the orientation of the normal to the parallel stripes of a Gabor function, is the phase offset, is the sigma/standard deviation of the Gaussian envelope and is the spatial aspect ratio, and specifies the ellipticity of the support of the Gabor function.

## Wavelet space[edit]

Gabor filters are directly related to Gabor wavelets, since they can be designed for a number of dilations and rotations. However, in general, expansion is not applied for Gabor wavelets, since this requires computation of bi-orthogonal wavelets, which may be very time-consuming. Therefore, usually, a filter bank consisting of Gabor filters with various scales and rotations is created. The filters are convolved with the signal, resulting in a so-called Gabor space. This process is closely related to processes in the primary visual cortex.^{[5]}
Jones and Palmer showed that the real part of the complex Gabor function is a good fit to the receptive field weight functions found in simple cells in a cat's striate cortex.^{[6]}

## Extraction of features from images[edit]

A set of Gabor filters with different frequencies and orientations may be helpful for extracting useful features from an image.^{[7]} In the discrete domain, two-dimensional Gabor filters are given by,

where B and C are normalizing factors to be determined.
2-D Gabor filters have rich applications in image processing, especially in feature extraction for texture analysis and segmentation.^{[8]} defines the frequency being looked for in the texture. By varying , we can look for texture oriented in a particular direction. By varying , we change the support of the basis or the size of the image region being analyzed.

## Applications of 2-D Gabor filters in image processing[edit]

In document image processing, Gabor features are ideal for identifying the script of a word in a multilingual document.^{[9]} Gabor filters with different frequencies and with orientations in different directions have been used to localize and extract text-only regions from complex document images (both gray and colour), since text is rich in high frequency components, whereas pictures are relatively smooth in nature.^{[10]}^{[11]}^{[12]} It has also been applied for facial expression recognition ^{[13]}
Gabor filters have also been widely used in pattern analysis applications. For example, it has been used to study the directionality distribution inside the porous spongy trabecular bone in the spine.^{[14]} The Gabor space is very useful in image processing applications such as optical character recognition, iris recognition and fingerprint recognition. Relations between activations for a specific spatial location are very distinctive between objects in an image. Furthermore, important activations can be extracted from the Gabor space in order to create a sparse object representation.

## Example implementations[edit]

(Code for Gabor feature extraction from images in MATLAB can be found at http://www.mathworks.com/matlabcentral/fileexchange/44630.)

This is an example implementation in Python:

```
import numpy as np
def gabor_fn(sigma, theta, Lambda, psi, gamma):
sigma_x = sigma
sigma_y = float(sigma) / gamma
# Bounding box
nstds = 3 # Number of standard deviation sigma
xmax = max(abs(nstds * sigma_x * np.cos(theta)), abs(nstds * sigma_y * np.sin(theta)))
xmax = np.ceil(max(1, xmax))
ymax = max(abs(nstds * sigma_x * np.sin(theta)), abs(nstds * sigma_y * np.cos(theta)))
ymax = np.ceil(max(1, ymax))
xmin = -xmax
ymin = -ymax
(y, x) = np.meshgrid(np.arange(ymin, ymax + 1), np.arange(xmin, xmax + 1))
# Rotation
x_theta = x * np.cos(theta) + y * np.sin(theta)
y_theta = -x * np.sin(theta) + y * np.cos(theta)
gb = np.exp(-.5 * (x_theta ** 2 / sigma_x ** 2 + y_theta ** 2 / sigma_y ** 2)) * np.cos(2 * np.pi / Lambda * x_theta + psi)
return gb
```

For an implementation on images, see [1].

This is an example implementation in MATLAB/Octave:

```
function gb=gabor_fn(sigma,theta,lambda,psi,gamma)
sigma_x = sigma;
sigma_y = sigma/gamma;
% Bounding box
nstds = 3;
xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
xmax = ceil(max(1,xmax));
ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
ymax = ceil(max(1,ymax));
xmin = -xmax; ymin = -ymax;
[x,y] = meshgrid(xmin:xmax,ymin:ymax);
% Rotation
x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);
gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);
```

This is another example implementation in Haskell:

```
import Data.Complex (Complex((:+)))
gabor λ θ ψ σ γ x y = exp ( (-0.5) * ((x'^2 + γ^2*y'^2) / (σ^2)) :+ 0) * exp ( 0 :+ (2*pi*x'/λ+ψ) )
where x' = x * cos θ + y * sin θ
y' = -x * sin θ + y * cos θ
```

(Note: `a :+ b`

should be read as )

## See also[edit]

## References[edit]

**^**Marčelja, S. (1980). "Mathematical description of the responses of simple cortical cells".*Journal of the Optical Society of America*.**70**(11): 1297–1300. doi:10.1364/JOSA.70.001297.**^**J. G. Daugman. Uncertainty relation for resolution in space, spatial frequency, and orientation optimized by two-dimensional visual cortical filters.*Journal of the Optical Society of America A*, 2(7):1160–1169, July 1985.**^**Fogel, I.; Sagi, D. (1989). "Gabor filters as texture discriminator".*Biological Cybernetics*.**61**(2). doi:10.1007/BF00204594. ISSN 0340-1200.**^**3D surface tracking and approximation using Gabor filters, Jesper Juul Henriksen, South Denmark University, March 28, 2007**^**Daugman, J.G. (1980), "Two-dimensional spectral analysis of cortical receptive field profiles",*Vision Res.*,**20**(10): 847–56, doi:10.1016/0042-6989(80)90065-6, PMID 7467139**^**Jones, J.P.; Palmer, L.A. (1987). "An evaluation of the two-dimensional gabor filter model of simple receptive fields in cat striate cortex".*J. Neurophysiol*.**58**(6): 1233–1258.**^**Haghighat, M.; Zonouz, S.; Abdel-Mottaleb, M. (2013). "Identification Using Encrypted Biometrics".*Computer Analysis of Images and Patterns*. Lecture Notes in Computer Science.**8048**. p. 440. doi:10.1007/978-3-642-40246-3_55. ISBN 978-3-642-40245-6.**^**A.G. Ramakrishnan, S. Kumar Raja and H.V. Raghu Ram, “Neural network-based segmentation of textures using Gabor features,”*Proc. 12th IEEE Workshop on Neural Networks for Signal Processing*, pp. 365 - 374, 2002.**^**Peeta Basa Pati and A. G. Ramakrishnan, “Word Level Multi-script Identification,”*Pattern Recognition Letters*, Vol. 29, pp. 1218-1229, 2008.**^**S Sabari Raju, Peeta Basa Pati and A G Ramakrishnan, “Gabor Filter Based Block Energy Analysis for Text extraction from Digital Document Images,”*Proc. First International Workshop on Document Image Analysis for Libraries (DIAL-04)*, Palo Alto, USA, Jan. 2004, pp. 233-243.**^**Farshad Nourbakhsh, P.B.Pati and A.G.Ramakrishnan, “Text Localization and Extraction from Complex Gray Images,”*Proc. Indian Conf. Vision, Graphics Image Processing, ICVGIP 2006*, Dec. 13-16, 2006, pp. 776-785.**^**S Sabari Raju, P B Pati and A G Ramakrishnan, “Text Localization and Extraction from Complex Color Images,”*Proc. First International Conference on Advances in Visual Computing (ISVC05)*, Nevada, USA, LNCS 3804, Springer Verlag, Dec. 5-7, 2005, pp. 486-493.**^**M. Lyons, S. Akamatsu, M. Kamachi, and J. Gyoba, "Coding Facial Expressions with Gabor Wavelets," Proc. Third IEEE Conference on Automatic Face and Gesture Recognition (FG'98), Nara, Japan, Apr. 14-16, 1998, pp. 200-205.**^**Gdyczynski, C.M.; Manbachi, A.; et al. (2014). "On estimating the directionality distribution in pedicle trabecular bone from micro-CT images".*Journal of Physiological Measurements*.**35**(12): 2415–2428. doi:10.1088/0967-3334/35/12/2415.

## External links[edit]

- MATLAB code for Gabor filters and Gabor feature extraction
- 3D Gabor demonstrated with Mathematica
- python implementation of log-Gabors for still images
- Gabor filter for image processing and computer vision (demonstration)

## Further reading[edit]

- Hans G. Feichtinger, Thomas Strohmer: "Gabor Analysis and Algorithms", Birkhäuser, 1998; ISBN 0-8176-3959-4
- Karlheinz Gröchenig: "Foundations of Time-Frequency Analysis", Birkhäuser, 2001; ISBN 0-8176-4022-3
- John Daugman: "Complete Discrete 2-D Gabor Transforms by Neural Networks for Image Analysis and Compression", IEEE Trans on Acoustics, Speech, and Signal Processing. Vol. 36. No. 7. July 1988, pp. 1169–1179
- "Online Gabor filter demo". Retrieved 2009-05-25.
- Movellan, Javier R. "Tutorial on Gabor Filters" (PDF). Archived from the original (PDF) on 2009-04-19. Retrieved 2008-05-14.
- "Procedural Noise using Sparse Gabor Convolution". Retrieved 2009-09-12.
- Steerable Pyramids:
- Eero Simoncelli's page on Steerable Pyramids
- R. Manduchi, P. Perona and D. Shy. Efficient Deformable Filter Banks (PDF) (Code)

- Fischer, S., Sroubek, F., Perrinet, L., Redondo, R. and Cristóbal, G., (2007). "Self invertible Gabor wavelets".
*International Journal of Computer Vision*.**75**: 231–246. doi:10.1007/s11263-006-0026-8. Retrieved 2014-10-29.CS1 maint: Multiple names: authors list (link)