least square ellipsoid associated to shape tops
This measure allows to compute least square ellipsoid associated to each shape.
Given a shape, algorithm will compute a least square ellipsoid approximation of shape tops.
Estimated ellipsoid can be computed using a simple parametric estimation of shape tops or can be computed using a robust estimation technic. This behavior is ruled by measure parameter, see ipsdk::imaproc::attr::RobustEstimationConfig.
For more information on parametric estimation process (including outlier management) please reports to Parametric estimation.
Please refers to LeastSquareEllipse2d for an example of least square approximation in the 2d case of ellipse.
least square ellipsoid associated to shape tops
Measure synthesis :
Measure Type | Measure Unit Type | Parameter Type | Result Type | Shape Requirements |
Geometry 3d
|
None
|
LeastSquareEllipsoid3dMsrParams |
Custom
|
Boundary Approximation
|
See Shape measurement for additional information on these pictograms Example of Python code :
Generic example in 3d case :
import PyIPSDK
import PyIPSDK.IPSDKIPLShapeAnalysis as shapeanalysis
inMeasureInfoSet3d = PyIPSDK.createMeasureInfoSet3d()
PyIPSDK.createMeasureInfo(inMeasureInfoSet3d, "LeastSquareEllipsoid3dMsr")
outMeasureSet = shapeanalysis.labelAnalysis3d(inGreyImg, inLabelImg, inMeasureInfoSet3d)
PyIPSDK.saveCsvMeasureFile(os.path.join(tmpPath, "shape_analysis_results.csv"), outMeasureSet)
outMsr = outMeasureSet.getMeasure("LeastSquareEllipsoid3dMsr")
outMsrValues = outMsr.getMeasureResult().getColl(0)
print("First label estimation center : " + str(outMsrValues[1].first.centerX()) + ", " + str(outMsrValues[1].first.centerY()) + ", " + str(outMsrValues[1].first.centerZ()))
print("First label estimation major radius : " + str(outMsrValues[1].first.getMajorRadius()))
print("First label estimation medium radius : " + str(outMsrValues[1].first.getMediumRadius()))
print("First label estimation minor radius : " + str(outMsrValues[1].first.getMinorRadius()))
print("First label estimation alpha : " + str(outMsrValues[1].first.getAlpha()))
print("First label estimation beta : " + str(outMsrValues[1].first.getBeta()))
print("First label estimation chi : " + str(outMsrValues[1].first.getChi()))
Example of C++ code :
Example informations
Associated library
IPSDKIPLShapeAnalysis
Code Example
Shape3dCollPtr pShape3dColl = boost::make_shared<Shape3dColl>();
IPSDK_REQUIRE(readFromBinaryFile(inputShape3dCollPath, *pShape3dColl) == true);
MeasureInfoSetPtr pMeasureInfoSet = MeasureInfoSet::create3dInstance();
createMeasureInfo(pMeasureInfoSet, "LeastSquareEllipsoid3dMsr");
MeasureSetPtr pOutMeasureSet =
shapeAnalysis3d(pInGreyImg3d, pShape3dColl, pMeasureInfoSet);
const MeasureConstPtr& pLeastSquareEllipsoid3dOutMsr = pOutMeasureSet->getMeasure("LeastSquareEllipsoid3dMsr");
const LeastSquareEllipsoid3dMsrResults& outResults = static_cast<const LeastSquareEllipsoid3dMsrResults&>(pLeastSquareEllipsoid3dOutMsr->getMeasureResult());