Image Processing Toolbox |

Measure properties of image regions

**Syntax**

**Description**

`STATS = `

regionprops`(L,`

*properties*`)`

measures a set of properties for each labeled region in the label matrix `L`

. Positive integer elements of `L`

correspond to different regions. For example, the set of elements of `L`

equal to `1`

corresponds to region `1`

; the set of elements of `L`

equal to `2`

corresponds to region `2`

; and so on. The return value, `STATS`

, is a structure array of length `max(L(:))`

. The fields of the structure array denote different measurements for each region, as specified by

.*properties*

can be a comma-separated list of strings, a cell array containing strings, the single string *properties*`'all'`

, or the string `'basic'`

. This table lists the set of valid property strings. Property strings are case insensitive and can be abbreviated.

`'` Area`'` |
`'` EquivDiameter`'` |
`'` MajorAxisLength`'` |

`'` BoundingBox`'` |
`'` EulerNumber`'` |
`'` MinorAxisLength`'` |

`'` Centroid`'` |
`'` Extent`'` |
`'` Orientation`'` |

`'` ConvexArea`'` |
`'` Extrema`'` |
`'PixelIdxList'` |

`'` ConvexHull`'` |
`'` FilledArea`'` |
`'` PixelList`'` |

`'` ConvexImage`'` |
`'` FilledImage`'` |
`'` Solidity`'` |

`'` Eccentricity`'` |
`'` Image`'` |
`'SubarrayIdx'` |

If

is the string *properties*`'all'`

, then all of the above measurements are computed. If

is not specified or if it is the string *properties*`'basic'`

, then these measurements are computed: `'Area'`

, `'Centroid'`

, and `'BoundingBox'`

.

**Definitions**

`'Area'`

- Scalar; the actual number of pixels in the region. (This value may differ slightly from the value returned by `bwarea`

, which weights different patterns of pixels differently.)

`'Centroid'`

- 1-by-`ndims(L)`

vector; the center of mass of the region. Note that the first element of `Centroid`

is the horizontal coordinate (or *x*-coordinate) of the center of mass, and the second element is the vertical coordinate (or *y*-coordinate). All other elements of `Centroid`

are in order of dimension.

`'BoundingBox'`

- 1-by-`ndims(L)*2`

vector; the smallest rectangle containing the region. `BoundingBox`

is `[ul_corner width]`

, where

This figure illustrates the centroid and bounding box. The region consists of the white pixels; the green box is the bounding box, and the red dot is the centroid.

`'MajorAxisLength'`

- Scalar; the length (in pixels) of the major axis of the ellipse that has the same second-moments as the region. This property is supported only for 2-D input label matrices.

`'MinorAxisLength'`

- Scalar; the length (in pixels) of the minor axis of the ellipse that has the same second-moments as the region. This property is supported only for 2-D input label matrices.

`'Eccentricity'`

- Scalar; the eccentricity of the ellipse that has the same second-moments as the region. The eccentricity is the ratio of the distance between the foci of the ellipse and its major axis length. The value is between 0 and 1. (0 and 1 are degenerate cases; an ellipse whose eccentricity is 0 is actually a circle, while an ellipse whose eccentricity is 1 is a line segment.) This property is supported only for 2-D input label matrices.

`'Orientation'`

- Scalar; the angle (in degrees) between the *x*-axis and the major axis of the ellipse that has the same second-moments as the region. This property is supported only for 2-D input label matrices.

This figure illustrates the axes and orientation of the ellipse. The left side of the figure shows an image region and its corresponding ellipse. The right side shows the same ellipse, with features indicated graphically; the solid blue lines are the axes, the red dots are the foci, and the orientation is the angle between the horizontal dotted line and the major axis

.

`'Image'`

- Binary image (`logical`

) of the same size as the bounding box of the region; the `on`

pixels correspond to the region, and all other pixels are `off`

.

`'FilledImage'`

- Binary image (`logical`

) of the same size as the bounding box of the region. The `on`

pixels correspond to the region, with all holes filled in.

`'FilledArea'`

- Scalar; the number of `on`

pixels in `FilledImage`

.

This figure illustrates ``Image'`

and ``FilledImage'`

.

`'ConvexHull'`

- p-by-2 matrix; the smallest convex polygon that can contain the region. Each row of the matrix contains the *x*- and *y*-coordinates of one vertex of the polygon. This property is supported only for 2-D input label matrices.

`'ConvexImage'`

- Binary image (`logical`

); the convex hull, with all pixels within the hull filled in (i.e., set to `on`

). (For pixels that the boundary of the hull passes through, `regionprops`

uses the same logic as `roipoly`

to determine whether the pixel is inside or outside the hull.) The image is the size of the bounding box of the region. This property is supported only for 2-D input label matrices.

`'ConvexArea'`

- Scalar; the number of pixels in `'ConvexImage'`

. This property is supported only for 2-D input label matrices.

`'EulerNumber'`

- Scalar; equal to the number of objects in the region minus the number of holes in those objects. This property is supported only for 2-D input label matrices.

`'Extrema'`

- 8-by-2 matrix; the extremal points in the region. Each row of the matrix contains the *x*- and *y*-coordinates of one of the points. The format of the vector is `[top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]`

. This property is supported only for 2-D input label matrices.

This figure illustrates the extrema of two different regions. In the region on the left, each extremal point is distinct; in the region on the right, certain extremal points (e.g., `top-left`

and `left-top`

) are identical.

`'EquivDiameter'`

- Scalar; the diameter of a circle with the same area as the region. Computed as `sqrt(4*Area/pi)`

. This property is supported only for 2-D input label matrices.

`'Solidity'`

- Scalar; the proportion of the pixels in the convex hull that are also in the region. Computed as `Area/ConvexArea`

. This property is supported only for 2-D input label matrices.

`'Extent'`

- Scalar; the proportion of the pixels in the bounding box that are also in the region. Computed as the `Area`

divided by area of the bounding box. This property is supported only for 2-D input label matrices.

`'PixelList'`

- p-by-`ndims(L)`

matrix; the actual pixels in the region. Each row of the matrix has the form `[x y z ...]`

and specifies the coordinates of one pixel in the region.

**Class Support**

The input label matrix `L`

can have any numeric class.

**Remarks**

The comma-separated list syntax for structure arrays is very useful when working with the output of `regionprops`

. For example, for a field that contains a scalar, you can use a this syntax to create a vector containing the value of this field for each region in the image.

For instance, if `stats`

is a structure array with field `Area`

, then the following two expressions are equivalent

Therefore, you can use these calls to create a vector containing the area of each region in the image.

`allArea`

is a vector of the same length as the structure array `stats`

.

The function `ismember `

is useful in conjunction with regionprops for selecting regions based on certain criteria. For example, these commands create a binary image containing only the regions in `text.tif`

whose area is greater than 80.

Most of the measurements take very little time to compute. The exceptions are these, which may take significantly longer, depending on the number of regions in `L`

:

Note that computing certain groups of measurements takes about the same amount of time as computing just one of them because regionprops takes advantage of intermediate computations used in both computations. Therefore, it is fastest to compute all of the desired measurements in a single call to regionprops.

**Example**

BW = imread('text.tif'); L = bwlabel(BW); stats = regionprops(L,'all'); stats(23) ans = Area: 89 Centroid: [95.6742 192.9775] BoundingBox: [87.5000 184.5000 16 15] MajorAxisLength: 19.9127 MinorAxisLength: 14.2953 Eccentricity: 0.6961 Orientation: 9.0845 ConvexHull: [28x2 double] ConvexImage: [15x16 uint8 ] ConvexArea: 205 Image: [15x16 uint8 ] FilledImage: [15x16 uint8 ] FilledArea: 122 EulerNumber: 0 Extrema: [ 8x2 double] EquivDiameter: 10.6451 Solidity: 0.4341 Extent: 0.3708 PixelList: [89x2 double]

**See Also**

`bwlabel`

, `bwlabeln`

, `ismember`

, `watershed`

reflect | rgb2gray |