---
kind: concept
slug: texture-analysis
title: Texture analysis and classification
summary: >-
  Describes an image region by its texture so that a classifier can tell texture classes apart. Descriptor families are statistical, structural, model-based and transform-based, and combined methods stack them. The one cited source is a 2019 survey with no experiments of its own, so its accuracy numbers come from other papers and cannot be ranked.
tags: [computer-vision, texture, feature-extraction]
papers: ["1904.06554"]
related: [local-binary-patterns, gray-level-co-occurrence-matrix, wavelet-transform]
status: draft
updated_at: 2026-10-19
---

## Overview

Texture classification assigns an unseen image to one of a set of known
texture classes. The usual pipeline extracts a descriptor from labelled
training images, stores the features, and labels a new image with a
classifier fed by the same descriptor [arxiv:1904.06554 §I.B, fig. 3].
Accuracy is the share of test images labelled correctly [arxiv:1904.06554
§I.B.2, eq. 1].

The hard part is that the same texture can look different. The review names
rotation and noise as the two main challenges. Scale, viewpoint and light
intensity also vary, and it says accuracy can drop sharply unless the
descriptor is robust to these changes [arxiv:1904.06554 §I.A, p. 3]. Typical
applications include face detection, object tracking, product quality
checks, medical image analysis, remote sensing and vegetation studies
[arxiv:1904.06554 §I.C, p. 4].

The review does not propose a method. It sorts the existing descriptors into
four families, then describes some of them in detail
[arxiv:1904.06554 §II, tab. 1]. Each family has its own page below.

## Variants

### Statistical descriptors

These count grey-level values or their arrangement. Histogram moments (mean,
variance, skewness, entropy) describe the brightness distribution and ignore
pixel positions [arxiv:1904.06554 §II.A, eq. 2] to [arxiv:1904.06554 eq. 6].
The co-occurrence matrix counts how often two grey levels sit at a fixed
offset [arxiv:1904.06554 §II.A.2]. See [Gray-level co-occurrence
matrix](/concepts/gray-level-co-occurrence-matrix). Local binary patterns
encode each pixel by comparing it with its neighbours on a circle
[arxiv:1904.06554 §II.A.3]. See [Local binary patterns](/concepts/local-binary-patterns).
The review also lists registration-based methods and Laws texture energy,
without formulas [arxiv:1904.06554 §II.A].

### Structural descriptors

These describe texture as repeated primitives and their placement. The
review lists primitive measurement, edge features, skeletons and
morphological operations [arxiv:1904.06554 §II.B]. Edge features come from
operators such as Sobel and Prewitt [arxiv:1904.06554 §II.B.1]. SIFT is
described in detail: a difference-of-Gaussian search for keypoints, then a
128-value vector from a 4×4 grid of histograms with 8 orientation bins each
[arxiv:1904.06554 §II.B.2, fig. 10] to [arxiv:1904.06554 fig. 12].

### Model-based descriptors

These fit a generative model of the texture. The review lists autoregressive,
Markov random field, Gibbs, hidden Markov, fractal and Texem models, but
details only the fractal case [arxiv:1904.06554 §II.C]. A self-similar set of
N copies, each scaled by r, has fractal dimension D = log N / log(1/r)
[arxiv:1904.06554 §II.C.1, eq. 18]. The review does not say how D is
estimated from an image.

### Transform-based descriptors

These measure energy in a transformed domain. Spectral methods read peaks in
the Fourier spectrum in polar coordinates. The radius limit is R0 =
round(min(m, n)/2) - 1, and the spectrum is summed over angle and radius
[arxiv:1904.06554 §II.D.1, eq. 19] to [arxiv:1904.06554 eq. 21]. Gabor filters
are a Gaussian envelope times a sinusoid, rotated by an angle θ
[arxiv:1904.06554 §II.D.2, eq. 25]. The review says a Gabor filter bank can
match orientation and frequency, but gives no values for its parameters
[arxiv:1904.06554 §II.D.2]. Wavelet, curvelet and ridgelet transforms are
listed without formulas [arxiv:1904.06554 §II.D]. See [Wavelet
transform](/concepts/wavelet-transform) for the general idea.

### Combined methods

The review presents several methods that stack descriptors from the families
above [arxiv:1904.06554 §III]:

- **Pyramid GLCM**: five image layers, a GLCM in four directions and 12
  statistics per matrix, giving 48 values. A variant replaces the pyramid by
  Gaussian blurring [arxiv:1904.06554 §III.A, fig. 14].
- **SEGL**: LBP, then a GLCM in 8 directions, then Sobel edges. Seven
  statistics per matrix, 56 values in total [arxiv:1904.06554 §III.B, fig. 15].
- **Energy variation**: the absolute difference between the input's energy and
  the energy of the LBP, GLCM and edge outputs [arxiv:1904.06554 §III.C,
  eq. 27, eq. 28].
- **Binary Gabor pattern**: eight Gabor filters give eight bits per pixel,
  weighted by powers of two and minimised over rotations [arxiv:1904.06554
  §III.D, eq. 29, eq. 30].
- **Local spiking pattern**: binary outputs of a spiking neuron model encoded
  as a feature vector. The review gives no equations [arxiv:1904.06554 §III.E,
  fig. 17].
- **Colour texture from primitive pattern units**: energy, entropy, mean and
  variance per colour channel, concatenated [arxiv:1904.06554 §III.G, eq. 31].
- **SVD and DWT with SVM and particle swarm optimisation**: one DWT level with
  four sub-bands, mean and standard deviation per sub-band, and PSO to select
  features and SVM parameters [arxiv:1904.06554 §III.H, eq. 32] to
  [arxiv:1904.06554 eq. 38].

## When to use which

The review gives no controlled comparison. Its accuracy table collects numbers
from different papers, with different datasets, classifiers and protocols, and
the text does not state the protocol for most rows [arxiv:1904.06554 §VI,
tab. 4]. So the choice below rests on what each descriptor computes, and
the constraints you have. Test the shortlist on your own data.

| Situation | Use | Why |
|---|---|---|
| Orientation of the texture varies | Rotation-invariant LBP [arxiv:1904.06554 eq. 15] | The minimum over circular shifts removes orientation from each code |
| Several scales of the same texture | Pyramid GLCM [arxiv:1904.06554 §III.A] | Five layers, 48 values; the review does not say how layers are combined |
| Orientation and frequency selectivity needed | Gabor filter bank [arxiv:1904.06554 §II.D.2] | The review says the bank matches orientation and frequency; you must set σ, γ, λ, ψ and θ yourself |
| Few values, position ignored is acceptable | Histogram moments [arxiv:1904.06554 eq. 2] to [arxiv:1904.06554 eq. 6] | Brightness statistics only, no spatial layout |
| Edge and local pattern cues together | SEGL [arxiv:1904.06554 §III.B] | Combines LBP, GLCM and edges; 56 values per image |
| Keypoint-based local descriptor | SIFT [arxiv:1904.06554 §II.B.2] | Described step by step; the review gives no texture accuracy for it |
| Need a reliable accuracy ranking | Run your own benchmark | The review's numbers are not comparable across rows [arxiv:1904.06554 §VI, tab. 4] |

Rotation: the review calls almost all methods rotation invariant. This is a
qualitative claim, and the comparison table does not record rotation tests
for every row [arxiv:1904.06554 §VII]. Check rotation with rotated copies of
your own data.

Datasets: the review lists the usual benchmarks, with image counts, classes
and sizes [arxiv:1904.06554 §VI, tab. 2]. These are Brodatz, VisTex, Outex,
CUReT, UIUC, UMD, KTH-TIPS and FMD. Pick a dataset whose conditions match yours,
since the review's results depend on it.

Classifier: the review compares k-nearest neighbour, SVM, Gaussian naive
Bayes, decision trees and multilayer perceptrons [arxiv:1904.06554 §V]. It
states that the best k for k-NN depends on the data [arxiv:1904.06554 §V.A,
fig. 27].

## Implementation sketch

Every method in the review plugs into the same loop: a descriptor turns an
image into a feature vector, and a classifier learns from those vectors. The
descriptor is the only part that changes between variants. The
[LBP](/concepts/local-binary-patterns) and [GLCM](/concepts/gray-level-co-occurrence-matrix)
pages give descriptor code.

```pseudocode
# Texture classification loop  [arxiv:1904.06554 §I.B, fig. 3]
# Input:  labelled training images, a test image, a descriptor function,
#         a classifier with fit and predict methods
# Output: predicted texture class for the test image
def classify_texture(train_images, train_labels, test_image,
                     describe, classifier):
    # training: same descriptor for every labelled image  [§I.B]
    train_features = [describe(img) for img in train_images]
    model = classifier.fit(train_features, train_labels)
    # testing: the same descriptor on the new image  [§I.B]
    return model.predict(describe(test_image))
```

Where variants differ: `describe` is the only part that changes. It can be a
histogram of LBP labels, six GLCM statistics, a Gabor filter-bank response, or
a stack of such outputs as in the combined methods. The review does not give
one normalisation or preprocessing step that applies to all descriptors.

## Contradictions

There is one source on this page, so no conflicts between papers. The review
itself has internal inconsistencies, listed here so that an implementer checks
them against the original papers:

- **Displacement of the co-occurrence matrix.** 1 pixel in the text, 3 pixels
  in the figure [arxiv:1904.06554 §II.A.2, fig. 6]. See the [GLCM
  page](/concepts/gray-level-co-occurrence-matrix).
- **Gabor forms.** Eqs. 22 to 24 and eq. 25 use x' and λ, ψ; eq. 26 uses a
  centre and a frequency pair with a different normalisation. The review does
  not say which one it uses [arxiv:1904.06554 §II.D.2].
- **UIUC image size.** 480×480 in the dataset text [arxiv:1904.06554 §IV.F,
  p. 19], 640×640 in the dataset table [arxiv:1904.06554 tab. 2].
- **Uniform-pattern threshold.** The review calls U_T = P/4 "usual" and cites
  Ojala et al., but the card has not checked that citation
  [arxiv:1904.06554 §II.A.3]. See the [LBP page](/concepts/local-binary-patterns).

## Papers

- [Texture image analysis and texture classification methods - A review](/papers/1904.06554): 2019 survey of texture descriptors and classifiers. Sorts them into four families, details GLCM, LBP, Gabor, fractal and combined methods, and lists the benchmark datasets. It runs no experiments of its own.
