Image Processing Toolbox User's Guide |
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
.
properties
can be a comma-separated list of strings, a cell array containing strings, the single string 'all'
, or the string 'basic'
. This table lists the set of valid property strings. Property strings are case insensitive and can be abbreviated.
' Area' |
' EulerNumber' |
' Orientation' |
' BoundingBox' |
' Extent' |
'Perimeter' |
' Centroid' |
' Extrema' |
'PixelIdxList' |
' ConvexArea' |
' FilledArea' |
' PixelList' |
' ConvexHull' |
' FilledImage' |
' Solidity' |
' ConvexImage' |
' Image' |
'SubarrayIdx' |
' Eccentricity' |
' MajorAxisLength' |
|
' EquivDiameter' |
' MinorAxisLength' |
|
If properties
is the string 'all'
, then all the preceding measurements are computed. If properties
is not specified or if it is the string 'basic'
, then these measurements are computed: 'Area'
, 'Centroid'
, and 'BoundingBox'
.
Definitions
'Area'
-- Scalar; the actual number of pixels in the region. (This value might differ slightly from the value returned by bwarea
, which weights different patterns of pixels differently.)
'BoundingBox'
-- 1-by-ndims(L)*2
vector; the smallest rectangle containing the region. BoundingBox
is [ul_corner width]
, where
'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.
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.
'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.
'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.
'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.
'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.
'Extent'
-- Scalar; the proportion of the pixels in the bounding box that are also in the region. Computed as the Area
divided by the area of the bounding box. This property is supported only for 2-D input label matrices.
'Extrema'
-- 8-by-2 matrix; the extrema 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 extrema point is distinct; in the region on the right, certain extrema points (e.g., top-left
and left-top
) are identical.
'FilledArea'
-- Scalar; the number of on
pixels in FilledImage
.
'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.
'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
.
'MajorAxisLength'
-- Scalar; the length (in pixels) of the major axis of the ellipse that has the same normalized second central 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 normalized second central moments as the region. 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.
'perimeter'
-- p-element vector containing the total number of pixels around the boundary of each region in the image, where p is the number of regions. The following figure shows the pixels included in the perimeter calculation for this object. The regions must be contiguous. If the image contains discontiguous regions, perimeter
returns unexpected results.
'PixelIdxList'
-- p-element vector containing the linear indices of the pixels in the region.
'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.
'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.
Class Support
The input label matrix L
can have any numeric class.
Using the Comma-Separated List Syntax
The comma-separated list syntax for structure arrays is very useful when you work with the output of regionprops
. For example, for a field that contains a scalar, you can use 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
.
Selecting Regions Based on Certain Criteria
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 whose area is greater than 80.
Performance Considerations
Most of the measurements take very little time to compute. The exceptions are these, which can 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 the desired measurements in a single call to regionprops.
Converting a Binary Image into a Label Matrix
You must convert a binary image into a label matrix before calling regionprops
. There are two common ways to convert a binary image into a label matrix:
Note, however, that these functions produce different but equally valid label matrices from the same binary image.
For example, given the following logical matrix, BW
,
bwlabel
creates a label matrix containing two contiguous regions labeled by the integer values 1
and 2
.
The double
function creates a label matrix containing one discontiguous region labeled by the integer value 1
.
Because each result is legitimately desirable in certain situations, regionprops
does not attempt to perform either type of conversion on binary images and instead requires that you convert them using either method.
Example
This example computes the centroids of all the labelled regions in an image and then superimposes a plot of the centroids over the original image.
bw = imread('text.png'); L = bwlabel(bw); s = regionprops(L, 'centroid'); centroids = cat(1, s.Centroid); imshow(bw) hold on plot(centroids(:,1), centroids(:,2), 'b*') hold off
See Also
bwlabel
, bwlabeln
, ismember
, watershed
reflect | rgb2gray |
© 1994-2005 The MathWorks, Inc.