measure allowing to compute an angularity criterion based on a simple successive edge angle variation
This measure allows to quantified the angularity of a shape using the change in the angles of the segments associated to its polygonal approximation.
For each tops of the polygonal approximation of shape, we compute an angularity value given by :
where :
is angle between segments with a end at considered top
.
Then the global shape angularity value is simply given by the normalized sum of previous values over all tops of the polygonal approximation of shape :
Here is an example of degree of angularity 2d computation on few caracteristic shapes :
measure allowing to compute an angularity criterion based on a simple successive edge angle variation
Measure synthesis :
Measure Type | Measure Unit Type | Parameter Type | Result Type | Shape Requirements |
Geometry 2d
|
None
|
None
|
Value (ipsdk::ipReal64)
|
Boundary Approximation
|
See Shape measurement for additional information on these pictograms Example of Python code :
Generic example in 2d case :
import PyIPSDK
import PyIPSDK.IPSDKIPLShapeAnalysis as shapeanalysis
inMeasureInfoSet2d = PyIPSDK.createMeasureInfoSet2d()
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "EdgeAngularity2dMsr")
outMeasureSet = shapeanalysis.labelAnalysis2d(inGreyImg, inLabelImg2d, inMeasureInfoSet2d)
PyIPSDK.saveCsvMeasureFile(os.path.join(tmpPath, "shape_analysis_results.csv"), outMeasureSet)
outMsr = outMeasureSet.getMeasure("EdgeAngularity2dMsr")
outMsrValues = outMsr.getMeasureResult().getColl(0)
print("First label measurement equal " + str(outMsrValues[1]))
Example of C++ code :
Example informations
Associated library
IPSDKIPLShapeAnalysis
Code Example
Shape2dCollPtr pShape2dColl = boost::make_shared<Shape2dColl>();
IPSDK_REQUIRE(readFromXmlFile(inputShape2dCollPath, *pShape2dColl) == true);
MeasureInfoSetPtr pMeasureInfoSet = MeasureInfoSet::create2dInstance();
createMeasureInfo(pMeasureInfoSet, "EdgeAngularity2dMsr");
MeasureSetPtr pOutMeasureSet =
shapeAnalysis2d(pInGreyImg2d, pShape2dColl, pMeasureInfoSet);
const MeasureConstPtr& pEdgeAngularity2dOutMsr = pOutMeasureSet->getMeasure("EdgeAngularity2dMsr");
const ipsdk::shape::analysis::ValueMeasureResult<ipsdk::ipReal64>& outResults = static_cast<const ipsdk::shape::analysis::ValueMeasureResult<ipsdk::ipReal64>&>(pEdgeAngularity2dOutMsr->getMeasureResult());