/usr/include/OTB-5.8/otbSOMClassifier.txx is in libotb-dev 5.8.0+dfsg-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 | /*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt 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 otbSOMClassifier_txx
#define otbSOMClassifier_txx
#include "otbSOMClassifier.h"
#include "otbMacro.h"
namespace otb
{
/**
* Constructor
*/
template<class TSample, class TSOMMap, class TLabel>
SOMClassifier<TSample, TSOMMap, TLabel>
::SOMClassifier()
{
this->SetNumberOfRequiredInputs(1);
SOMMapPointerType sommap = SOMMapType::New();
this->SetNthInput(0, sommap.GetPointer());
m_Sample = SampleType::New();
OutputPointerType outputPtr = OutputType::New();
this->SetNthOutput(0, outputPtr.GetPointer());
}
template<class TSample, class TSOMMap, class TLabel>
typename SOMClassifier<TSample, TSOMMap, TLabel>
::OutputType *
SOMClassifier<TSample, TSOMMap, TLabel>
::GetOutput()
{
return dynamic_cast<OutputType *>(this->itk::ProcessObject::GetOutput(0));
}
/**
* SOMMap getter.
*/
template<class TSample, class TSOMMap, class TLabel>
typename SOMClassifier<TSample, TSOMMap, TLabel>
::SOMMapType *
SOMClassifier<TSample, TSOMMap, TLabel>
::GetMap(void)
{
return dynamic_cast<SOMMapType *>(this->itk::ProcessObject::GetInput(0));
}
/**
* SOMMap Setter.
*/
template<class TSample, class TSOMMap, class TLabel>
void
SOMClassifier<TSample, TSOMMap, TLabel>
::SetMap(SOMMapType * sommap)
{
this->itk::ProcessObject::SetNthInput(0, const_cast<SOMMapType *>(sommap));
}
/**
* PrintSelf method
*/
template<class TSample, class TSOMMap, class TLabel>
void
SOMClassifier<TSample, TSOMMap, TLabel>
::PrintSelf(std::ostream& os, itk::Indent indent) const
{
Superclass::PrintSelf(os, indent);
}
/**
* Main computation class.
*/
template<class TSample, class TSOMMap, class TLabel>
void
SOMClassifier<TSample, TSOMMap, TLabel>
::GenerateData()
{
typename OutputType::Pointer outputPtr = this->GetOutput();
outputPtr->SetSample(this->GetSample());
// outputPtr->Resize(this->GetSample()->Size()); //FIXME Check if still required
typename SOMMapType::SizeType size = this->GetMap()->GetLargestPossibleRegion().GetSize();
unsigned int numberOfClasses = 1;
for (unsigned int i = 0; i < SOMMapType::ImageDimension; ++i)
{
numberOfClasses *= size[i];
}
outputPtr->SetNumberOfClasses(numberOfClasses);
typename TSample::Iterator iter = this->GetSample()->Begin();
typename TSample::Iterator end = this->GetSample()->End();
typename OutputType::ConstIterator iterO = outputPtr->Begin();
typename OutputType::ConstIterator endO = outputPtr->End();
typename TSample::MeasurementVectorType measurements;
typename SOMMapType::IndexType index;
SOMMapPointerType somMap = this->GetMap();
otbMsgDebugMacro(<< "Starting iterations ");
while (iter != end && iterO != endO)
{
measurements = iter.GetMeasurementVector();
index = somMap->GetWinner(measurements);
ClassLabelType classLabel = static_cast<ClassLabelType>((index[1] * size[1]) + index[0]);
outputPtr->AddInstance(classLabel, iterO.GetInstanceIdentifier());
++iter;
++iterO;
}
}
} // end of namespace otb
#endif
|