File: itkSelectiveSubsampleGenerator.h

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 80,652 kB
  • sloc: cpp: 458,133; ansic: 196,223; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 430; csh: 220; perl: 193; xml: 20
file content (114 lines) | stat: -rw-r--r-- 3,746 bytes parent folder | download | duplicates (2)
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
/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    itkSelectiveSubsampleGenerator.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 __itkSelectiveSubsampleGenerator_h
#define __itkSelectiveSubsampleGenerator_h


#include "itkObject.h"
#include "itkMembershipSample.h"

namespace itk {
namespace Statistics {

/** \class SelectiveSubsampleGenerator
 * \brief SelectiveSubsampleGenerator generates a Subsample object
 * that includes measurement vectors that belong to the classes that
 * are specified by the SetSelectedClassLabels method.
 *
 * To instantiate an object of this class you have to provide two 
 * template arguments: the type of the input sample and the type of 
 * class mask sample. 
 * 
 * The input sample is a sample that has all the measurement vectors and
 * the class mask sample contains class labels for their corresponding
 * measurement vectors in the input sample. Therefore, the sizes of both
 * should be the same.
 *
 * To generate a subsample that a part of the input sample that belongs
 * to a set of classes, you should call SetSelectedClassLabels method 
 * with the class labels that you want to include in the output. 
 *
 * \sa Subsample
 */

template< class TInputSample, class TClassMaskSample >
class ITK_EXPORT SelectiveSubsampleGenerator : 
      public Object
{
public:
  /** Standard class typedefs. */
  typedef SelectiveSubsampleGenerator Self;
  typedef Object                      Superclass;
  typedef SmartPointer<Self>          Pointer;
  typedef SmartPointer<const Self>    ConstPointer;

  /** Standard Macros */
  itkTypeMacro(SelectiveSubsampleGenerator, Object);
  itkNewMacro(Self);

  /** Input sample types alias */
  typedef typename TInputSample::MeasurementVectorType MeasurementVectorType;

  typedef typename TClassMaskSample::MeasurementType ClassLabelType;
  typedef std::vector< ClassLabelType >              ClassLabelVectorType;

  /** Output: MembershipSample types */
  typedef Subsample< TInputSample >    OutputType;
  typedef typename OutputType::Pointer OutputPointer;

  /** Stores the input sample */
  void SetInput(TInputSample* sample);
  
  /** Returns the input sample pointer */
  TInputSample* GetInput();

  /** Stores the class mask sample */
  void SetClassMask(const TClassMaskSample* classMask);

  /** Returns the class mask sample pointer */
  const TClassMaskSample* GetClassMask() const;

  void SetSelectedClassLabels( const ClassLabelVectorType& classLabels )
  { m_SelectedClassLabels = classLabels; }

  /** Returns the pointer to the MembershipSample object
   * that has been generated by this */
  const OutputType * GetOutput() const;

  /** The actual output generation procedure. */
  void GenerateData();

protected:
  SelectiveSubsampleGenerator();
  virtual ~SelectiveSubsampleGenerator() {}
  void PrintSelf(std::ostream& os, Indent indent) const;

private:
  TInputSample*           m_Input;
  const TClassMaskSample* m_ClassMask;
  ClassLabelVectorType    m_SelectedClassLabels;
  OutputPointer           m_Output;
}; // end of class

} // end namespace Statistics
} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#include "itkSelectiveSubsampleGenerator.txx"
#endif

#endif