/usr/include/InsightToolkit/Algorithms/itkClassifierBase.h is in libinsighttoolkit3-dev 3.20.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | /*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkClassifierBase.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkClassifierBase_h
#define __itkClassifierBase_h
#include "itkLightProcessObject.h"
#include "itkMembershipFunctionBase.h"
#include "itkDecisionRuleBase.h"
#include <vector>
namespace itk
{
/** \class ClassifierBase
* \brief Base class for classifier object
*
* ClassifierBase is the base class for the classifier objects. It provides
* the basic function definitions that are inherent to a classifier objects.
*
* This is the SuperClass for the classifier framework. This is an
* abstract class defining an interface for all the classification objects
* available through the classifier framework in the ITK toolkit.
*
* The basic functionality of the classifier framework base class is to
* classify each data point in given a data set to one of the N classes where
* N is either specified by the user or automatically determined using methods
* such as k-means clustering techniques.
*
* The classifier framework supports two types of data where
* (1) The input is a series of data points that needs to be classified.
* These points may be in the form of images where the pixels can be viewed
* as a list and the spatial location of the pixels in not of a concern. This
* classification can be carried out via the use of
* SampleClassifier.
*
* (2)The input is specifically an image and the pixels cannot be viewed as
* as a list of pixels since the spatial location of the pixel in needed
* for various algorithmic implementation such as Markov Random Field based
* approached. This type of data can be classified via the use of
* GeneralImageClassifierBase.
*
* User will call The Update() function to run the classification proces
*
* The user must generate the membership function before asking for data to
* be classified. One can automatically generate the membership function from
* the training data via the use of itkImageModelEstimator class. The
* membershio functions have to be populated by using the AddMembershipFunction
* If membership functions are not set prior to calling for classification, an
* exception in thrown.
*
* As the method name indicates, you can have more than one membership
* function. One for each classes. The order you put the membership
* calculator becomes the class label for the class that is represented
* by the membership calculator.
*
* The fourth argument is the type of decision rule. The main role of a
* decision rule is comparing the return values of the membership
* calculators. However,
* decision rule can include some prior knowledge that can improve the
* result. To plug in the decision rule, use SetDecisionRule method.
*
* Before you call the Update method to start the classification process,
* you should plug in all necessary parts ( one or more membership
* functions, a decision rule, the unclassified data).
*
* This class is templated over the container type.
*
* \ingroup ClassificationFilters
*/
template <class TDataContainer>
class ITK_EXPORT ClassifierBase : public LightProcessObject
{
public:
/** Standard class typedefs. */
typedef ClassifierBase Self;
typedef LightProcessObject Superclass;
/** Run-time type information (and related methods). */
itkTypeMacro(ClassifierBase,LightProcessObject);
/** Sets the number of classes. */
itkSetMacro(NumberOfClasses, unsigned int);
/** Gets the number of classes. */
itkGetConstReferenceMacro(NumberOfClasses, unsigned int);
/**Sets the decision rule */
typedef typename TDataContainer::ValueType MeasurementVectorType;
/** Typedefs for membership funciton */
typedef Statistics::MembershipFunctionBase< MeasurementVectorType >
MembershipFunctionType;
typedef typename MembershipFunctionType::Pointer MembershipFunctionPointer;
typedef std::vector< MembershipFunctionPointer >
MembershipFunctionPointerVector;
/** Type alias for decision rule */
typedef DecisionRuleBase DecisionRuleType;
/** Sets the pointer to the decision rule.
* Stores the decision rule that makes the real decision using
* informations from MembershipFunctions and other prior knowledge */
void SetDecisionRule( DecisionRuleType* ptrToDecisionRule )
{
m_DecisionRule = ptrToDecisionRule;
}
/** Gets the pointer to the decision rule being used. */
DecisionRuleType* GetDecisionRule(void)
{
return m_DecisionRule.GetPointer();
}
/** Gets the MembershipFunction that are plugged in by
* the AddMembershipFunction method. The index is assigned according
* to the order each membership function has been added using the
* AddMemberShipFunction method */
const MembershipFunctionType* GetMembershipFunction(unsigned int index)const
{
return m_MembershipFunctions[index].GetPointer();
}
/** Gets the number of membership functions */
unsigned int GetNumberOfMembershipFunctions()
{
return static_cast<unsigned int>( m_MembershipFunctions.size() );
}
/** Stores a membership function of a class in its internal vector */
unsigned int AddMembershipFunction(MembershipFunctionType* function);
/** Starts the classification process */
void Update();
protected:
ClassifierBase();
~ClassifierBase();
void PrintSelf(std::ostream& os, Indent indent) const;
/** The real classification logic implementaion. All the subclasses
* of this class should implement this method. */
virtual void GenerateData() = 0;
private:
ClassifierBase(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
/** Number of classes */
unsigned int m_NumberOfClasses;
/** Pointer to the decision rule to be used for classification. */
typename DecisionRuleType::Pointer m_DecisionRule;
/** Container to hold the membership functions */
MembershipFunctionPointerVector m_MembershipFunctions;
}; // class Classifier
} // namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkClassifierBase.txx"
#endif
#endif
|