IStripAdjust.hpp
1 #ifndef OPALS_ISTRIPADJUST_HPP_INCLUDED
2 #define OPALS_ISTRIPADJUST_HPP_INCLUDED
3 
4 #if !defined(OPALS_EXPORTS) && !defined(OPALS_MODULE_EXPORTS)
5  #if defined _DEBUG && !defined OPALS_NO_DEBUG
6  #pragma comment(lib, "opalsStripAdjust_d.lib")
7  #else
8  #pragma comment(lib, "opalsStripAdjust.lib")
9  #endif
10 #endif
11 
12 #include <opals/IModuleBase.hpp>
13 #include <opals/Path.hpp>
14 #include <opals/Vector.hpp>
15 #include <opals/ScannerOrientation.hpp>
16 #include <opals/TrajectoryCorrectionModel.hpp>
17 #include <opals/Hemisphere.hpp>
18 #include <opals/StripAdjustStage.hpp>
19 
20 namespace opals
21 {
22 
23  namespace opts
24  {
25  namespace StripAdjust
26  {
27  /// Options of \ref ModuleStripAdjust
28  typedef IGroup< Names::_, false, Cons<
29  ILeaf< Names::outDirectory, false, Path >, Cons<
30  ILeaf< Names::oFilter, false, String >, Cons<
31  ILeaf< Names::deleteTempData, false, bool >, Cons<
32  IGroup< Names::utm, false, Cons<
33  ILeaf< Names::zone, false, unsigned >, Cons<
34  ILeaf< Names::hemisphere, false, Hemisphere::Type >
35  > > >, Cons<
36  IGroup< Names::adjustment, false, Cons<
37  ILeaf< Names::voxelSize, false, double >, Cons<
38  ILeaf< Names::maxIter, false, unsigned >, Cons<
39  ILeaf< Names::robustIter, false, unsigned >, Cons<
40  ILeaf< Names::covariance, false, bool >
41  > > > > >, Cons<
42  IGroup< Names::strips, false, Cons<
43  IVector< Names::strips, false, Cons<
44  ILeaf< Names::inFile, false, Path >, Cons<
45  ILeaf< Names::iFormat, false, String >, Cons<
46  ILeaf< Names::outFile, false, Path >, Cons<
47  ILeaf< Names::oFormat, false, String >, Cons<
48  ILeaf< Names::scannerOrientation, false, ScannerOrientation::Type >, Cons<
49  ILeaf< Names::session, false, unsigned >, Cons<
50  IGroup< Names::filter, false, Cons<
51  ILeaf< Names::gridMask, false, Path >, Cons<
52  ILeaf< Names::iFilter, false, String >
53  > > >, Cons<
54  IGroup< Names::trajectory, false, Cons<
55  ILeaf< Names::correctionModel, false, TrajectoryCorrectionModel::Type >, Cons<
56  ILeaf< Names::samplingInterval, false, double >, Cons<
57  IGroup< Names::boundaryDerivativeIsZero, false, Cons<
58  ILeaf< Names::first, false, bool >, Cons<
59  ILeaf< Names::second, false, bool >
60  > > >, Cons<
61  IGroup< Names::dX, false, Cons<
62  ILeaf< Names::value, false, double >, Cons<
63  ILeaf< Names::sigmaApriori, false, double >
64  > > >, Cons<
65  IGroup< Names::dY, false, Cons<
66  ILeaf< Names::value, false, double >, Cons<
67  ILeaf< Names::sigmaApriori, false, double >
68  > > >, Cons<
69  IGroup< Names::dZ, false, Cons<
70  ILeaf< Names::value, false, double >, Cons<
71  ILeaf< Names::sigmaApriori, false, double >
72  > > >, Cons<
73  IGroup< Names::dRoll, false, Cons<
74  ILeaf< Names::value, false, double >, Cons<
75  ILeaf< Names::sigmaApriori, false, double >
76  > > >, Cons<
77  IGroup< Names::dPitch, false, Cons<
78  ILeaf< Names::value, false, double >, Cons<
79  ILeaf< Names::sigmaApriori, false, double >
80  > > >, Cons<
81  IGroup< Names::dYaw, false, Cons<
82  ILeaf< Names::value, false, double >, Cons<
83  ILeaf< Names::sigmaApriori, false, double >
84  > > >
85  > > > > > > > > > >
86  > > > > > > > > >, Cons<
87  IGroup< Names::normals, false, Cons<
88  ILeaf< Names::searchRadius, false, double >, Cons<
89  ILeaf< Names::neighbours, false, unsigned >
90  > > >, Cons<
91  ILeaf< Names::subsetRadius, false, double >, Cons<
92  ILeaf< Names::maxPointDensity, false, double >
93  > > > > >, Cons<
94  IGroup< Names::controlPointClouds, false, Cons<
95  ILeaf< Names::inFile, false, Vector<Path> >, Cons<
96  ILeaf< Names::iFormat, false, Vector<String> >, Cons<
97  IGroup< Names::normals, false, Cons<
98  ILeaf< Names::searchRadius, false, double >, Cons<
99  ILeaf< Names::neighbours, false, unsigned >
100  > > >, Cons<
101  ILeaf< Names::subsetRadius, false, double >, Cons<
102  ILeaf< Names::maxPointDensity, false, double >
103  > > > > > >, Cons<
104  IGroup< Names::groundControlPoints, false, Cons<
105  ILeaf< Names::inFile, false, Path >, Cons<
106  ILeaf< Names::iFormat, false, String >, Cons<
107  IGroup< Names::X, false, Cons<
108  ILeaf< Names::sigmaApriori, false, double >
109  > >, Cons<
110  IGroup< Names::Y, false, Cons<
111  ILeaf< Names::sigmaApriori, false, double >
112  > >, Cons<
113  IGroup< Names::Z, false, Cons<
114  ILeaf< Names::sigmaApriori, false, double >
115  > >, Cons<
116  ILeaf< Names::checkPoints, false, Vector<int> >
117  > > > > > > >, Cons<
118  IGroup< Names::images, false, Cons<
119  IVector< Names::images, false, Cons<
120  ILeaf< Names::inFile, false, Path >, Cons<
121  ILeaf< Names::camera, false, unsigned >, Cons<
122  ILeaf< Names::strip, false, unsigned >, Cons<
123  IGroup< Names::extOri, false, Cons<
124  IGroup< Names::X0, false, Cons<
125  ILeaf< Names::value, true, double >, Cons<
126  ILeaf< Names::sigmaApriori, false, double >
127  > > >, Cons<
128  IGroup< Names::Y0, false, Cons<
129  ILeaf< Names::value, true, double >, Cons<
130  ILeaf< Names::sigmaApriori, false, double >
131  > > >, Cons<
132  IGroup< Names::Z0, false, Cons<
133  ILeaf< Names::value, true, double >, Cons<
134  ILeaf< Names::sigmaApriori, false, double >
135  > > >, Cons<
136  IGroup< Names::omega, false, Cons<
137  ILeaf< Names::value, true, double >, Cons<
138  ILeaf< Names::sigmaApriori, false, double >
139  > > >, Cons<
140  IGroup< Names::phi, false, Cons<
141  ILeaf< Names::value, true, double >, Cons<
142  ILeaf< Names::sigmaApriori, false, double >
143  > > >, Cons<
144  IGroup< Names::kappa, false, Cons<
145  ILeaf< Names::value, true, double >, Cons<
146  ILeaf< Names::sigmaApriori, false, double >
147  > > >
148  > > > > > > >, Cons<
149  IGroup< Names::dExtOri, false, Cons<
150  IGroup< Names::dX0, false, Cons<
151  ILeaf< Names::value, false, double >, Cons<
152  ILeaf< Names::sigmaApriori, false, double >
153  > > >, Cons<
154  IGroup< Names::dY0, false, Cons<
155  ILeaf< Names::value, false, double >, Cons<
156  ILeaf< Names::sigmaApriori, false, double >
157  > > >, Cons<
158  IGroup< Names::dZ0, false, Cons<
159  ILeaf< Names::value, false, double >, Cons<
160  ILeaf< Names::sigmaApriori, false, double >
161  > > >, Cons<
162  IGroup< Names::dOmega, false, Cons<
163  ILeaf< Names::value, false, double >, Cons<
164  ILeaf< Names::sigmaApriori, false, double >
165  > > >, Cons<
166  IGroup< Names::dPhi, false, Cons<
167  ILeaf< Names::value, false, double >, Cons<
168  ILeaf< Names::sigmaApriori, false, double >
169  > > >, Cons<
170  IGroup< Names::dKappa, false, Cons<
171  ILeaf< Names::value, false, double >, Cons<
172  ILeaf< Names::sigmaApriori, false, double >
173  > > >
174  > > > > > > >, Cons<
175  ILeaf< Names::oriFile, false, Path >, Cons<
176  ILeaf< Names::oriFormat, false, Path >, Cons<
177  ILeaf< Names::obsFile, false, Path >, Cons<
178  ILeaf< Names::undistort, false, bool >
179  > > > > > > > > > >, Cons<
180  IGroup< Names::forwardIntersect, false, Cons<
181  IGroup< Names::extOri, false, Cons<
182  IGroup< Names::X0, false, Cons<
183  ILeaf< Names::sigmaApriori, false, double >
184  > >, Cons<
185  IGroup< Names::Y0, false, Cons<
186  ILeaf< Names::sigmaApriori, false, double >
187  > >, Cons<
188  IGroup< Names::Z0, false, Cons<
189  ILeaf< Names::sigmaApriori, false, double >
190  > >, Cons<
191  IGroup< Names::omega, false, Cons<
192  ILeaf< Names::sigmaApriori, false, double >
193  > >, Cons<
194  IGroup< Names::phi, false, Cons<
195  ILeaf< Names::sigmaApriori, false, double >
196  > >, Cons<
197  IGroup< Names::kappa, false, Cons<
198  ILeaf< Names::sigmaApriori, false, double >
199  > >
200  > > > > > > >, Cons<
201  IGroup< Names::dExtOri, false, Cons<
202  IGroup< Names::dX0, false, Cons<
203  ILeaf< Names::sigmaApriori, false, double >
204  > >, Cons<
205  IGroup< Names::dY0, false, Cons<
206  ILeaf< Names::sigmaApriori, false, double >
207  > >, Cons<
208  IGroup< Names::dZ0, false, Cons<
209  ILeaf< Names::sigmaApriori, false, double >
210  > >, Cons<
211  IGroup< Names::dOmega, false, Cons<
212  ILeaf< Names::sigmaApriori, false, double >
213  > >, Cons<
214  IGroup< Names::dPhi, false, Cons<
215  ILeaf< Names::sigmaApriori, false, double >
216  > >, Cons<
217  IGroup< Names::dKappa, false, Cons<
218  ILeaf< Names::sigmaApriori, false, double >
219  > >
220  > > > > > > >, Cons<
221  IGroup< Names::intOri, false, Cons<
222  IGroup< Names::c, false, Cons<
223  ILeaf< Names::sigmaApriori, false, double >
224  > >, Cons<
225  IGroup< Names::X0, false, Cons<
226  ILeaf< Names::sigmaApriori, false, double >
227  > >, Cons<
228  IGroup< Names::Y0, false, Cons<
229  ILeaf< Names::sigmaApriori, false, double >
230  > >
231  > > > >, Cons<
232  IGroup< Names::distortion, false, Cons<
233  IGroup< Names::a3, false, Cons<
234  ILeaf< Names::sigmaApriori, false, double >
235  > >, Cons<
236  IGroup< Names::a4, false, Cons<
237  ILeaf< Names::sigmaApriori, false, double >
238  > >, Cons<
239  IGroup< Names::a5, false, Cons<
240  ILeaf< Names::sigmaApriori, false, double >
241  > >, Cons<
242  IGroup< Names::a6, false, Cons<
243  ILeaf< Names::sigmaApriori, false, double >
244  > >
245  > > > > >, Cons<
246  IGroup< Names::leverArm, false, Cons<
247  IGroup< Names::X, false, Cons<
248  ILeaf< Names::sigmaApriori, false, double >
249  > >, Cons<
250  IGroup< Names::Y, false, Cons<
251  ILeaf< Names::sigmaApriori, false, double >
252  > >, Cons<
253  IGroup< Names::Z, false, Cons<
254  ILeaf< Names::sigmaApriori, false, double >
255  > >
256  > > > >, Cons<
257  IGroup< Names::misalignment, false, Cons<
258  IGroup< Names::omega, false, Cons<
259  ILeaf< Names::sigmaApriori, false, double >
260  > >, Cons<
261  IGroup< Names::phi, false, Cons<
262  ILeaf< Names::sigmaApriori, false, double >
263  > >, Cons<
264  IGroup< Names::kappa, false, Cons<
265  ILeaf< Names::sigmaApriori, false, double >
266  > >
267  > > > >, Cons<
268  ILeaf< Names::maxReprojectionError, false, double >
269  > > > > > > > >
270  > > >, Cons<
271  IVector< Names::sessions, false, Cons<
272  IGroup< Names::trajectory, false, Cons<
273  ILeaf< Names::inFile, false, Path >, Cons<
274  ILeaf< Names::iFormat, false, String >, Cons<
275  ILeaf< Names::timeLag, false, double >
276  > > > >, Cons<
277  IGroup< Names::leverArm, false, Cons<
278  IGroup< Names::X, false, Cons<
279  ILeaf< Names::value, false, double >, Cons<
280  ILeaf< Names::sigmaApriori, false, double >
281  > > >, Cons<
282  IGroup< Names::Y, false, Cons<
283  ILeaf< Names::value, false, double >, Cons<
284  ILeaf< Names::sigmaApriori, false, double >
285  > > >, Cons<
286  IGroup< Names::Z, false, Cons<
287  ILeaf< Names::value, false, double >, Cons<
288  ILeaf< Names::sigmaApriori, false, double >
289  > > >
290  > > > >, Cons<
291  IGroup< Names::misalignment, false, Cons<
292  IGroup< Names::omega, false, Cons<
293  ILeaf< Names::value, false, double >, Cons<
294  ILeaf< Names::sigmaApriori, false, double >
295  > > >, Cons<
296  IGroup< Names::phi, false, Cons<
297  ILeaf< Names::value, false, double >, Cons<
298  ILeaf< Names::sigmaApriori, false, double >
299  > > >, Cons<
300  IGroup< Names::kappa, false, Cons<
301  ILeaf< Names::value, false, double >, Cons<
302  ILeaf< Names::sigmaApriori, false, double >
303  > > >
304  > > > >, Cons<
305  IGroup< Names::scanner, false, Cons<
306  IGroup< Names::range, false, Cons<
307  IGroup< Names::offset, false, Cons<
308  ILeaf< Names::value, false, double >, Cons<
309  ILeaf< Names::sigmaApriori, false, double >
310  > > >, Cons<
311  IGroup< Names::scale, false, Cons<
312  ILeaf< Names::value, false, double >, Cons<
313  ILeaf< Names::sigmaApriori, false, double >
314  > > >
315  > > >, Cons<
316  IGroup< Names::scanAngle, false, Cons<
317  IGroup< Names::offset, false, Cons<
318  ILeaf< Names::value, false, double >, Cons<
319  ILeaf< Names::sigmaApriori, false, double >
320  > > >, Cons<
321  IGroup< Names::scale, false, Cons<
322  ILeaf< Names::value, false, double >, Cons<
323  ILeaf< Names::sigmaApriori, false, double >
324  > > >
325  > > >, Cons<
326  IGroup< Names::tiltAngle, false, Cons<
327  IGroup< Names::offset, false, Cons<
328  ILeaf< Names::value, false, double >, Cons<
329  ILeaf< Names::sigmaApriori, false, double >
330  > > >, Cons<
331  IGroup< Names::scale, false, Cons<
332  ILeaf< Names::value, false, double >, Cons<
333  ILeaf< Names::sigmaApriori, false, double >
334  > > >
335  > > >
336  > > > >, Cons<
337  IGroup< Names::datum, false, Cons<
338  IGroup< Names::dX, false, Cons<
339  ILeaf< Names::value, false, double >, Cons<
340  ILeaf< Names::sigmaApriori, false, double >
341  > > >, Cons<
342  IGroup< Names::dY, false, Cons<
343  ILeaf< Names::value, false, double >, Cons<
344  ILeaf< Names::sigmaApriori, false, double >
345  > > >, Cons<
346  IGroup< Names::dZ, false, Cons<
347  ILeaf< Names::value, false, double >, Cons<
348  ILeaf< Names::sigmaApriori, false, double >
349  > > >
350  > > > >
351  > > > > > >, Cons<
352  IVector< Names::cameras, false, Cons<
353  IGroup< Names::intOri, false, Cons<
354  IGroup< Names::c, false, Cons<
355  ILeaf< Names::value, false, double >, Cons<
356  ILeaf< Names::sigmaApriori, false, double >
357  > > >, Cons<
358  IGroup< Names::X0, false, Cons<
359  ILeaf< Names::value, false, double >, Cons<
360  ILeaf< Names::sigmaApriori, false, double >
361  > > >, Cons<
362  IGroup< Names::Y0, false, Cons<
363  ILeaf< Names::value, false, double >, Cons<
364  ILeaf< Names::sigmaApriori, false, double >
365  > > >
366  > > > >, Cons<
367  IGroup< Names::distortion, false, Cons<
368  IGroup< Names::a3, false, Cons<
369  ILeaf< Names::value, false, double >, Cons<
370  ILeaf< Names::sigmaApriori, false, double >
371  > > >, Cons<
372  IGroup< Names::a4, false, Cons<
373  ILeaf< Names::value, false, double >, Cons<
374  ILeaf< Names::sigmaApriori, false, double >
375  > > >, Cons<
376  IGroup< Names::a5, false, Cons<
377  ILeaf< Names::value, false, double >, Cons<
378  ILeaf< Names::sigmaApriori, false, double >
379  > > >, Cons<
380  IGroup< Names::a6, false, Cons<
381  ILeaf< Names::value, false, double >, Cons<
382  ILeaf< Names::sigmaApriori, false, double >
383  > > >, Cons<
384  ILeaf< Names::rho0, false, double >
385  > > > > > >, Cons<
386  IGroup< Names::leverArm, false, Cons<
387  IGroup< Names::X, false, Cons<
388  ILeaf< Names::value, false, double >, Cons<
389  ILeaf< Names::sigmaApriori, false, double >
390  > > >, Cons<
391  IGroup< Names::Y, false, Cons<
392  ILeaf< Names::value, false, double >, Cons<
393  ILeaf< Names::sigmaApriori, false, double >
394  > > >, Cons<
395  IGroup< Names::Z, false, Cons<
396  ILeaf< Names::value, false, double >, Cons<
397  ILeaf< Names::sigmaApriori, false, double >
398  > > >
399  > > > >, Cons<
400  IGroup< Names::misalignment, false, Cons<
401  IGroup< Names::omega, false, Cons<
402  ILeaf< Names::value, false, double >, Cons<
403  ILeaf< Names::sigmaApriori, false, double >
404  > > >, Cons<
405  IGroup< Names::phi, false, Cons<
406  ILeaf< Names::value, false, double >, Cons<
407  ILeaf< Names::sigmaApriori, false, double >
408  > > >, Cons<
409  IGroup< Names::kappa, false, Cons<
410  ILeaf< Names::value, false, double >, Cons<
411  ILeaf< Names::sigmaApriori, false, double >
412  > > >
413  > > > >, Cons<
414  ILeaf< Names::xSigPriori, false, double >, Cons<
415  ILeaf< Names::ySigPriori, false, double >
416  > > > > > > >, Cons<
417  IGroup< Names::correspondences, false, Cons<
418  IGroup< Names::strip2strip, false, Cons<
419  ILeaf< Names::overlap, false, unsigned >, Cons<
420  IGroup< Names::selection, false, Cons<
421  ILeaf< Names::samplingDist, false, double >, Cons<
422  ILeaf< Names::normalSpaceSampling, false, double >, Cons<
423  ILeaf< Names::maxLeverageSampling, false, double >, Cons<
424  ILeaf< Names::maxRoughness, false, double >
425  > > > > >, Cons<
426  IGroup< Names::weighting, false, Cons<
427  ILeaf< Names::byDeltaAngle, false, bool >, Cons<
428  ILeaf< Names::byRoughness, false, bool >
429  > > >, Cons<
430  IGroup< Names::rejection, false, Cons<
431  ILeaf< Names::maxDist, false, double >, Cons<
432  ILeaf< Names::maxAngleDev, false, double >, Cons<
433  ILeaf< Names::maxSigmaMAD, false, double >, Cons<
434  ILeaf< Names::maxRoughness, false, double >
435  > > > > >
436  > > > > >, Cons<
437  IGroup< Names::control2strip, false, Cons<
438  ILeaf< Names::overlap, false, unsigned >, Cons<
439  IGroup< Names::selection, false, Cons<
440  ILeaf< Names::samplingDist, false, double >, Cons<
441  ILeaf< Names::normalSpaceSampling, false, double >, Cons<
442  ILeaf< Names::maxLeverageSampling, false, double >, Cons<
443  ILeaf< Names::maxRoughness, false, double >
444  > > > > >, Cons<
445  IGroup< Names::weighting, false, Cons<
446  ILeaf< Names::byDeltaAngle, false, bool >, Cons<
447  ILeaf< Names::byRoughness, false, bool >
448  > > >, Cons<
449  IGroup< Names::rejection, false, Cons<
450  ILeaf< Names::maxDist, false, double >, Cons<
451  ILeaf< Names::maxAngleDev, false, double >, Cons<
452  ILeaf< Names::maxSigmaMAD, false, double >, Cons<
453  ILeaf< Names::maxRoughness, false, double >
454  > > > > >, Cons<
455  ILeaf< Names::dpSigPriori, false, double >
456  > > > > > >, Cons<
457  IGroup< Names::image2image, false, Cons<
458  ILeaf< Names::minImageCount, false, unsigned >, Cons<
459  IGroup< Names::selection, false, Cons<
460  ILeaf< Names::samplingDist, false, double >
461  > >
462  > > >, Cons<
463  IGroup< Names::image2strip, false, Cons<
464  ILeaf< Names::overlap, false, unsigned >, Cons<
465  IGroup< Names::selection, false, Cons<
466  ILeaf< Names::samplingDist, false, double >
467  > >, Cons<
468  IGroup< Names::weighting, false, Cons<
469  ILeaf< Names::byRoughness, false, bool >
470  > >, Cons<
471  IGroup< Names::rejection, false, Cons<
472  ILeaf< Names::maxDist, false, double >, Cons<
473  ILeaf< Names::maxSigmaMAD, false, double >, Cons<
474  ILeaf< Names::maxRoughness, false, double >
475  > > > >, Cons<
476  ILeaf< Names::dpSigPriori, false, double >
477  > > > > > >
478  > > > > >, Cons<
479  IGroup< Names::workflow, false, Cons<
480  IGroup< Names::stages, false, Cons<
481  ILeaf< Names::first, false, StripAdjustStage::Type >, Cons<
482  ILeaf< Names::last, false, StripAdjustStage::Type >
483  > > >, Cons<
484  ILeaf< Names::strips, false, Vector<unsigned> >, Cons<
485  ILeaf< Names::controlPointClouds, false, Vector<unsigned> >, Cons<
486  ILeaf< Names::images, false, Vector<unsigned> >
487  > > > > >
488  > > > > > > > > > > > > > > Options;
489  }
490  }
491 
492  /// Improves the geo-referencing of ALS data and aerial images in a rigorous way combining strip adjustment and aerial triangulation.
493  /** This module performs a rigorous strip adjustment of ALS strips.
494  The ALS multisensor system is recalibrated by estimating correction parameters for the original observations.
495  Similar to the ICP algorithm, point-to-plane distances between corresponding points are iteratively minimized. */
496  /// \see \ref ModuleStripAdjust
497  class OPALS_API IStripAdjust : virtual public IModuleBase
498  {
499 
500  public:
501  static IStripAdjust* New();
502  static IStripAdjust* New( IControlObject &controlObject );
503  static IStripAdjust* New( const IModuleBase &parent );
504  static IStripAdjust* New( const IModuleBase &parent, IControlObject &controlObject );
505 
506  virtual ~IStripAdjust() {}
507 
508  /// \name Access to module-specific options.
509  ///@{
511  virtual Options& opts() = 0;
512  virtual const Options& opts() const = 0;
513  ///}@
514 
515  };
516 
517 }
518 
519 #endif