typedef ShapeAnalysisOptParams< ipsdk::shape::segmentation::Shape2dColl > | ipsdk::imaproc::shape::analysis::ShapeAnalysis2dOptParams |
typedef ShapeAnalysisOptParams< ipsdk::shape::segmentation::PlanIndexedShape2dColl > | ipsdk::imaproc::shape::analysis::ShapeAnalysis2dPIOptParams |
MeasureSet = | shapeAnalysis2d (inOptGreyMsrImg1,inLabelsShape2d,inMeasureInfoSet2d) |
MeasureSet = | shapeAnalysis2d (inMeasureInfoSet2d,inLabelsShape2d,shapeAnalysis2dOptParams) |
Shape 2d analysis and measurement algorithm.
This algorithm allows to process measurements and analysis on shape 2d connected components.
User should first extract contours on a connected component label image (see Label shape extraction 2d).
For more information on shape analysis and measurement framework, please refers to Shape Analysis and Measurement.
Shape 2d measurements and analysis can be decomposed in three main groups :
- Intensity measurement which allows to analyze intensity data covered by each shape. This kind of measure agregates for example : mean, variance, grey moments, ... analysis of particules.
- Geometry measurements which use polygonal approximation of shape contours. This kind of measure agregates for example : area, perimeter, axis aligned bounding box computation (min by axis, size by axis), ...
- Generic measurements which allows to combinate other measurements to obtain new values. This kind of measure agregates for example : EquivalentRay which is defined using Area2d measurement (in 2d case).
Here is an example of shape 2d measurement and analysis :
Example of Python code :
Example imports
import PyIPSDK
import PyIPSDK.IPSDKIPLAdvancedMorphology as advmorpho
import PyIPSDK.IPSDKIPLShapeSegmentation as shapesegmentation
import PyIPSDK.IPSDKIPLShapeAnalysis as shapeanalysis
Code Example
inGreyImg = PyIPSDK.loadTiffImageFile(inputGreyImgPath)
inBinImg = PyIPSDK.loadTiffImageFile(inputBinImgPath)
inLabelImg2d = advmorpho.connectedComponent2dImg(inBinImg)
inShape2dColl = shapesegmentation.labelShapeExtraction2d(inLabelImg2d)
inMeasureInfoSet2d = PyIPSDK.createMeasureInfoSet2d()
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "AreaMinusHoles", "PolygonArea2dMsr", shapeanalysis.createHolesBasicPolicyMsrParams(True))
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "AreaWithHoles", "PolygonArea2dMsr", shapeanalysis.createHolesBasicPolicyMsrParams(False))
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "EquivalentRay", "EquivalentRayMsr")
PyIPSDK.createMeasureInfo(inMeasureInfoSet2d, "SumMsr")
outMeasureSet = shapeanalysis.shapeAnalysis2d(inGreyImg, inShape2dColl, inMeasureInfoSet2d)
PyIPSDK.saveCsvMeasureFile(os.path.join(utTmpPath, "shape_analysis_results.csv"), outMeasureSet)
outAreaMinusHolesMsr = outMeasureSet.getMeasure("AreaMinusHoles")
outAreaWithHolesMsr = outMeasureSet.getMeasure("AreaWithHoles")
outEquivalentRayMsr = outMeasureSet.getMeasure("EquivalentRay")
outSumMsr = outMeasureSet.getMeasure("SumMsr")
outAreaWithHolesValues = outAreaWithHolesMsr.getMeasureResult().getColl(0)
print("First label area with holes measurement equal " + str(outAreaWithHolesValues[1]))
Example of C++ code :
Example informations
Header file
#include <IPSDKIPL/IPSDKIPLShapeAnalysis/Processor/ShapeAnalysis2d/ShapeAnalysis2d.h>
Code Example
MeasureInfoSetPtr pMeasureInfoSet = MeasureInfoSet::create2dInstance();
createMeasureInfo(pMeasureInfoSet, "AreaMinusHoles", "PolygonArea2dMsr", createHolesBasicPolicyMsrParams(true));
createMeasureInfo(pMeasureInfoSet, "AreaWithHoles", "PolygonArea2dMsr", createHolesBasicPolicyMsrParams(false));
createMeasureInfo(pMeasureInfoSet, "EquivalentRay", "EquivalentRayMsr");
createMeasureInfo(pMeasureInfoSet, "SumMsr");
MeasureSetPtr pOutMeasureSet = shapeAnalysis2d(pInGreyImg2d, pShape2dColl, pMeasureInfoSet);
saveCsvMeasureFile(csvOutputPath, *pOutMeasureSet);
const MeasureConstPtr& pAreaMinusHolesOutMsr = pOutMeasureSet->getMeasure("AreaMinusHoles");
const MeasureConstPtr& pAreaWithHolesOutMsr = pOutMeasureSet->getMeasure("AreaWithHoles");
const MeasureConstPtr& pEquivalentRayOutMsr = pOutMeasureSet->getMeasure("EquivalentRay");
const MeasureConstPtr& pSumOutMsr = pOutMeasureSet->getMeasure("SumMsr");