r.clump(1)

✨ NAME ✨

okay so this is r.clump(1) from the GRASS GIS User's Manual β€” it recategorizes data in a raster map by grouping cells that form physically discrete areas into unique categories. πŸ’–


🏷️ KEYWORDS 🏷️

raster, statistics, reclass, clumps


πŸ“œ SYNOPSIS πŸ“œ

r.clump
r.clump --help
r.clump [-dg] input=name[,name,...]  [output=name]   [title=string]
[threshold=float]   [minsize=integer]   [--overwrite]  [--help]
[--verbose]  [--quiet]  [--ui]

🚩 Flags 🚩

  • -d β€” Clump also diagonal cells. Clumps are also traced along diagonal neighboring cells πŸ¦‹
  • -g β€” Print only the number of clumps in shell script style πŸ“Š
  • --overwrite β€” Allow output files to overwrite existing files 😳
  • --help β€” Print usage summary
  • --verbose β€” Verbose module output
  • --quiet β€” Quiet module output
  • --ui β€” Force launching GUI dialog ✨

πŸŽ›οΈ Parameters πŸŽ›οΈ

  • input=name[,name,...] [required] β€” Name of input raster map(s)
  • output=name β€” Name for output raster map
  • title=string β€” Title for output raster map
  • threshold=float β€” Threshold to identify similar cells. Valid range: 0 = identical to < 1 = maximal difference. Default: 0
  • minsize=integer β€” Minimum clump size in cells. Clumps smaller than minsize will be merged to form larger clumps. Default: 1

πŸ’– DESCRIPTION πŸ’–

r.clump finds all areas of contiguous cell category values (aka connected components, no cap) in the input raster map. NULL values in the input are ignored, periodt. It assigns a unique category value to each such area (a "clump") in the resulting output raster map. 🫢

Category distinctions in the input raster map are preserved. This means that if distinct category values are adjacent, they will NOT be clumped together β€” not me catching them being all independent πŸ’…. The user can run r.reclass prior to r.clump to recategorize cells and reassign cell category values.

r.clump can also perform "fuzzy" clumping, where neighboring cells that are not identical but similar to each other are clumped together. Here's the vibe: the spectral distance between two cells is scaled to the range [0, 1] and compared to the threshold value. Cells are clumped together if their spectral distance is ≀ threshold. The result is very sensitive to this threshold value β€” a recommended start value is 0.01, then increasing or decreasing this value according to the desired output. Once a suitable threshold has been determined, noise can be reduced by merging small clumps with the minsize option. πŸ”₯

r.clump can also use multiple raster maps of any kind (CELL, FCELL, DCELL) as input. In this case, the spectral distance between cells is used to determine the similarity of two cells. This means that input maps must be metric: the difference cell 1 - cell 2 must make sense. Categorical maps, e.g. land cover, can not be used in this case β€” it's giving invalid math bestie 😭. Examples for valid input maps are satellite imagery, vegetation indices, elevation, climatic parameters etc. πŸ›°οΈ


πŸ“ NOTES πŸ“

By default, the resulting clumps are connected only by their four direct neighbors (left, right, top, bottom). The -d flag activates also diagonal clump tracing. πŸ‘‘

r.clump works properly with raster map that contains only "fat" areas (more than a single cell in width). Linear elements (lines that are a single cell wide) may or may not be clumped together depending on the direction of the line β€” horizontal and vertical lines of cells are considered to be contiguous, but diagonal lines of cells are not considered to be contiguous and are broken up into separate clumps unless the -d flag is used. ⚠️

A random color table and other support files are generated for the output raster map. 🌈


πŸ§ͺ EXAMPLES πŸ§ͺ

πŸ¦‹ Clumping of a raster map πŸ¦‹

Perform clumping on "lakes" map (North Carolina sample dataset) and report area sizes for each lake individually rather by waterbody type:

g.region raster=lakes -p
# report sizes by waterbody type
r.report lakes units=h
# clump per raster polygon
r.clump lakes out=lakes_individual
# report sizes by individual waterbody
r.report lakes_individual units=h
Figure: Clumping of rasterized lakes: original lakes map (left) and clumped lakes map (right)

🌸 Fuzzy clumping on Landsat bands 🌸

Perform fuzzy clumping on Landsat 7 2002 imagery (North Carolina sample dataset):

g.region raster=lsat7_2002_10 -p
r.clump in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70 \
        out=lsat7_2002_clump threshold=0.045
# reduce noise
r.clump in=lsat7_2002_10,lsat7_2002_20,lsat7_2002_30,lsat7_2002_40,lsat7_2002_50,lsat7_2002_70 \
        out=lsat7_2002_clump_min10 threshold=0.045 minsize=10
Figure: Fuzzy clumping on Landsat bands: original RGB composite (left), fuzzy clumped map (middle), and fuzzy clumped with minsize map (right)

πŸ‘€ SEE ALSO πŸ‘€

r.buffer, r.distance, r.grow, r.mapcalc, r.mfilter, r.neighbors, r.to.vect, r.reclass, r.statistics, r.support


πŸ‘‘ AUTHORS πŸ‘‘

  • Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
  • Markus Metz (diagonal clump tracing, fuzzy clumping)

πŸ“¦ SOURCE CODE πŸ“¦

Available at: r.clump source code (history)

Accessed: Saturday Jan 17 05:40:44 2026

Main index | Raster index | Topics index | Keywords index | Graphical index | Full index


okay that's the whole page bestie, you ate πŸ’…βœ¨

This was GRASS GIS 8.4.2 Reference Manual, Β© 2003-2025 GRASS Development Team β€” and the footer tag says GRASS 8.4.2 up in the corner, iykyk πŸŽ€. Go clump something iconic πŸ¦‹πŸ’–πŸŒΈ

πŸ“¦ where this page comes from