11 #ifndef AIMS_CLASSIFICATION_CAH_H
12 #define AIMS_CLASSIFICATION_CAH_H
14 #include <aims/vector/vector.h>
15 #include <aims/data/data_g.h>
16 #include <aims/classification/individuals.h>
18 #include <aims/math/discriminantanalysis.h>
21 class ProbabilisticPcaElement ;
45 const std::vector< std::list< Point3d > >& classes,
46 const AimsData<T>& data,
const AimsData<float>& initDistances ) = 0 ;
49 const std::vector< std::list< Point3d > >& classes,
50 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) = 0 ;
64 BaryElement(
const std::vector<std::list< Point3d > >& classes,
65 const AimsData<T>& data,
69 const std::vector<float> &
baryValue()
const {
return _bary.value() ; }
73 const std::vector< std::list< Point3d > >& classes,
74 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
77 const std::vector< std::list< Point3d > >& classes,
78 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
81 void computeBary(
const std::vector<std::list< Point3d > >& classes,
82 const AimsData<T>& data ) ;
84 aims::Individuals<float> _bary ;
92 PcaElement(
const std::vector<std::list< Point3d > >& classes,
93 const AimsData<T>& data,
int numberOfSignificantVps,
99 const std::vector< std::list< Point3d > >& classes,
100 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
103 const std::vector< std::list< Point3d > >& classes,
104 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
113 const AimsData<T>& data ) ;
114 float error(
const Point3d& p,
const AimsData<T>& data ) ;
127 template <
typename T>
132 const AimsData<T>& data,
int numberOfSignificantVps,
138 const std::vector< std::list< Point3d > >& classes,
139 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
142 const std::vector< std::list< Point3d > >& classes,
143 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
152 void computeReconstructionError(
const std::vector< std::list< Point3d > >& classes,
153 const AimsData<T>& data ) ;
154 float _meanReconstructionError ;
155 float _varReconstructionError ;
157 AimsData<float> _errorMatrix ;
158 std::vector<float> _mean ;
160 float _unreconstructedInertia ;
161 int _numberOfSignificantVps ;
166 template <
typename T>
170 PPcaElement(
const std::vector<std::list< Point3d > >& classes,
171 const AimsData<T>& data,
int numberOfSignificantVps,
177 const std::vector< std::list< Point3d > >& classes,
178 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
181 const std::vector< std::list< Point3d > >& classes,
182 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
185 aims::ProbabilisticPcaElement*
ppca() {
return _ppcaElement ; }
188 void computeReconstructionError(
const std::vector< std::list< Point3d > >& classes,
189 const AimsData<T>& data ) ;
191 AimsData<double> _meanSignal ;
192 aims::ProbabilisticPcaElement * _ppcaElement ;
194 int _numberOfSignificantVps ;
197 template <
typename T>
206 const std::vector< std::list< Point3d > >& classes,
207 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
210 const std::vector< std::list< Point3d > >& classes,
211 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
216 template <
typename T>
221 const AimsData<double> * maxMomentValueRatios,
222 const AimsData<double> * kinModel2by2Distances,
223 const AimsData<double> * interactionSurf,
224 const std::vector<double> * labelsVolumes,
225 float spatialregularizationWeight,
float timeOfMaximumWeight,
226 float meanDist2By2,
float varDist2By2,
float meanSurfVolRatio,
227 float varSurfVolRatio,
float meanMaxMomentRatio,
float varMaxMomentRatio,
230 _kinModel2by2Distances(kinModel2by2Distances),
231 _interactionSurf(interactionSurf), _labelsVolumes(labelsVolumes),
232 _spatialregularizationWeight(spatialregularizationWeight), _timeOfMaximumWeight(timeOfMaximumWeight),
233 _meanDist2By2(meanDist2By2), _varDist2By2(varDist2By2), _meanSurfVolRatio(meanSurfVolRatio),
234 _varSurfVolRatio(varSurfVolRatio), _meanMaxMomentRatio(meanMaxMomentRatio), _varMaxMomentRatio(varMaxMomentRatio)
241 const std::vector< std::list< Point3d > >& classes,
242 const AimsData<T>& data,
const AimsData<float>& initDistances ) ;
245 const std::vector< std::list< Point3d > >& classes,
246 const AimsData<T>& data,
const AimsData<float>& initDistances,
int newNb = -1 ) ;
250 const AimsData<double> * _maxMomentValueRatios ;
251 const AimsData<double> * _kinModel2by2Distances ;
252 const AimsData<double> * _interactionSurf ;
253 const std::vector<double> * _labelsVolumes ;
254 float _spatialregularizationWeight ;
255 float _timeOfMaximumWeight ;
257 float _meanDist2By2 ;
259 float _meanSurfVolRatio ;
260 float _varSurfVolRatio ;
261 float _meanMaxMomentRatio ;
262 float _varMaxMomentRatio ;
265 template <
typename T>
269 const AimsData<T>&
data = AimsData<T>() ) ;
273 virtual std::list< Element<T>* >
creator()
const ;
283 const std::vector< std::list< Point3d > >&
_classes ;
287 template <
typename T>
291 const AimsData<T>&
data = AimsData<T>() ) ;
296 virtual std::string
methodType()
const {
return "Barycenter" ;}
300 template <
typename T>
304 const std::vector< std::list< Point3d > >&
classes = std::vector< std::list< Point3d > >(),
305 const AimsData<T>&
data = AimsData<T>() ) ;
313 int _nbOfSignificantVps ;
316 template <
typename T>
320 const std::vector< std::list< Point3d > >&
classes = std::vector< std::list< Point3d > >(),
321 const AimsData<T>&
data = AimsData<T>() ) ;
329 int _nbOfSignificantVps ;
332 template <
typename T>
338 virtual std::list< Element<T>* >
creator()
const ;
341 virtual std::string
methodType()
const {
return "Max2By2Distance" ;}
348 AimsData<float> _initDistances ;
353 template <
typename T>
357 const std::vector<aims::DiscriminantAnalysisElement*>& classesKinDescription,
358 const AimsData<int>& locMap,
359 const std::vector<short>& unfusionedLabels,
360 const std::vector<float>& classMaximaMoment,
361 float spatialregularizationWeight = 1.,
362 float timeOfMaximumWeight = 0.5 ) ;
365 delete _classMaximumMoment ;
366 delete _maxMomentValueRatios ;
367 delete _antiCorrelatedMeans ;
368 delete _kinModel2by2Distances ;
369 delete _interactionSurf ;
370 delete _labelsVolumes ;
375 virtual std::string
methodType()
const {
return "SCKBDistance" ;}
381 std::vector<float> * _classMaximumMoment ;
382 AimsData<double> * _maxMomentValueRatios ;
383 AimsData<char> * _antiCorrelatedMeans ;
384 AimsData<double> * _kinModel2by2Distances ;
385 AimsData<double> * _interactionSurf ;
386 std::vector<double> * _labelsVolumes ;
387 float _spatialregularizationWeight ;
388 float _timeOfMaximumWeight ;
390 float _meanDist2By2 ;
392 float _meanSurfVolRatio ;
393 float _varSurfVolRatio ;
394 float _meanMaxMomentRatio ;
395 float _varMaxMomentRatio ;
398 template <
typename T>
402 const std::vector< std::list< Point3d > >&
classes = std::vector< std::list< Point3d > >(),
403 const AimsData<T>&
data = AimsData<T>() ) ;
408 virtual std::string
methodType()
const {
return "PcaReprocReconsError" ;}
411 int _nbOfSignificantVps ;
414 template <
typename T>
428 const std::vector< std::pair<Point2d, float> >&
doit( ) ;
429 const std::vector< std::pair<Point2d, float> >&
result( ) {
430 if( _result.empty() )
return doit() ;
433 std::vector<Point2d>
cut(
const std::vector< std::pair<Point2d, float> >& res,
int );
434 std::vector<Point2d>
distanceCut(
const std::vector< std::pair<Point2d, float> >& res,
float );
436 std::vector<Point2d>
maxCurvatureCut(
const std::vector< std::pair<Point2d, float> >& res );
438 void save(
const std::string& name ) ;
439 const std::vector< std::pair<Point2d, float> >&
load(
const std::string& name ) ;
445 std::vector<int> leaves(
int);
446 std::vector<int> leaves(
float);
447 void Proc(
int, std::vector<int>& );
452 const std::vector< std::list< Point3d > >& _classes ;
453 const AimsData<T>& _data ;
454 std::list<Element<T>*> _listeN;
455 std::multimap<float, Point2d> _mMap;
456 std::vector< std::pair<Point2d, float> > _result;
459 std::vector< std::set<short> > _newAgregatesConstitution ;
460 AimsData<float> _distanceBetweenInitialElements ;
463 bool _canAddElement ;
465 bool _initDistancesAlreadyComputed ;
virtual ~BaryCahElementFactory()
BaryCahElementFactory(const std::vector< std::list< Point3d > > &classes=std::vector< std::list< Point3d > >(), const AimsData< T > &data=AimsData< T >())
virtual std::string methodType() const
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
const Point3df & baryPosition() const
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)
const std::vector< float > & baryValue() const
BaryElement(int card, const aims::Individuals< float > &bary, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
const AimsData< T > & data() const
virtual std::string methodType() const =0
virtual bool initDistanceAlreadyComputed() const
virtual Element< T > * creator(int n) const =0
const std::vector< std::list< Point3d > > & classes() const
const std::vector< std::list< Point3d > > & _classes
virtual ~CahElementFactory()
virtual const AimsData< float > * initDistances() const
const AimsData< T > & _data
virtual std::list< Element< T > * > creator() const
CahElementFactory(const std::vector< std::list< Point3d > > &classes=std::vector< std::list< Point3d > >(), const AimsData< T > &data=AimsData< T >())
void save(const std::string &name)
void initialisationDist()
const std::vector< std::set< short > > & newAgregateConstitution() const
std::vector< Point2d > maxCurvatureCut(const std::vector< std::pair< Point2d, float > > &res)
const std::vector< std::pair< Point2d, float > > & doit()
const std::vector< std::pair< Point2d, float > > & load(const std::string &name)
std::vector< Point2d > distanceCut(const std::vector< std::pair< Point2d, float > > &res, float)
std::vector< Point2d > cut(const std::vector< std::pair< Point2d, float > > &res, int)
bool addElement(Element< T > *el)
Returns false if el ca not be added.
Cah(const CahElementFactory< T > *method)
const std::vector< std::pair< Point2d, float > > & result()
void setNumber(int number)
const std::set< int > & constitutedFrom() const
Element(int number, int card, const std::set< int > &constitutedFrom=std::set< int >())
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)=0
std::set< int > _constitutedFrom
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)=0
virtual std::string methodType() const
Max2By2DistanceCahElementFactory(const AimsData< float > &initDistances)
virtual ~Max2By2DistanceCahElementFactory()
virtual bool initDistanceAlreadyComputed() const
virtual std::list< Element< T > * > creator() const
const AimsData< float > * initDistances() const
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)
Max2By2DistanceElement(const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
virtual ~Max2By2DistanceElement()
virtual std::string methodType() const
PPcaCahElementFactory(int nbOfSignificantVps, const std::vector< std::list< Point3d > > &classes=std::vector< std::list< Point3d > >(), const AimsData< T > &data=AimsData< T >())
virtual ~PPcaCahElementFactory()
aims::ProbabilisticPcaElement * ppca()
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)
PPcaElement(const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, int numberOfSignificantVps, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
PcaCahElementFactory(int nbOfSignificantVps, const std::vector< std::list< Point3d > > &classes=std::vector< std::list< Point3d > >(), const AimsData< T > &data=AimsData< T >())
virtual ~PcaCahElementFactory()
virtual std::string methodType() const
float _meanReconstructionError
float _unreconstructedInertia
PcaElement(const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, int numberOfSignificantVps, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
float error(const Point3d &p, const AimsData< T > &data)
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
float _varReconstructionError
float unreconstructedInertia()
float meanReconstructionError()
AimsData< float > _errorMatrix
int _numberOfSignificantVps
std::vector< float > _mean
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)
float varReconstructionError()
void computeReconstructionError(const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data)
const AimsData< float > & errorMatrix()
PcaReprocReconsErrorCahElementFactory(int nbOfSignificantVps, const std::vector< std::list< Point3d > > &classes=std::vector< std::list< Point3d > >(), const AimsData< T > &data=AimsData< T >())
virtual ~PcaReprocReconsErrorCahElementFactory()
virtual std::string methodType() const
PcaReprocReconsErrorElement(const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, int numberOfSignificantVps, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
float unreconstructedInertia()
float varReconstructionError()
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
const AimsData< float > & errorMatrix()
virtual ~PcaReprocReconsErrorElement()
float meanReconstructionError()
virtual std::string methodType() const
virtual bool initDistanceAlreadyComputed() const
virtual ~SCKBDistanceCahElementFactory()
SCKBDistanceCahElementFactory(const std::vector< std::list< Point3d > > &classes, const std::vector< aims::DiscriminantAnalysisElement * > &classesKinDescription, const AimsData< int > &locMap, const std::vector< short > &unfusionedLabels, const std::vector< float > &classMaximaMoment, float spatialregularizationWeight=1., float timeOfMaximumWeight=0.5)
const AimsData< float > * initDistances() const
SCKBDistanceElement(const AimsData< double > *maxMomentValueRatios, const AimsData< double > *kinModel2by2Distances, const AimsData< double > *interactionSurf, const std::vector< double > *labelsVolumes, float spatialregularizationWeight, float timeOfMaximumWeight, float meanDist2By2, float varDist2By2, float meanSurfVolRatio, float varSurfVolRatio, float meanMaxMomentRatio, float varMaxMomentRatio, const std::set< int > &constitutedFrom=std::set< int >(), int number=-1)
virtual ~SCKBDistanceElement()
virtual Element< T > * agregateTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances, int newNb=-1)
virtual float distanceTo(Element< T > *other, const std::vector< std::list< Point3d > > &classes, const AimsData< T > &data, const AimsData< float > &initDistances)