17 #ifndef __itkImageClassifierBase_txx
18 #define __itkImageClassifierBase_txx
24 template<
class TInputImage,
25 class TClassifiedImage>
32 template<
class TInputImage,
33 class TClassifiedImage>
43 template <
class TInputImage,
44 class TClassifiedImage>
49 Superclass::PrintSelf(os,indent);
51 os << indent <<
"General Image Classifier / Clusterer" << std::endl;
52 os << indent <<
"ClassifiedImage: ";
53 os << m_ClassifiedImage.GetPointer() << std::endl;
54 os << indent <<
"InputImage: ";
55 os << m_InputImage.GetPointer() << std::endl;
58 const unsigned int length =
static_cast<unsigned int>( m_PixelMembershipValue.size() );
59 const signed int last =
static_cast<int>( length ) - 1;
61 os << indent <<
"Pixel membership: [";
62 for ( i = 0; i < last; i++)
64 os << m_PixelMembershipValue[i] <<
", ";
68 os << m_PixelMembershipValue[last];
70 os <<
"]" << std::endl;
77 template <
class TInputImage,
78 class TClassifiedImage>
90 template<
class TInputImage,
91 class TClassifiedImage>
99 if( !classifiedImage )
116 classifiedImage = this->GetClassifiedImage();
119 classifiedIt( classifiedImage, classifiedImage->GetBufferedRegion() );
129 unsigned int numberOfClasses = this->GetNumberOfMembershipFunctions();
131 std::vector< double > discriminantScores;
132 discriminantScores.resize( numberOfClasses );
133 unsigned int classLabel;
134 unsigned int classIndex;
137 unsigned long totalPixels =
138 inputImage->GetBufferedRegion().GetNumberOfPixels();
139 unsigned long updateVisits = totalPixels / 10;
140 if( updateVisits < 1 )
146 for ( inIt.GoToBegin(); ! inIt.IsAtEnd(); ++inIt, ++classifiedIt, ++k )
149 if ( !( k % updateVisits ) )
151 this->UpdateProgress((
float)k / (
float)totalPixels);
155 inputImagePixel = inIt.Get();
156 for (classIndex = 0; classIndex < numberOfClasses; classIndex++)
158 discriminantScores[classIndex] =
159 (this->GetMembershipFunction(classIndex))->Evaluate(inputImagePixel);
163 classLabel = this->GetDecisionRule()->Evaluate(discriminantScores);
166 classifiedIt.Set( outputClassifiedLabel );
174 template<
class TInputImage,
175 class TClassifiedImage>
185 this->SetClassifiedImage(classifiedImage);
187 typedef typename TClassifiedImage::IndexType myIndex;
188 typename TClassifiedImage::IndexType classifiedImageIndex;
189 classifiedImageIndex.Fill(0);
191 typename TClassifiedImage::RegionType classifiedImageRegion;
193 classifiedImageRegion.SetSize( inputImageSize );
194 classifiedImageRegion.SetIndex( classifiedImageIndex );
196 classifiedImage->SetLargestPossibleRegion( classifiedImageRegion );
197 classifiedImage->SetBufferedRegion( classifiedImageRegion );
198 classifiedImage->Allocate();
202 template<
class TInputImage,
203 class TClassifiedImage>
204 const std::vector< double > &
209 unsigned int numberOfClasses = this->GetNumberOfClasses();
210 if( m_PixelMembershipValue.size() != numberOfClasses )
212 m_PixelMembershipValue.resize( numberOfClasses );
215 for (
unsigned int classIndex = 0; classIndex < numberOfClasses; classIndex++)
217 m_PixelMembershipValue[classIndex] =
218 (this->GetMembershipFunction(classIndex))->Evaluate(inputImagePixel);
222 return m_PixelMembershipValue;