OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimHlzTool.h
Go to the documentation of this file.
1 //**************************************************************************************************
2 //
3 // OSSIM Open Source Geospatial Data Processing Library
4 // See top level LICENSE.txt file for license information
5 //
6 //**************************************************************************************************
7 
8 #ifndef ossimHLZUtil_HEADER
9 #define ossimHLZUtil_HEADER
10 
11 #include <ossim/base/ossimRefPtr.h>
14 #include <ossim/base/ossimIpt.h>
15 #include <ossim/base/ossimIrect.h>
16 #include <ossim/base/ossimGrect.h>
28 #include <vector>
29 
30 #include <mutex>
36 {
37 public:
38  ossimHlzTool();
39  ~ossimHlzTool();
40 
41  virtual void setUsage(ossimArgumentParser& ap);
42  virtual bool initialize(ossimArgumentParser& ap);
43  virtual void initialize(const ossimKeywordlist& kwl);
44  virtual bool execute();
45  virtual ossimRefPtr<ossimImageData> getChip(const ossimIrect& img_rect);
46 
47  virtual ossimString getClassName() const { return "ossimHlzUtil"; }
48 
50  static const char* DESCRIPTION;
51 
52 protected:
53  class MaskSource
54  {
55  public:
56  MaskSource(ossimHlzTool* hlzUtil, const ossimFilename& mask_image, bool exclude);
58  bool exclude;
59  };
60 
61  virtual void initProcessingChain();
62 
64  ossimHlzTool( const ossimHlzTool& obj );
65 
67  const ossimHlzTool& operator=( const ossimHlzTool& rhs );
68 
70  void usage(ossimArgumentParser& ap);
71  void addArguments(ossimArgumentParser& ap);
72  void loadPcFiles(); // throws exception
73  void loadMaskFiles(); // throws exception
74  void writeSlopeImage();
75  void setProductGSD(const double& meters_per_pixel);
76  bool computeHLZ();
77 
78  double m_slopeThreshold; // (degrees)
79  double m_roughnessThreshold; // peak deviation from plane (meters)
80  double m_hlzMinRadius; // meters
81  ossimFilename m_slopeFile; // optional byproduct output
91  std::vector< ossimRefPtr<ossimPointCloudHandler> > m_pcSources;
92  std::vector<MaskSource> m_maskSources;
93 
94  // For debugging:
96  double d_accumT;
97 
98  class PatchProcessorJob : public ossimJob
99  {
100  public:
101  PatchProcessorJob(ossimHlzTool* hlzUtil, const ossimIpt& origin, ossim_uint32 chip_id=0);
102 
103  virtual bool level1Test() = 0;
104  bool level2Test();
105  bool maskTest();
106 
111  float m_nullValue;
112 
113  // ossim_uint32 m_chipId; // for debug
114  static std::mutex m_bufMutex;
115 
116  protected:
117  virtual void run();
118 
119  };
120 
122  {
123  public:
124  LsFitPatchProcessorJob(ossimHlzTool* hlzUtil, const ossimIpt& origin, ossim_uint32 chip_id=0)
125  : PatchProcessorJob(hlzUtil, origin, chip_id),
126  m_plane (new ossimLeastSquaresPlane) {}
127 
128  ~LsFitPatchProcessorJob() { delete m_plane; }
129  virtual bool level1Test();
131  };
132 
134  {
135  public:
136  NormPatchProcessorJob(ossimHlzTool* hlzUtil, const ossimIpt& origin, ossim_uint32 chip_id=0)
137  : PatchProcessorJob(hlzUtil, origin, chip_id) {}
138 
139  virtual bool level1Test();
140  };
141 
142 };
143 
144 #endif
double m_slopeThreshold
Definition: ossimHlzTool.h:78
virtual bool initialize(ossimArgumentParser &ap)
Initial method to be ran prior to execute.
ossimRefPtr< ossimImageData > getChip()
Get chip method that assumes pre-initialized state.
virtual void initProcessingChain()=0
Derived classes initialize their custom chains here.
void usage()
#define OSSIMDLLEXPORT
std::vector< ossimRefPtr< ossimPointCloudHandler > > m_pcSources
Definition: ossimHlzTool.h:91
ossim_uint8 m_goodLzValue
Definition: ossimHlzTool.h:88
Represents serializable keyword/value map.
double m_roughnessThreshold
Definition: ossimHlzTool.h:79
bool m_useLsFitMethod
Definition: ossimHlzTool.h:89
ossim_uint8 m_badLzValue
Definition: ossimHlzTool.h:86
ossimRefPtr< ossimMemoryImageSource > m_memSource
Definition: ossimHlzTool.h:85
double d_accumT
Definition: ossimHlzTool.h:96
static const char * DESCRIPTION
Used by ossimUtilityFactory.
Definition: ossimHlzTool.h:50
ossim_uint32 m_numThreads
Definition: ossimHlzTool.h:95
virtual ossimString getClassName() const
Definition: ossimHlzTool.h:47
ossimIpt m_demFilterSize
Definition: ossimHlzTool.h:82
virtual void setUsage(ossimArgumentParser &ap)
Initializes the aurgument parser with expected parameters and options.
ossimRefPtr< ossimImageData > m_demBuffer
Definition: ossimHlzTool.h:83
ossimLeastSquaresPlane * m_plane
Definition: ossimHlzTool.h:130
ossimRefPtr< ossimImageSource > m_combinedElevSource
Definition: ossimHlzTool.h:90
unsigned int ossim_uint32
NormPatchProcessorJob(ossimHlzTool *hlzUtil, const ossimIpt &origin, ossim_uint32 chip_id=0)
Definition: ossimHlzTool.h:136
ossimRefPtr< ossimImageData > m_outBuffer
Definition: ossimHlzTool.h:84
ossim_uint8 m_marginalLzValue
Definition: ossimHlzTool.h:87
double m_hlzMinRadius
Definition: ossimHlzTool.h:80
This is the job callback interface It allows one to attach and listen for different states of the job...
Definition: ossimJob.h:149
ossimFilename m_slopeFile
Definition: ossimHlzTool.h:81
ossimRefPtr< ossimSingleImageChain > image
Definition: ossimHlzTool.h:57
std::vector< MaskSource > m_maskSources
Definition: ossimHlzTool.h:92
const ossimChipProcTool & operator=(const ossimChipProcTool &)
Hidden from use assignment operator.
virtual bool execute()
Performs the actual product write.
unsigned char ossim_uint8
Provide 2D Least Squares Plane model fitting The math model is that of a plane of the form: ...
LsFitPatchProcessorJob(ossimHlzTool *hlzUtil, const ossimIpt &origin, ossim_uint32 chip_id=0)
Definition: ossimHlzTool.h:124