3d Oriented bounding box fitting a shape
This measure uses FeretDiameter3d to compute the oriented minimum bounding box for each shape.
This measure computes, for each shape, an approximation of the oriented bounding box as follows: for each shape, bounding boxes are computed on a customizable number of uniformly distributed orientations. The one with the minimal volume is then considered as the oriented bounding box of the shape.
Here is an example of oriented bounding box measurement calculated on the shapes extracted from the 3d test image MorphoBin3d6.tif. The oriented bounding boxes are displayed with black lines :
3d Oriented bounding box fitting a shape
Measure synthesis :
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, "OrientedBoundingBox3dMsr")
outMeasureSet = shapeanalysis.labelAnalysis3d(inGreyImg, inLabelImg, inMeasureInfoSet3d)
PyIPSDK.saveCsvMeasureFile(os.path.join(tmpPath, "shape_analysis_results.csv"), outMeasureSet)
outMsr = outMeasureSet.getMeasure("OrientedBoundingBox3dMsr")
outMsrValues = outMsr.getMeasureResult().getColl(0)
print("First label estimation major radius : " + str(outMsrValues[1].getLength()))
print("First label estimation medium radius : " + str(outMsrValues[1].getWidth()))
print("First label estimation minor radius : " + str(outMsrValues[1].getHeight()))
print("First label estimation alpha : " + str(outMsrValues[1].getAlpha()))
print("First label estimation beta : " + str(outMsrValues[1].getBeta()))
print("First label estimation chi : " + str(outMsrValues[1].getChi()))
Example of C++ code :
Example informations
Associated library
IPSDKIPLShapeAnalysis
Code Example
Shape3dCollPtr pShape3dColl = boost::make_shared<Shape3dColl>();
IPSDK_REQUIRE(readFromXmlFile(inputShape3dCollPath, *pShape3dColl) == true);
MeasureInfoSetPtr pMeasureInfoSet = MeasureInfoSet::create3dInstance();
createMeasureInfo(pMeasureInfoSet, "OrientedBoundingBox3dMsr", createOrientedBoundingBox3dMsrParams(36));
MeasureSetPtr pOutMeasureSet =
shapeAnalysis3d(pInGreyImg3d, pShape3dColl, pMeasureInfoSet);
const MeasureConstPtr& pOrientedBoundingBox3dOutMsr = pOutMeasureSet->getMeasure("OrientedBoundingBox3dMsr");
const OrientedBoundingBox3dMsrResults& outResults = static_cast<const OrientedBoundingBox3dMsrResults&>(pOrientedBoundingBox3dOutMsr->getMeasureResult());