Back to Adaptive Vision Library website

You are here: Start » Function Reference » Image Analysis » MeasureObjectWidth

MeasureObjectWidth


Measures the width of an object using stripe detection.

Header:AVL.h

Syntax

C++
C#
 
void avl::MeasureObjectWidth
(
	const avl::Image& inImage,
	const atl::Array<avl::ScanMap>& inMeasurementMap,
	const avl::StripeScanParams& inStripeScanParams,
	avl::MeasureObjectMethod::Type inMeasureMethod,
	avl::Selection::Type inStripeSelection,
	atl::Optional<const avl::LocalBlindness&> inLocalBlindness,
	atl::Optional<avl::MEstimator::Type> inOutlierSuppression,
	int inOutlierCount,
	atl::Conditional<float>& outObjectWidth,
	atl::Conditional<avl::Segment2D>& outSegment1,
	atl::Conditional<avl::Segment2D>& outSegment2,
	atl::Array<avl::Point2D>& diagPoints1,
	atl::Array<avl::Point2D>& diagPoints2
)

Parameters

Name Type Default Description
inImage const Image& Input image
inMeasurementMap const Array<ScanMap>& Input measurement map
inStripeScanParams const StripeScanParams& Parameters controlling the object stripe extraction process
inMeasureMethod MeasureObjectMethod::Type Method used to measure the object
inStripeSelection Selection::Type Selection::​Best Selection mode of edges of the object
inLocalBlindness Optional<const LocalBlindness&> NIL Defines conditions in which weaker edges can be detected in the vicinity of stronger edges
inOutlierSuppression Optional<MEstimator::Type> NIL Selects a method for ignoring incorrectly detected points
inOutlierCount int Determines how many outlying points are rejected before the width is measured
outObjectWidth Conditional<float>& Width of the object
outSegment1 Conditional<Segment2D>& First edge of the object
outSegment2 Conditional<Segment2D>& Second edge of the object
diagPoints1 Array<Point2D>& Detected edge points on the first side
diagPoints2 Array<Point2D>& Detected edge points on the second side

Description

The filter measures the width of an object present in an image. Internally, it performs a series of scans with ScanSingleStripe filter using inMeasurementMap and inStripeScanParams. The so obtained points are then used for computing two parallel segments by means of a slightly modified segment fitting routine. The process is supported by inOutlierSuppression parameter. Finally, having the aforementioned stripe widths and fitted segments' direction, the object width can be computed using a selected inMeasureMethod method. The inOutlierCount stripe widths most differing from the median width are not used in this step. The inMeasurementMap should be created with CreateMeasurementMap function. For the filter to work properly, the scan segments do not have to be necessarily perpendicular to the object edges.

Hints

  • Define inStripeScanParams.StripePolarity to detect a particular edge type, and only that type.
  • If some points (diagPoints1, diagPoints2) are not found, try decreasing inStripeScanParams.MinMagnitude.
  • If the object is more narrow than 6 pixels, change inStripeScanParams.ProfileInterpolation to Quadratic3.
  • Experiment with inOutlierSuppression and inOutlierCount to deal with some amount of incorrectly detected points.
  • Experiment with various values for inMeasureMethod to obtain best possible precision.

Examples

MeasureObjectWidth performed on the sample image. Green segments are diagScanSegments, the other two are the found object edges.

Errors

Error type Description
DomainError Invalid MeasurementMap in MeasureObjectWidth function. Use CreateMeasurementMap function to create it properly.

See Also

  • FitSegmentToEdges – Performs a series of 1D edge detections and finds a segment that best matches the detected points.