Convex hull measurement function
#include "dip_chaincode.h"
dip_Error dip_ConvexHullGetFeret ( polygon, feret )
This function measures the longest and shortest projections of the object encoded by polygon. A "rotating calipers" algorithm finds all antipodal edges and vertices. Then the distances between each of these pairs is computed. These distances correspond to the lengths of the projection under an orientation perpendicular to the edge used. The maximum and minimum distance, as well as the corresponding orientations, are returned in the feret structure, which contains the following elements:
Data type | Name | Description |
dip_float | maxDiameter | The widest projection of the object |
dip_float | minDiameter | The narrowest projection of the object |
dip_float | maxPerpendicular | The width of the projection perpendicular to minDiameter |
dip_float | maxAngle | The angle of the projection for maxDiameter |
dip_float | minAngle | The angle of the projection for minDiameter |
ConvexHullGetFeret is the function used by Measure for the FeatureFeret measurement.
Data type | Name | Description |
dip_Polygon | polygon | Input convex polygon |
dip_Feret* | feret | Output measurements |
This function is more accurate than ChainCodeGetFeret, given a correct polygonal representation of the convex hull of the object. Because antipodal pairs are identified, and the angle of the edges is used, this algorithm doesn't depend on an angle step size, as ChainCodeGetFeret does.
Algorithm A3.7 in M.I. Shamos, "Computational geometry," Ph.D. thesis, Yale University, 1978.
ChainCodeConvexHull, ConvexHullGetArea, ConvexHullGetPerimeter, ChainCodeGetFeret