/usr/include/ITK-4.5/itkClassifierBase.h is in libinsighttoolkit4-dev 4.5.0-3.
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 | /*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef __itkClassifierBase_h
#define __itkClassifierBase_h
#include "itkLightProcessObject.h"
#include "itkMembershipFunctionBase.h"
#include "itkDecisionRule.h"
#include <vector>
namespace itk
{
/** \class ClassifierBase
* \brief Base class for classifier objects.
*
* ClassifierBase is the base class for classifier objects. It provides
* the basic function definitions that are inherent to 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 a list of pixels since the spatial location of the pixel in needed
* for various algorithmic implementations (such as the Markov Random Field based
* approached). This type of data can be classified via the use of
* GeneralImageClassifierBase.
*
* The user will call the Update() function to run the classification process.
*
* 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
* membership functions have to be populated by using the AddMembershipFunction.
* If membership functions are not set prior to calling for classification, an
* exception in thrown.
*
* The user can have more than one membership function, and can have one
* for each class. The order of 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 rules can include some prior knowledge
* that can improve the result. To plug in the decision rule, use
* SetDecisionRule method.
*
* Before the Update method is called to start the classification process,
* plug in all necessary parts (one or more membership functions,
* a decision rule, and the unclassified data).
*
* This class is templated over the container type.
*
* \ingroup ClassificationFilters
* \ingroup ITKClassifiers
*/
template< typename TDataContainer >
class 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 Statistics::DecisionRule 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.hxx"
#endif
#endif
|