Mean edge length for graph associated to skeleton 2d.
Skeleton 2d mean edge length measure is based on skeleton 2d measure (see [Concept] Skeleton 2d). This measure allows to compute mean length of edges composing a shape 2d skeleton.
Searched edge type can be customized (setting measure parameter ipsdk::geom::eSkeletonEdgeCategory) :
- eSEC_All to process all edges
- eSEC_Leaf to process only leaf edges which are edges connected to a polygon point (red edges for main skeleton and black edges for hole skeleton)
- eSEC_Branch to process only branch edges which are edges not connected to polygon point (green edges for main skeleton and blue edges for hole skeleton)
Here is an example of measure results for different skeleton 2d holes processing policy and different searched edge types.
Mean edge length for graph associated to skeleton 2d
Measure synthesis :
Measure Type | Measure Unit Type | Parameter Type | Result Type | Shape Requirements |
Generic
|
Length
|
Skeleton2dMeanEdgeLengthMsrParams |
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.createGeometricCalibration2d(1,1,'px'))
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "Skeleton2dMeanEdgeLengthMsr", shapeanalysis.createSkeleton2dMeanEdgeLengthMsrParams(PyIPSDK.eSHP_Ignored, PyIPSDK.eSEC_Leaf))
outMeasureSet = shapeanalysis.labelAnalysis2d(inGreyImg, inLabelImg2d, inMeasureInfoSet2d)
PyIPSDK.saveCsvMeasureFile(os.path.join(tmpPath, "shape_analysis_results.csv"), outMeasureSet)
outMsr = outMeasureSet.getMeasure("Skeleton2dMeanEdgeLengthMsr")
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, "Skeleton2dMeanEdgeLengthMsr", createSkeleton2dMeanEdgeLengthMsrParams(skeleton2dHolesPolicy, skeletonEdgeCategory));
MeasureSetPtr pOutMeasureSet =
shapeAnalysis2d(pInGreyImg2d, pShape2dColl, pMeasureInfoSet);
const MeasureConstPtr& pSkeleton2dMeanEdgeLengthOutMsr = pOutMeasureSet->getMeasure("Skeleton2dMeanEdgeLengthMsr");
const ipsdk::shape::analysis::ValueMeasureResult<ipsdk::ipReal64>& outResults = static_cast<const ipsdk::shape::analysis::ValueMeasureResult<ipsdk::ipReal64>&>(pSkeleton2dMeanEdgeLengthOutMsr->getMeasureResult());