IPSDK 0.2
IPSDK : Image Processing Software Development Kit
OrientedBoundingBox3dSee full documentation

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 :

orientedBoundingBox3dMsr.png

3d Oriented bounding box fitting a shape

Measure synthesis :

Measure Type Measure Unit Type Parameter Type Result Type Shape Requirements
Geometry3d.png
Geometry 3d
none.png
None
parameter.png
OrientedBoundingBox3dMsrParams
Custom.png
Custom
Both.png
Both
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
# Create the infoset
inMeasureInfoSet3d = PyIPSDK.createMeasureInfoSet3d()
PyIPSDK.createMeasureInfo(inMeasureInfoSet3d, "OrientedBoundingBox3dMsr")
#Perform the analysis
outMeasureSet = shapeanalysis.labelAnalysis3d(inGreyImg, inLabelImg, inMeasureInfoSet3d)
# save results to csv format
PyIPSDK.saveCsvMeasureFile(os.path.join(tmpPath, "shape_analysis_results.csv"), outMeasureSet)
# retrieve measure results
outMsr = outMeasureSet.getMeasure("OrientedBoundingBox3dMsr")
# retrieve measure values
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

// opening grey level input image
ImagePtr pInGreyImg3d = loadTiffImageFile(inputGreyImgPath);
// read entity shape 3d collection used for processing
Shape3dCollPtr pShape3dColl = boost::make_shared<Shape3dColl>();
IPSDK_REQUIRE(readFromXmlFile(inputShape3dCollPath, *pShape3dColl) == true);
// define a measure info set
MeasureInfoSetPtr pMeasureInfoSet = MeasureInfoSet::create3dInstance();
createMeasureInfo(pMeasureInfoSet, "OrientedBoundingBox3dMsr", createOrientedBoundingBox3dMsrParams(36));
// compute measure on shape 3d collection
MeasureSetPtr pOutMeasureSet = shapeAnalysis3d(pInGreyImg3d, pShape3dColl, pMeasureInfoSet);
// retrieve associated results
const MeasureConstPtr& pOrientedBoundingBox3dOutMsr = pOutMeasureSet->getMeasure("OrientedBoundingBox3dMsr");
const OrientedBoundingBox3dMsrResults& outResults = static_cast<const OrientedBoundingBox3dMsrResults&>(pOrientedBoundingBox3dOutMsr->getMeasureResult());