File: otbKeyPointDensityImageFilter.h

package info (click to toggle)
otb 5.8.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 38,496 kB
  • ctags: 40,282
  • sloc: cpp: 306,573; ansic: 3,575; python: 450; sh: 214; perl: 74; java: 72; makefile: 70
file content (126 lines) | stat: -rw-r--r-- 4,246 bytes parent folder | download
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.

  Copyright (c) CS Systemes d'information. All rights reserved.
  See CSCopyright.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 otbKeyPointDensityImageFilter_h
#define otbKeyPointDensityImageFilter_h

#include "itkImageToImageFilter.h"
#include "otbPointSetToDensityImageFilter.h"
#include "itkNumericTraits.h"

namespace otb
{

/** \class KeyPointDensityImageFilter
 *  \brief This class computes the density of the characteristic
 *  points detected in the image.
 *
 * The density computed is a ratio of the number of keypoints over
 * the total number of pixels within a region.
 * It uses the class PointSetToDensityImageFilter to do so.
 *
 * This class use the key point detector specified in the 3rd argument
 * template to detect the keypoints. Then for every pixel, the density of the key points
 * within its neighborhood is computed.
 *
 * The output is a map of key points density.
 *
 * \ingroup OTBDensity
 */

template <class TInputImage, class TOutputImage, class TDetector>
class ITK_EXPORT KeyPointDensityImageFilter
  : public itk::ImageToImageFilter<TInputImage, TOutputImage>
{

public:

  /** Standard class typedefs. */
  typedef KeyPointDensityImageFilter                         Self;
  typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
  typedef itk::SmartPointer<Self>                            Pointer;
  typedef itk::SmartPointer<const Self>                      ConstPointer;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** Run-time type information (and related methods). */
  itkTypeMacro(KeyPointDensityImageFilter, itk::ImageToImageFilter);

  /** Template parameters typedefs*/
  typedef TInputImage                      InputImageType;
  typedef typename InputImageType::Pointer InputImagePointerType;

  /** OutputImageType typedef support*/
  typedef TOutputImage                      OutputImageType;
  typedef typename OutputImageType::Pointer OutputImagePointerType;

  /** Detector typedef Support*/
  typedef TDetector                                 DetectorType;
  typedef typename DetectorType::OutputPointSetType PointSetType;
  typedef typename DetectorType::Pointer            DetectorPointerType;

  /** PointSetToDensityImageFilter support*/
  typedef otb::PointSetToDensityImageFilter<PointSetType, OutputImageType> PointSetToDensityImageType;
  typedef typename PointSetToDensityImageType::Pointer                     PointSetToDensityImagePointerType;

  /** Get/Set the radius of the neighborhood over which the
  statistics are evaluated */
  itkSetMacro(NeighborhoodRadius, unsigned int);
  itkGetConstReferenceMacro(NeighborhoodRadius, unsigned int);

  /**Set/Get Descriptor from the otbCountmageFunction*/
  virtual void SetDetector(DetectorType* detector);
  virtual DetectorType* GetDetector();

protected:

  /**
   * Constructor.
   */
  KeyPointDensityImageFilter();
  /**
   * Destructor.
   */
  ~KeyPointDensityImageFilter() ITK_OVERRIDE;
  /**
   * Standard PrintSelf method.
   */
  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
  /**
   * Main computation method.
   */
  //virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
  void GenerateData() ITK_OVERRIDE;

private:

  KeyPointDensityImageFilter(const Self &); //purposely not implemented
  void operator =(const Self&); //purposely not implemented

  DetectorPointerType               m_Detector;
  PointSetToDensityImagePointerType m_PointSetToDensityImageFilter;
  unsigned int                      m_NeighborhoodRadius;
};
}
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbKeyPointDensityImageFilter.txx"
#endif

#endif