SoAutoThresholdingQuantification engine
More...
#include <ImageViz/Engines/ImageAnalysis/Statistics/SoAutoThresholdingQuantification.h>
Inheritance diagram for SoAutoThresholdingQuantification:Classes | |
| class | SbAutoThresholdingDetail |
| Results details of threshold by automatic segmentation. More... | |
Public Types | |
| enum | RangeMode { MIN_MAX = 0 , OTHER = 1 } |
| enum | ThresholdCriterion { ENTROPY = 0 , FACTORISATION = 1 , MOMENTS = 2 } |
Public Types inherited from SoImageVizEngine | |
| enum | ComputeMode { MODE_2D = 0 , MODE_3D = 1 , MODE_AUTO = 2 } |
| Compute Mode This enum specifies whether the main input will be interpreted as a 3D volume or a stack of 2D images for processing. More... | |
| enum | Neighborhood3d { CONNECTIVITY_6 = 0 , CONNECTIVITY_18 = 1 , CONNECTIVITY_26 = 2 } |
| Neighborhood Connectivity 3D. More... | |
Public Member Functions | |
| SoAutoThresholdingQuantification () | |
| Constructor. | |
Public Member Functions inherited from SoImageVizEngine | |
| virtual SoType | getTypeId () const |
| Returns the type identifier for this specific instance. | |
| virtual void | startEvaluate () |
| Evaluate engine and dependencies in another thread without blocking the current one. | |
| virtual void | waitEvaluate () |
| Wait for the end of engine evaluation. | |
| virtual void | abortEvaluate () |
| Abort current processing as soon as possible. | |
| virtual bool | isEvaluating () |
| Returns true if the engine evaluation is in progress. | |
Public Member Functions inherited from SoEngine | |
| virtual int | getOutputs (SoEngineOutputList &list) const |
| Returns a list of outputs in this engine. | |
| SoEngineOutput * | getOutput (const SbName &outputName) const |
| Returns a reference to the engine output with the given name. | |
| SbBool | getOutputName (const SoEngineOutput *output, SbName &outputName) const |
| Returns (in outputName) the name of the engine output (output). | |
| SoEngine * | copy () const |
| Creates and returns an exact copy of the engine. | |
Public Member Functions inherited from SoFieldContainer | |
| void | setToDefaults () |
| Sets all fields in this object to their default values. | |
| SbBool | hasDefaultValues () const |
| Returns TRUE if all of the object's fields have their default values. | |
| SbBool | fieldsAreEqual (const SoFieldContainer *fc) const |
| Returns TRUE if this object's fields are exactly equal to fc's fields. | |
| void | copyFieldValues (const SoFieldContainer *fc, SbBool copyConnections=FALSE) |
| Copies the contents of fc's fields into this object's fields. | |
| SoNONUNICODE SbBool | set (const char *fieldDataString) |
| Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format. | |
| SbBool | set (const SbString &fieldDataString) |
| Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format. | |
| void | get (SbString &fieldDataString) |
| Returns the values of the fields of this object in the Open Inventor ASCII file format in the given string. | |
| virtual int | getFields (SoFieldList &list) const |
| Appends references to all of this object's fields to resultList, and returns the number of fields appended. | |
| virtual int | getAllFields (SoFieldList &list) const |
| Returns a list of fields, including the eventIn's and eventOut's. | |
| virtual SoField * | getField (const SbName &fieldName) const |
| Returns a the field of this object whose name is fieldName. | |
| virtual SoField * | getEventIn (const SbName &fieldName) const |
| Returns a the eventIn with the given name. | |
| virtual SoField * | getEventOut (const SbName &fieldName) const |
| Returns the eventOut with the given name. | |
| SbBool | getFieldName (const SoField *field, SbName &fieldName) const |
| Returns the name of the given field in the fieldName argument. | |
| SbBool | enableNotify (SbBool flag) |
| Notification at this Field Container is enabled (if flag == TRUE) or disabled (if flag == FALSE). | |
| SbBool | isNotifyEnabled () const |
| Notification is the process of telling interested objects that this object has changed. | |
| virtual void | setUserData (void *data) |
| Sets application data. | |
| void * | getUserData (void) const |
| Gets user application data. | |
Public Member Functions inherited from SoBase | |
| virtual void | touch () |
| Marks an instance as modified, simulating a change to it. | |
| virtual SbName | getName () const |
| Returns the name of an instance. | |
| virtual void | setName (const SbName &name) |
| Sets the name of an instance. | |
| void | setSynchronizable (const bool b) |
| Sets this to be a ScaleViz synchronizable object. | |
| bool | isSynchronizable () const |
| Gets the ScaleViz synchronizable state of this object. | |
Public Member Functions inherited from SoRefCounter | |
| void | ref () const |
| Adds a reference to an instance. | |
| void | unref () const |
| Removes a reference from an instance. | |
| void | unrefNoDelete () const |
| unrefNoDelete() should be called when it is desired to decrement the reference count, but not delete the instance if this brings the reference count to zero. | |
| int | getRefCount () const |
| Returns current reference count. | |
| void | lock () const |
| lock this instance. | |
| void | unlock () const |
| unlock this instance. | |
Public Member Functions inherited from SoTypedObject | |
| SbBool | isOfType (const SoType &type) const |
| Returns TRUE if this object is of the type specified in type or is derived from that type. | |
| template<typename TypedObjectClass > | |
| SbBool | isOfType () const |
| Returns TRUE if this object is of the type of class TypedObjectClass or is derived from that class. | |
Public Attributes | |
| SoSFEnum | computeMode |
| Select the compute Mode (2D or 3D or AUTO) Use enum ComputeMode. | |
| SoSFImageDataAdapter | inGrayImage |
| The input grayscale image Default value is NULL. | |
| SoSFEnum | rangeMode |
| The input intensity range. | |
| SoSFVec2f | intensityRangeInput |
| The input intensity range used when rangeMode = OTHER. | |
| SoSFEnum | thresholdCriterion |
| The criterion to detect thresholds on histogram. | |
| SoImageVizEngineAnalysisOutput< SbAutoThresholdingDetail > | outResult |
| The thresholding results. | |
Public Attributes inherited from SoImageVizEngine | |
| SbEventHandler< EventArg & > | onBegin |
| Event raised when the processing begins. | |
| SbEventHandler< EventArg & > | onEnd |
| Event raised when processing ends and the result is available. | |
| SbEventHandler< EventArg & > | onProgress |
| Event raised while processing is running. | |
Additional Inherited Members | |
Static Public Member Functions inherited from SoImageVizEngine | |
| static SoType | getClassTypeId () |
| Returns the type identifier for this class. | |
Static Public Member Functions inherited from SoEngine | |
| static SoType | getClassTypeId () |
| Returns the type identifier for the SoEngine class. | |
| static SoEngine * | getByName (const SbName &name) |
| Looks up engine(s) by name. | |
| static int | getByName (const SbName &name, SoEngineList &list) |
| Looks up engine(s) by name. | |
Static Public Member Functions inherited from SoFieldContainer | |
| static SoType | getClassTypeId () |
| Returns the type of this class. | |
Static Public Member Functions inherited from SoBase | |
| static SoType | getClassTypeId () |
| Returns type identifier for this class. | |
Static Public Member Functions inherited from SoTypedObject | |
| static SoType | getClassTypeId () |
| Returns the type identifier for this class. | |
SoAutoThresholdingQuantification engine
The SoAutoThresholdingQuantification engine extracts a value to automaticaly threshold on a gray level image.
Three methods of classification are available: Entropy, Factorisation or Moments. The computed threshold is provided in the SbAutoThresholdingDetail object.
Entropy
The entropy principle defines 2 classes in the image histogram by minimizing the total classes' entropy, for more theory the reader can refers to references [1] and [2]. Considering the first-order probability histogram of an image and assuming that all symbols in the flowing equation are statistically independent, its entropy (in the Shannon sense) is defined as:
![\[H=-\sum_{i=0}^{n} p[i] \times \log(p[i])_ 2\]](form_311.png)
Where 
![$p[i]$](form_313.png)

Let us denote 
![$[I_1,I_2]$](form_316.png)
![\[H_w[t]=-\sum_{I_1}^{t} p_1[i] \times \log(p_1[i])_2\]](form_317.png)
![\[H_b[t]=-\sum_{t+1}^{I_2} p_2[i] \times \log(p_2[i])_2\]](form_318.png)
Where ![$p_1[i]$](form_319.png)
![$[I_1,t]$](form_320.png)
![$p_2[i]$](form_321.png)


![$S(t)=H_w[t]+H_b[t]$](form_324.png)
![\[T=\arg min_t(H_w[t]+H_b[t])\]](form_325.png)
|
|
Factorization
The factorization method is based on the Otsu criterion (see [3] for details), i.e. minimizing the within-class variance:
![$\sigma^2_W[t]=w_0[t] \times \sigma_0^2[t]+w_1[t] \times \sigma_1^2[t]$](form_326.png)
Where ![$w_0[t]$](form_327.png)
![$w_1[t]$](form_328.png)
![$^2[t]$](form_329.png)
![$^2[t]$](form_329.png)


A faster and equivalent approach is to maximize the between-class variance:
![\[\sigma_B^2[t]=w_0[t] \times w_1[t] \times (\mu_0[t]-\mu_1[t])^2\]](form_332.png)
The within-class variance calculation is based on the second-order statistics (variances) while the between-class variance calculation is based on the first order statistics (means). It is therefore simplest and faster to use this last optimization criterion. We then search the value 
![\[T=\arg min_t(\sigma_B^2[t])\]](form_333.png)
|
|
Moments
The moment SoAutoThresholdingProcessing uses the moment-preserving bi-level thresholding described by W.H.Tsai in [4]. Moments of an image can be computed from its histogram in the following way:
![\[m_j=\sum_{i=0}^n p[z_i]^j\]](form_334.png)
Where ![$p[z_i]$](form_335.png)














![\[m'_j=\sum_{i=0}^n p[z_i]^j\mbox{, j=0,1,2,3}\]](form_343.png)
And preserving the first three moments in 
![\[m'_j=m_j\mbox{, j=0,1,2,3}\]](form_344.png)
To find the desired threshold value 







|
|
[1] T.Pun, Entropic thresholding: A new approach, comput. Graphics Image Process. 16, 1981, 210-239
[2] J. N. Kapur, P. K. Sahoo, and A. K. C. Wong, "A New Method for Gray-Level Picture Thresholding Using the Entropy of the Histogram" Computer Vision, Graphics and Image Processing 29, pp. 273-285, Mar. 1985
[3] Otsu, N. 1979. A thresholding selection method from grayscale histogram. IEEE Transactions on Systems, Man, and Cybernetics9(1): 62-66
[4] Tsai, W. H. 1985. Moment-preserving thresholding: A New Approach. Computer Vision, Graphics, and Image Processing 29: 377-393
| computeMode | MODE_AUTO |
| inGrayImage | NULL |
| rangeMode | MIN_MAX |
| intensityRangeInput | 0.0f 255.0f |
| thresholdCriterion | ENTROPY |
Definition at line 176 of file SoAutoThresholdingQuantification.h.
| Enumerator | |
|---|---|
| MIN_MAX | With this option the histogram is computed between the minimum and the maximum of the image. |
| OTHER | With this option the histogram is computed between user-defined bounds intensityRangeInput. |
Definition at line 216 of file SoAutoThresholdingQuantification.h.
Definition at line 238 of file SoAutoThresholdingQuantification.h.
| SoAutoThresholdingQuantification::SoAutoThresholdingQuantification | ( | ) |
Constructor.
| SoSFEnum SoAutoThresholdingQuantification::computeMode |
Select the compute Mode (2D or 3D or AUTO) Use enum ComputeMode.
Default is MODE_AUTO
Definition at line 188 of file SoAutoThresholdingQuantification.h.
| SoSFImageDataAdapter SoAutoThresholdingQuantification::inGrayImage |
The input grayscale image Default value is NULL.
Supported types include: grayscale image.
Definition at line 211 of file SoAutoThresholdingQuantification.h.
| SoSFVec2f SoAutoThresholdingQuantification::intensityRangeInput |
The input intensity range used when rangeMode = OTHER.
Default value is SbVec2f(0.0f,255.0f).
Definition at line 233 of file SoAutoThresholdingQuantification.h.
| SoImageVizEngineAnalysisOutput<SbAutoThresholdingDetail> SoAutoThresholdingQuantification::outResult |
The thresholding results.
Default value is NULL.
Definition at line 259 of file SoAutoThresholdingQuantification.h.
| SoSFEnum SoAutoThresholdingQuantification::rangeMode |
The input intensity range.
Use enum RangeMode. Default is MIN_MAX
Definition at line 230 of file SoAutoThresholdingQuantification.h.
| SoSFEnum SoAutoThresholdingQuantification::thresholdCriterion |
The criterion to detect thresholds on histogram.
Use enum ThresholdCriterion. Default is ENTROPY
Definition at line 256 of file SoAutoThresholdingQuantification.h.