Region
Description
A region is a set of pixel locations, or an optimized representation of a binary image.
Technically, a region is defined by its FrameWidth, FrameHeight and a run-length encoded list of (x, y) of type Location.
Regions are typically used to identify sets of pixels corresponding to some objects within an image. This information can be used for high-level information retrieval (so called Region Analysis) or as a parameter of some further image processing operations constrained to this particular set of pixels.
Remarks
- Connected components within regions are called blobs.
- Most of image processing operations have an optional inRoi (Region of Interest) input.
- Regions can be automatically converted to images without any loss of information.
- Maximum region frame dimensions are 65535 x 65535.
Requirements
- Technically, the compressed representation of a region is a list of so called point-runs. A point-run consist of three 16-bit unsigned integers: X, Y and Length, and represents a horizontal sequence of consecutive pixel locations.
- Point-runs in a region must be sorted by Y and X coordinates (in this order), and must be guaranteed not to overlap and not to exceed the region frame dimensions (0..FrameWidth-1, 0..FrameHeight-1).
- It is also not allowed to create a region with two point-runs that could be merged into a single one.
Excerpt from class defining a single PointRun in Region
// Single horizontal sequence of pixel locations class PointRun { public: uint16 x, y; // PointRun begin location uint16 length; Location Begin() const; Location End() const; int Length() const; int X() const; int Y() const; };
Excerpt from Region class listing:
// Compressed binary mask. class Region : public RegionFrame, public Array< PointRun > { public: int FrameWidth() const; int FrameHeight() const; Box Frame() const; int Size() const; void Reserve( int newCapacity ); PointRun* Begin(); PointRun* End(); const PointRun* Begin() const; const PointRun* End() const; PointRun Run ( int k ) const; Location Begin ( int k ) const; Location End ( int k ) const; int Length( int k ) const; void SetFrameWidth ( int frameWidth_ ); void SetFrameHeight( int frameHeight_ ); void SetFrame( int frameWidth_, int frameHeight_ ); void Add( const PointRun& pr ); void Add( int x, int y, int len ); void Add( const Location& begin, int len ); };
Methods:
void Add( const PointRun& pr )
- adds specified PointRun to Region without additional sorting and location checking.void Add( int x, int y, int len )
- adds new PointRun created from x, y and len to Region without additional sorting and location checking. All parameter values must be from [0, 65535] interval.void Add( const Location& begin, int len )
- creation and adding of new a PointRun using its Location and length to Region without additional sorting and location checking.SetFrameWidth, SetFrameHeight, SetFrame
- changing Region's frame without invalidating internal PointRuns.