Blender.h
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/rp/Blender.h
22  \brief Blended pixel value calculation for two overlaped rasters.
23  */
24 
25 #ifndef __TERRALIB_RP_INTERNAL_BLENDER_H
26 #define __TERRALIB_RP_INTERNAL_BLENDER_H
27 
28 #include "Config.h"
29 #include "Macros.h"
30 #include "BlenderRule.h"
31 #include "../raster/Grid.h"
32 #include "../raster/Raster.h"
33 #include "../raster/Interpolator.h"
34 #include "../raster/RasterSynchronizer.h"
35 #include "../raster/TileIndexer.h"
36 #include "../geometry/Polygon.h"
37 #include "../geometry/MultiPolygon.h"
38 #include "../geometry/Point.h"
39 #include "../geometry/GeometricTransformation.h"
40 
41 #include <boost/noncopyable.hpp>
42 #include <boost/ptr_container/ptr_vector.hpp>
43 
44 #include <vector>
45 #include <complex>
46 #include <memory>
47 #include <thread>
48 
49 namespace te
50 {
51  namespace rp
52  {
53  /*!
54  \class Blender
55  \brief Blended pixel value calculation for two overlaped rasters.
56  \details The overlap between the two images is modeled by the given geometric transformation direct mapping input raster 1 indexed coords (line, column) to input raster 2 indexed coords.
57  \note Optimized for rasters where all bands have the same blocking scheme.
58  \ingroup rp_aux
59  */
60  class TERPEXPORT Blender : public boost::noncopyable
61  {
62  public:
63 
64  /*!
65  \typedef BlendMethod te::rp::Blender class pixel blend methods.
66  */
68 
69  /*! Default constructor. */
71 
72  /*! Default destructor. */
74 
75  /*!
76  \brief Inititate the blender instance.
77  \param raster1 Input raster 1.
78  \param raster1Bands Input raster 1 band indexes to use.
79  \param raster2 Input raster 2.
80  \param raster2Bands Input raster 2 band indexes to use (this vector has the same size as raster1Bands).
81  \param blendMethod The blend method to apply.
82  \param interpMethod1 The interpolation method to use when reading raster 1 data.
83  \param interpMethod2 The interpolation method to use when reading raster 2 data.
84  \param noDataValue The value returned where there is no pixel data bo blend.
85  \param forceRaster1NoDataValue Use noDataValue as the input raster 1 no-data value (The original rasters no-data values will be ignored)
86  \param forceRaster2NoDataValue Use noDataValue as the input raster 1 no-data value (The original rasters no-data values will be ignored)
87  \param pixelOffsets1 The values offset to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
88  \param pixelScales1 The values scale to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
89  \param pixelOffsets2 The values offset to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
90  \param pixelScales2 The values scale to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
91  \param r1ValidDataDelimiterPtr A pointer to a geometry (raster 1 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
92  \param r2ValidDataDelimiterPtr A pointer to a geometry (raster 2 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
93  \param geomTransformation A transformation mapping raster 1 pixels ( te::gm::GTParameters::TiePoint::first ) to raster 2 pixels ( te::gm::GTParameters::TiePoint::second ) (Note: all coords are indexed by lines/columns).
94  \param threadsNumber Enable/disable the use of threads when applicable (0:automatic , 1:disabled, any other integer dictates the number of threads).
95  \param enableProgressInterface Enable/disable the use of a progress interface when applicable.
96  \param rulePtr A pointer to a valid blender rule (this implies using RulesMethod on the blendMethod parameter) or a null pointer.
97  \param enableRasterCache Enable/disable the use of raster cache.
98  \return true if ok, false on errors
99  \note Aboute scale and offset parametrs: outValue = ( inputValue * scale ) + offset
100  */
101  bool initialize(
102  te::rst::Raster& raster1,
103  const std::vector< unsigned int >& raster1Bands,
104  const te::rst::Raster& raster2,
105  const std::vector< unsigned int >& raster2Bands,
106  const BlendMethod& blendMethod,
107  const te::rst::Interpolator::Method& interpMethod1,
108  const te::rst::Interpolator::Method& interpMethod2,
109  const double& noDataValue,
110  const bool forceRaster1NoDataValue,
111  const bool forceRaster2NoDataValue,
112  const std::vector< double >& pixelOffsets1,
113  const std::vector< double >& pixelScales1,
114  const std::vector< double >& pixelOffsets2,
115  const std::vector< double >& pixelScales2,
116  te::gm::MultiPolygon const * const r1ValidDataDelimiterPtr,
117  te::gm::MultiPolygon const * const r2ValidDataDelimiterPtr,
118  const te::gm::GeometricTransformation& geomTransformation,
119  const unsigned int threadsNumber,
120  const bool enableProgressInterface,
121  BlenderRule const * const rulePtr,
122  const bool enableRasterCache );
123 
124 
125  /*!
126  \brief Blend a pixel value using the current parameters.
127  \param line Line (raster 1 reference).
128  \param col Column (raster 1 reference).
129  \param values A pointer to a pre-allocated vector where the blended values will be stored.
130  \note The caller of this method must be aware that the returned blended value may be outside the original input rasters valid values range.
131  \note Raster 1 values have precedence over raster 2 values (when applicable).
132  */
133  inline void getBlendedValues( const double& line, const double& col,
134  double* const values )
135  {
136  TERP_DEBUG_TRUE_OR_THROW( m_primaryBlendFuncPtr, "Invalid blend function pointer" );
137  (this->*m_primaryBlendFuncPtr)( line, col, values );
138  };
139 
140  /*!
141  \brief Execute blending of the given input rasters and write the result into raster1.
142  \note Raster 1 values have precedence over raster 2 values (when applicable).
143  */
145 
146  /*!
147  \brief Return the current error message if there is any.
148 
149  \return Return the current error message if there is any.
150  */
151  const std::string& getErrorMessage() const;
152 
153  protected:
154 
155  /*!
156  \brief Type definition for the a primary bleding function pointer.
157  \param line Raster 1 Line.
158  \param col Raster 1 Column.
159  \param values A pointer to a pre-allocated vector where the blended values will be stored.
160  \note The caller of this method must be aware that the returned blended value may be outside the original input rasters valid values range.
161  \note Raster 1 values have precedence over raster 2 values (when applicable).
162  */
163  typedef void (Blender::*PrimaryBlendFunctPtr)( const double& line,
164  const double& col, double* const values );
165 
166  /*!
167  \brief Raster block info
168  */
170  {
172  unsigned int m_blkX;
173  unsigned int m_blkY;
179  };
180 
181  /*!
182  \brief The parameters passed to blendIntoRaster1Thread method.
183  */
185  {
186  public :
187 
188  bool* m_returnValuePtr; //!< A pointer to the threadreturn value.
189  bool* m_abortValuePtr; //!< A pointer to the abort execution value.
190  te::rst::RasterSynchronizer* m_sync1Ptr; //!< Raster 1 syncronizer pointer.
191  te::rst::RasterSynchronizer* m_sync2Ptr; //!< Raster 1 syncronizer pointer.
192  std::vector< RasterBlockInfo >* m_raster1BlocksInfosPtr; //!< blocks to process.
193  std::mutex* m_mutexPtr; //!< mutex pointer.
194  std::mutex* m_blockProcessedSignalMutexPtr; //!< Mutex used to update the main process progress update.
195  std::condition_variable* m_blockProcessedSignalPtr; //!< Signal used to update the main process progress update.
196  unsigned int* m_runningThreadsCounterPtr; //!< a pointer to the running threads counter.
197  std::vector< unsigned int > const* m_raster1BandsPtr; //!< Input raster 1 band indexes to use.
198  std::vector< unsigned int > const* m_raster2BandsPtr; //!< Input raster 2 band indexes to use (this vector has the same size as raster1Bands).
199  BlendMethod m_blendMethod; //!< The blend method to apply.
200  te::rst::Interpolator::Method m_interpMethod2; //!< The interpolation method to use when reading raster 2 data.
201  double m_noDataValue; //!< The value returned where there is no pixel data bo blend.
202  bool m_forceRaster1NoDataValue; //!< Use noDataValue as the input rasters no-data value (The original rasters no-data values will be ignored)
203  bool m_forceRaster2NoDataValue; //!< Use noDataValue as the input rasters no-data value (The original rasters no-data values will be ignored)
204  std::vector< double > const* m_pixelOffsets1Ptr; //!< The values offset to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
205  std::vector< double > const* m_pixelScales1Ptr; //!< The values scale to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
206  std::vector< double > const* m_pixelOffsets2Ptr; //!< The values offset to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
207  std::vector< double > const* m_pixelScales2Ptr; //!< The values scale to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
208  te::gm::MultiPolygon const* m_r1ValidDataDelimiterPtr; //!< A pointer to a geometry (raster 1 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
209  te::gm::MultiPolygon const* m_r2ValidDataDelimiterPtr; //!< A pointer to a geometry (raster 2 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
210  te::gm::GeometricTransformation const* m_geomTransformationPtr; //!< A transformation mapping raster 1 pixels ( te::gm::GTParameters::TiePoint::first ) to raster 2 pixels ( te::gm::GTParameters::TiePoint::second ) (Note: all coords are indexed by lines/columns).
211  unsigned long int m_maxRasterCachedBlocks; //!< The maximum number of raster cache blocks.
212  bool m_useProgress; //!< If enabled each thread will use its own progress interface, if false only a signal will be emitted on each processed block.
213  BlenderRule const * m_rulePtr; // a pointer to a rula to be used or a null pointer.
214  unsigned int* m_processedBlocksNmbPtr;
215 
217 
219 
220  protected :
221 
223 
225  };
226 
227  bool m_enableProgressInterface; //!< Enable progress interface.
228  bool m_forceRaster1NoDataValue; //!< Use noDataValue as the input raster 1 no-data value (The original rasters no-data values will be ignored)
229  bool m_forceRaster2NoDataValue; //!< Use noDataValue as the input raster 2 no-data value (The original rasters no-data values will be ignored)
230  unsigned int m_threadsNumber; //!< The number of threads to use (0:automatic , 1:disabled, any other integer dictates the number of threads)..
231  BlendMethod m_blendMethod; //!< The blend method to apply.
232  PrimaryBlendFunctPtr m_primaryBlendFuncPtr; //!< The primary blend function.
233  te::rst::Raster * m_raster1Ptr; //!< Input raster 1.
234  te::rst::Raster const * m_raster2Ptr; //!< Input raster 2.
235  std::unique_ptr< te::gm::MultiPolygon > m_r1ValidDataDelimiterPtr; //!< A pointer to a geometry (raster 1 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
236  std::unique_ptr< te::gm::MultiPolygon > m_r2ValidDataDelimiterPtr; //!< A pointer to a geometry (raster 2 world/projected coords) delimiting the raster region with valid data, or null if all raster data area is valid.
237  std::unique_ptr< te::gm::Geometry > m_intersectionPtr; //!< The Intersection geometry ( raster 1 indexed coods).
238  std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > > m_r1IntersectionSegmentsPoints; //!< A sub-set of the intersection polygon wich is part of raster 1 valid data polygon ( raster 1 indexed coods).
239  std::size_t m_r1IntersectionSegmentsPointsSize; //!< Size of m_r1IntersectionSegmentsPoints;
240  std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > > m_r2IntersectionSegmentsPoints; //!< A sub-set of the intersection polygon wich is part of raster 2 valid data polygon ( raster 1 indexed coods).
241  std::size_t m_r2IntersectionSegmentsPointsSize; //!< Size of m_r2IntersectionSegmentsPoints;
242  te::gm::GeometricTransformation* m_geomTransformationPtr; //!< A transformation mapping raster 1 pixels ( te::gm::GTParameters::TiePoint::first ) to raster 2 ( te::gm::GTParameters::TiePoint::second ) (Note: all coords are indexed by lines/columns).
243  te::rst::Interpolator::Method m_interpMethod1; //!< The interpolation method to use when reading raster 1 data.
244  te::rst::Interpolator::Method m_interpMethod2; //!< The interpolation method to use when reading raster 2 data.
245  double m_outputNoDataValue; //!< The output raster no-data value.
246  std::unique_ptr< te::rst::Interpolator > m_interp1Ptr; //!< Raster 1 interpolator instance pointer.
247  std::unique_ptr< te::rst::Interpolator > m_interp2Ptr; //!< Raster 2 interpolator instance pointer.
248  std::vector< unsigned int > m_raster1Bands; //!< Input raster 1 band indexes to use.
249  std::vector< unsigned int > m_raster2Bands; //!< Input raster 2 band indexes to use.
250  unsigned int m_raster1BandsSize;
251  unsigned int m_raster2BandsSize;
252  std::vector< double > m_pixelOffsets1; //!< The values offset to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
253  std::vector< double > m_pixelScales1; //!< The values scale to be applied to raster 1 pixel values before the blended value calcule (one element for each used raster channel/band).
254  std::vector< double > m_pixelOffsets2; //!< The values offset to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
255  std::vector< double > m_pixelScales2; //!< The values scale to be applied to raster 2 pixel values before the blended value calcule (one element for each used raster channel/band).
256  std::vector< double > m_raster1NoDataValues; //!< Raster 1 no-data values (on value per band).
257  std::vector< double > m_raster2NoDataValues; //!< Raster 2 no-data values (on value per band).
258  boost::ptr_vector< te::rst::TileIndexer > m_intersectionTileIndexers; //!< The Intersection geometry tile indexers( raster 1 indexed coods), one indexer for each intersection polygon.
259  std::unique_ptr< BlenderRule > m_rulePtr; //!< Blender rule pointer.
260  std::string m_errorMessage; //!< Current error message.
261  bool m_enableRasterCache; //!< enable/disable the use of raster cache.
262 
263  // variables used by the noBlendMethodImp method
270  std::complex< double > m_noBlendMethodImp_cValue;
275  std::vector< std::complex< double > > m_noBlendMethodImp_pixel1Values;
276  std::vector< std::complex< double > > m_noBlendMethodImp_pixel2Values;
277 
278  // variables used by the euclideanDistanceMethodImp method
282  std::complex< double > m_euclideanDistanceMethodImp_cValue1;
283  std::complex< double > m_euclideanDistanceMethodImp_cValue2;
295  std::vector< std::complex< double > > m_euclideanDistanceMethodImp_pixel1Values;
296  std::vector< std::complex< double > > m_euclideanDistanceMethodImp_pixel2Values;
297 
298  // variables used by the sumMethodImp method
302  std::complex< double > m_sumMethodImp_cValue1;
303  std::complex< double > m_sumMethodImp_cValue2;
304  unsigned int m_sumMethodImp_BandIdx;
307 
308  // variables used by the maxMethodImp method
312  std::complex< double > m_maxMethodImp_cValue1;
313  std::complex< double > m_maxMethodImp_cValue2;
314  unsigned int m_maxMethodImp_BandIdx;
317 
318  // variables used by the minMethodImp method
322  std::complex< double > m_minMethodImp_cValue1;
323  std::complex< double > m_minMethodImp_cValue2;
324  unsigned int m_minMethodImp_BandIdx;
327 
328  // variables used by the ruleMethodImp method
331 
332  /*! \brief Reset the instance to its initial default state. */
333  void initState();
334 
335  /*! \brief Clear all internal allocated resources. */
336  void clear();
337 
338  /*! \brief Set the value of m_blendFuncPtr following the given blend method. */
339  void setBlendFunctionsPonters( const BlendMethod blendMethod );
340 
341  /*!
342  \brief Implementation for NoBlendMethod.
343  \param line Raster 1 Line.
344  \param col Raster 1 Column.
345  \param values A pointer to a pre-allocated vector where the blended values will be stored.
346  */
347  void noBlendMethodImp( const double& line1, const double& col1,
348  double* const values );
349 
350  /*!
351  \brief Implementation for EuclideanDistanceMethod.
352  \param line Raster 1 Line.
353  \param col Raster 1 Column.
354  \param values A pointer to a pre-allocated vector where the blended values will be stored.
355  */
356  void euclideanDistanceMethodImp( const double& line1, const double& col1,
357  double* const values );
358 
359  /*!
360  \brief Implementation for SumMethod.
361  \param line Raster 1 Line.
362  \param col Raster 1 Column.
363  \param values A pointer to a pre-allocated vector where the blended values will be stored.
364  */
365  void sumMethodImp( const double& line1, const double& col1,
366  double* const values );
367 
368  /*!
369  \brief Implementation for MaxMethod.
370  \param line Raster 1 Line.
371  \param col Raster 1 Column.
372  \param values A pointer to a pre-allocated vector where the blended values will be stored.
373  */
374  void maxMethodImp( const double& line1, const double& col1,
375  double* const values );
376 
377  /*!
378  \brief Implementation for MinMethod.
379  \param line Raster 1 Line.
380  \param col Raster 1 Column.
381  \param values A pointer to a pre-allocated vector where the blended values will be stored.
382  */
383  void minMethodImp( const double& line1, const double& col1,
384  double* const values );
385 
386  /*!
387  \brief Rule based Implementation.
388  \param line Raster 1 Line.
389  \param col Raster 1 Column.
390  \param values A pointer to a pre-allocated vector where the blended values will be stored.
391  */
392  void ruleMethodImp( const double& line1, const double& col1,
393  double* const values );
394 
395  /*!
396  \brief Thread entry for the method blendIntoRaster1.
397 
398  */
400 
401  /*!
402  \brief Extract segments from the given geometry.
403  \param geometryPtr Input geometry.
404  \param segments Found segments (appended here).
405  \note The only supported geometry types are those composed by te::gm::LineString or te::gm::CircularString (for other types no segments will be returned).
406  */
407  void getSegments( te::gm::Geometry const * const geometryPtr,
408  std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > >& segments ) const;
409 
410 
411  /*!
412  \brief Creater polygon tile indexers from the given geometry (only if it is a polygon or a collection of polygons).
413  \param geometryPtr Input geometry.
414  \param tileIndexers Created indexers (appended here).
415  \return true if OK, false on errors.
416  \note No indexers will be returned for geometries other than polygons or collections of polygons.
417  */
418  bool getTileIndexers( te::gm::Geometry const * const geometryPtr,
419  boost::ptr_vector< te::rst::TileIndexer >& tileIndexers ) const;
420 
421  /*!
422  \brief Set the current error message.
423 
424  \param newErrorMessage New error message;
425  */
426  void setErrorMessage( const std::string& newErrorMessage );
427  };
428 
429  } // end namespace rp
430 } // end namespace te
431 
432 #endif // __TERRALIB_RP_INTERNAL_ALGORITHM_H
433 
te::rp::Blender::BlendIntoRaster1ThreadParams::m_sync2Ptr
te::rst::RasterSynchronizer * m_sync2Ptr
Raster 1 syncronizer pointer.
Definition: Blender.h:191
te::rp::Blender::m_rulePtr
std::unique_ptr< BlenderRule > m_rulePtr
Blender rule pointer.
Definition: Blender.h:259
te::rp::Blender::BlendIntoRaster1ThreadParams::m_abortValuePtr
bool * m_abortValuePtr
A pointer to the abort execution value.
Definition: Blender.h:189
te::rp::Blender::m_euclideanDistanceMethodImp_currDist
double m_euclideanDistanceMethodImp_currDist
Definition: Blender.h:285
te::rp::Blender
Blended pixel value calculation for two overlaped rasters.
Definition: Blender.h:61
te::rp::Blender::RasterBlockInfo::m_rasterRows2ProcessBound
unsigned int m_rasterRows2ProcessBound
Definition: Blender.h:176
te::rp::Blender::maxMethodImp
void maxMethodImp(const double &line1, const double &col1, double *const values)
Implementation for MaxMethod.
te::rp::Blender::m_maxMethodImp_Point2Line
double m_maxMethodImp_Point2Line
Definition: Blender.h:310
te::rp::Blender::m_pixelScales1
std::vector< double > m_pixelScales1
The values scale to be applied to raster 1 pixel values before the blended value calcule (one element...
Definition: Blender.h:253
te::rp::Blender::m_noBlendMethodImp_BandIdx
unsigned int m_noBlendMethodImp_BandIdx
Definition: Blender.h:272
te
TerraLib.
Definition: AddressGeocodingOp.h:52
te::rp::Blender::m_forceRaster2NoDataValue
bool m_forceRaster2NoDataValue
Use noDataValue as the input raster 2 no-data value (The original rasters no-data values will be igno...
Definition: Blender.h:229
te::rp::Blender::m_minMethodImp_PointInsideIntersection
bool m_minMethodImp_PointInsideIntersection
Definition: Blender.h:326
te::rp::Blender::BlendIntoRaster1ThreadParams::m_forceRaster1NoDataValue
bool m_forceRaster1NoDataValue
Use noDataValue as the input rasters no-data value (The original rasters no-data values will be ignor...
Definition: Blender.h:202
te::rp::Blender::m_noBlendMethodImp_pixel2Values
std::vector< std::complex< double > > m_noBlendMethodImp_pixel2Values
Definition: Blender.h:276
te::rp::Blender::BlendIntoRaster1ThreadParams::m_raster2BandsPtr
std::vector< unsigned int > const * m_raster2BandsPtr
Input raster 2 band indexes to use (this vector has the same size as raster1Bands).
Definition: Blender.h:198
te::rp::Blender::m_noBlendMethodImp_pixel1IsValid
bool m_noBlendMethodImp_pixel1IsValid
Definition: Blender.h:273
Macros.h
te::rp::Blender::m_noBlendMethodImp_Point2Col
double m_noBlendMethodImp_Point2Col
Definition: Blender.h:269
te::rp::Blender::RasterBlockInfo::m_wasProcessed
bool m_wasProcessed
Definition: Blender.h:171
te::rp::Blender::m_minMethodImp_BandIdx
unsigned int m_minMethodImp_BandIdx
Definition: Blender.h:324
te::rp::Blender::m_errorMessage
std::string m_errorMessage
Current error message.
Definition: Blender.h:260
te::rp::Blender::BlendIntoRaster1ThreadParams::m_pixelOffsets1Ptr
std::vector< double > const * m_pixelOffsets1Ptr
The values offset to be applied to raster 1 pixel values before the blended value calcule (one elemen...
Definition: Blender.h:204
te::rp::Blender::m_raster1BandsSize
unsigned int m_raster1BandsSize
Definition: Blender.h:250
te::rp::Blender::m_r2ValidDataDelimiterPtr
std::unique_ptr< te::gm::MultiPolygon > m_r2ValidDataDelimiterPtr
A pointer to a geometry (raster 2 world/projected coords) delimiting the raster region with valid dat...
Definition: Blender.h:236
te::rp::Blender::m_interpMethod1
te::rst::Interpolator::Method m_interpMethod1
The interpolation method to use when reading raster 1 data.
Definition: Blender.h:243
te::rp::Blender::BlendIntoRaster1ThreadParams::m_runningThreadsCounterPtr
unsigned int * m_runningThreadsCounterPtr
a pointer to the running threads counter.
Definition: Blender.h:196
te::rp::Blender::BlendIntoRaster1ThreadParams::operator=
BlendIntoRaster1ThreadParams & operator=(const BlendIntoRaster1ThreadParams &)
Definition: Blender.h:224
te::rp::Blender::BlendIntoRaster1ThreadParams
The parameters passed to blendIntoRaster1Thread method.
Definition: Blender.h:185
te::rst::Raster
An abstract class for raster data strucutures.
Definition: Raster.h:72
te::rp::Blender::m_euclideanDistanceMethodImp_PointInsideIntersection
bool m_euclideanDistanceMethodImp_PointInsideIntersection
Definition: Blender.h:292
te::rp::Blender::BlendIntoRaster1ThreadParams::m_processedBlocksNmbPtr
unsigned int * m_processedBlocksNmbPtr
Definition: Blender.h:214
te::rp::Blender::m_r1IntersectionSegmentsPointsSize
std::size_t m_r1IntersectionSegmentsPointsSize
Size of m_r1IntersectionSegmentsPoints;.
Definition: Blender.h:239
te::rp::Blender::BlendIntoRaster1ThreadParams::m_pixelOffsets2Ptr
std::vector< double > const * m_pixelOffsets2Ptr
The values offset to be applied to raster 2 pixel values before the blended value calcule (one elemen...
Definition: Blender.h:206
te::rp::Blender::m_sumMethodImp_cValue1
std::complex< double > m_sumMethodImp_cValue1
Definition: Blender.h:302
te::rp::Blender::getSegments
void getSegments(te::gm::Geometry const *const geometryPtr, std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > > &segments) const
Extract segments from the given geometry.
te::rp::Blender::BlendIntoRaster1ThreadParams::m_blendMethod
BlendMethod m_blendMethod
The blend method to apply.
Definition: Blender.h:199
te::rp::Blender::BlendIntoRaster1ThreadParams::m_sync1Ptr
te::rst::RasterSynchronizer * m_sync1Ptr
Raster 1 syncronizer pointer.
Definition: Blender.h:190
te::rp::Blender::euclideanDistanceMethodImp
void euclideanDistanceMethodImp(const double &line1, const double &col1, double *const values)
Implementation for EuclideanDistanceMethod.
te::rp::blender::BlendMethod
BlendMethod
Definition: BlenderTypeDefs.h:33
te::rst::RasterSynchronizer
An access synchronizer to be used in SynchronizedRaster raster instances.
Definition: RasterSynchronizer.h:55
te::rp::Blender::m_noBlendMethodImp_Point1XProj1
double m_noBlendMethodImp_Point1XProj1
Definition: Blender.h:264
te::rp::Blender::minMethodImp
void minMethodImp(const double &line1, const double &col1, double *const values)
Implementation for MinMethod.
te::rp::Blender::m_euclideanDistanceMethodImp_auxPoint
te::gm::Point m_euclideanDistanceMethodImp_auxPoint
Definition: Blender.h:279
te::rp::Blender::BlendIntoRaster1ThreadParams::m_raster1BlocksInfosPtr
std::vector< RasterBlockInfo > * m_raster1BlocksInfosPtr
blocks to process.
Definition: Blender.h:192
te::rp::Blender::sumMethodImp
void sumMethodImp(const double &line1, const double &col1, double *const values)
Implementation for SumMethod.
te::rp::Blender::m_enableRasterCache
bool m_enableRasterCache
enable/disable the use of raster cache.
Definition: Blender.h:261
te::rp::Blender::m_forceRaster1NoDataValue
bool m_forceRaster1NoDataValue
Use noDataValue as the input raster 1 no-data value (The original rasters no-data values will be igno...
Definition: Blender.h:228
te::rp::Blender::m_minMethodImp_IntersectionTileIndexersIdx
unsigned int m_minMethodImp_IntersectionTileIndexersIdx
Definition: Blender.h:325
te::rp::Blender::m_euclideanDistanceMethodImp_cValue2
std::complex< double > m_euclideanDistanceMethodImp_cValue2
Definition: Blender.h:283
te::rp::Blender::m_noBlendMethodImp_Value
double m_noBlendMethodImp_Value
Definition: Blender.h:271
te::rp::Blender::Blender
Blender()
te::rp::Blender::BlendIntoRaster1ThreadParams::m_geomTransformationPtr
te::gm::GeometricTransformation const * m_geomTransformationPtr
A transformation mapping raster 1 pixels ( te::gm::GTParameters::TiePoint::first ) to raster 2 pixels...
Definition: Blender.h:210
te::rp::Blender::m_raster1Bands
std::vector< unsigned int > m_raster1Bands
Input raster 1 band indexes to use.
Definition: Blender.h:248
te::rp::Blender::m_euclideanDistanceMethodImp_vecIdx
std::size_t m_euclideanDistanceMethodImp_vecIdx
Definition: Blender.h:288
te::rp::Blender::m_r2IntersectionSegmentsPoints
std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > > m_r2IntersectionSegmentsPoints
A sub-set of the intersection polygon wich is part of raster 2 valid data polygon ( raster 1 indexed ...
Definition: Blender.h:240
te::rp::Blender::RasterBlockInfo::m_blkTotalPixelsNumber
unsigned int m_blkTotalPixelsNumber
Definition: Blender.h:174
te::rp::Blender::m_raster2BandsSize
unsigned int m_raster2BandsSize
Definition: Blender.h:251
te::rp::Blender::getErrorMessage
const std::string & getErrorMessage() const
Return the current error message if there is any.
te::rp::Blender::m_euclideanDistanceMethodImp_Point2Line
double m_euclideanDistanceMethodImp_Point2Line
Definition: Blender.h:280
te::rp::Blender::m_blendMethod
BlendMethod m_blendMethod
The blend method to apply.
Definition: Blender.h:231
te::rp::Blender::m_euclideanDistanceMethodImp_pixel2IsValid
bool m_euclideanDistanceMethodImp_pixel2IsValid
Definition: Blender.h:294
te::rp::Blender::m_intersectionTileIndexers
boost::ptr_vector< te::rst::TileIndexer > m_intersectionTileIndexers
The Intersection geometry tile indexers( raster 1 indexed coods), one indexer for each intersection p...
Definition: Blender.h:258
te::rp::Blender::m_raster1NoDataValues
std::vector< double > m_raster1NoDataValues
Raster 1 no-data values (on value per band).
Definition: Blender.h:256
te::rp::Blender::m_euclideanDistanceMethodImp_Point2Col
double m_euclideanDistanceMethodImp_Point2Col
Definition: Blender.h:281
te::rp::Blender::m_raster2Bands
std::vector< unsigned int > m_raster2Bands
Input raster 2 band indexes to use.
Definition: Blender.h:249
te::rp::Blender::m_noBlendMethodImp_Point1YProj1
double m_noBlendMethodImp_Point1YProj1
Definition: Blender.h:265
te::rp::Blender::m_noBlendMethodImp_Point1XProj2
double m_noBlendMethodImp_Point1XProj2
Definition: Blender.h:266
te::rp::Blender::m_euclideanDistanceMethodImp_dist2
double m_euclideanDistanceMethodImp_dist2
Definition: Blender.h:287
te::rp::Blender::BlendIntoRaster1ThreadParams::m_r2ValidDataDelimiterPtr
te::gm::MultiPolygon const * m_r2ValidDataDelimiterPtr
A pointer to a geometry (raster 2 world/projected coords) delimiting the raster region with valid dat...
Definition: Blender.h:209
te::rp::Blender::BlendIntoRaster1ThreadParams::m_interpMethod2
te::rst::Interpolator::Method m_interpMethod2
The interpolation method to use when reading raster 2 data.
Definition: Blender.h:200
te::rp::Blender::RasterBlockInfo::m_firstRasterRow2Process
unsigned int m_firstRasterRow2Process
Definition: Blender.h:175
te::rp::Blender::m_noBlendMethodImp_cValue
std::complex< double > m_noBlendMethodImp_cValue
Definition: Blender.h:270
te::rp::Blender::m_euclideanDistanceMethodImp_dist1
double m_euclideanDistanceMethodImp_dist1
Definition: Blender.h:286
te::rp::Blender::m_sumMethodImp_auxPoint
te::gm::Point m_sumMethodImp_auxPoint
Definition: Blender.h:299
te::rst::InterpolationMethod
InterpolationMethod
Allowed interpolation methods.
Definition: Enums.h:93
te::rp::Blender::m_sumMethodImp_Point2Col
double m_sumMethodImp_Point2Col
Definition: Blender.h:301
te::rp::Blender::m_sumMethodImp_cValue2
std::complex< double > m_sumMethodImp_cValue2
Definition: Blender.h:303
te::rp::Blender::BlendIntoRaster1ThreadParams::m_raster1BandsPtr
std::vector< unsigned int > const * m_raster1BandsPtr
Input raster 1 band indexes to use.
Definition: Blender.h:197
te::rp::Blender::m_minMethodImp_Point2Col
double m_minMethodImp_Point2Col
Definition: Blender.h:321
te::rp::Blender::m_r1IntersectionSegmentsPoints
std::vector< std::pair< te::gm::Coord2D, te::gm::Coord2D > > m_r1IntersectionSegmentsPoints
A sub-set of the intersection polygon wich is part of raster 1 valid data polygon ( raster 1 indexed ...
Definition: Blender.h:238
te::rp::Blender::blendIntoRaster1
bool blendIntoRaster1()
Execute blending of the given input rasters and write the result into raster1.
te::rp::Blender::setErrorMessage
void setErrorMessage(const std::string &newErrorMessage)
Set the current error message.
te::rp::Blender::RasterBlockInfo
Raster block info.
Definition: Blender.h:170
TERP_DEBUG_TRUE_OR_THROW
#define TERP_DEBUG_TRUE_OR_THROW(value, message)
Checks if value is true and throws an exception if not.
Definition: Macros.h:433
te::rp::Blender::m_minMethodImp_cValue2
std::complex< double > m_minMethodImp_cValue2
Definition: Blender.h:323
te::rp::Blender::BlendIntoRaster1ThreadParams::m_blockProcessedSignalPtr
std::condition_variable * m_blockProcessedSignalPtr
Signal used to update the main process progress update.
Definition: Blender.h:195
te::gm::MultiPolygon
MultiPolygon is a MultiSurface whose elements are Polygons.
Definition: MultiPolygon.h:51
te::rp::Blender::BlendIntoRaster1ThreadParams::m_r1ValidDataDelimiterPtr
te::gm::MultiPolygon const * m_r1ValidDataDelimiterPtr
A pointer to a geometry (raster 1 world/projected coords) delimiting the raster region with valid dat...
Definition: Blender.h:208
te::rp::Blender::m_maxMethodImp_IntersectionTileIndexersIdx
unsigned int m_maxMethodImp_IntersectionTileIndexersIdx
Definition: Blender.h:315
te::rp::Blender::m_intersectionPtr
std::unique_ptr< te::gm::Geometry > m_intersectionPtr
The Intersection geometry ( raster 1 indexed coods).
Definition: Blender.h:237
TERPEXPORT
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:139
te::rp::Blender::noBlendMethodImp
void noBlendMethodImp(const double &line1, const double &col1, double *const values)
Implementation for NoBlendMethod.
te::rp::Blender::BlendIntoRaster1ThreadParams::m_maxRasterCachedBlocks
unsigned long int m_maxRasterCachedBlocks
The maximum number of raster cache blocks.
Definition: Blender.h:211
te::rp::Blender::RasterBlockInfo::m_blkX
unsigned int m_blkX
Definition: Blender.h:172
te::rp::Blender::BlendIntoRaster1ThreadParams::m_rulePtr
BlenderRule const * m_rulePtr
Definition: Blender.h:213
te::rp::Blender::BlendIntoRaster1ThreadParams::m_pixelScales2Ptr
std::vector< double > const * m_pixelScales2Ptr
The values scale to be applied to raster 2 pixel values before the blended value calcule (one element...
Definition: Blender.h:207
te::rp::Blender::BlendIntoRaster1ThreadParams::m_useProgress
bool m_useProgress
If enabled each thread will use its own progress interface, if false only a signal will be emitted on...
Definition: Blender.h:212
te::rp::Blender::m_geomTransformationPtr
te::gm::GeometricTransformation * m_geomTransformationPtr
A transformation mapping raster 1 pixels ( te::gm::GTParameters::TiePoint::first ) to raster 2 ( te::...
Definition: Blender.h:242
te::rp::Blender::ruleMethodImp
void ruleMethodImp(const double &line1, const double &col1, double *const values)
Rule based Implementation.
te::rp::Blender::m_pixelScales2
std::vector< double > m_pixelScales2
The values scale to be applied to raster 2 pixel values before the blended value calcule (one element...
Definition: Blender.h:255
te::rp::Blender::m_enableProgressInterface
bool m_enableProgressInterface
Enable progress interface.
Definition: Blender.h:227
te::rp::Blender::m_maxMethodImp_cValue1
std::complex< double > m_maxMethodImp_cValue1
Definition: Blender.h:312
BlenderRule.h
te::rp::Blender::m_euclideanDistanceMethodImp_pixel1Values
std::vector< std::complex< double > > m_euclideanDistanceMethodImp_pixel1Values
Definition: Blender.h:295
te::rp::Blender::m_sumMethodImp_BandIdx
unsigned int m_sumMethodImp_BandIdx
Definition: Blender.h:304
te::rp::Blender::~Blender
~Blender()
te::rp::Blender::m_minMethodImp_auxPoint
te::gm::Point m_minMethodImp_auxPoint
Definition: Blender.h:319
te::rp::Blender::BlendIntoRaster1ThreadParams::m_blockProcessedSignalMutexPtr
std::mutex * m_blockProcessedSignalMutexPtr
Mutex used to update the main process progress update.
Definition: Blender.h:194
te::rp::Blender::RasterBlockInfo::m_firstRasterCol2Process
unsigned int m_firstRasterCol2Process
Definition: Blender.h:177
te::rp::Blender::initState
void initState()
Reset the instance to its initial default state.
te::rp::Blender::m_raster2NoDataValues
std::vector< double > m_raster2NoDataValues
Raster 2 no-data values (on value per band).
Definition: Blender.h:257
te::rp::Blender::m_maxMethodImp_Point2Col
double m_maxMethodImp_Point2Col
Definition: Blender.h:311
te::rp::Blender::m_euclideanDistanceMethodImp_pixel2Values
std::vector< std::complex< double > > m_euclideanDistanceMethodImp_pixel2Values
Definition: Blender.h:296
te::rp::Blender::m_threadsNumber
unsigned int m_threadsNumber
The number of threads to use (0:automatic , 1:disabled, any other integer dictates the number of thre...
Definition: Blender.h:230
te::rp::Blender::m_noBlendMethodImp_pixel1Values
std::vector< std::complex< double > > m_noBlendMethodImp_pixel1Values
Definition: Blender.h:275
te::rp::Blender::m_maxMethodImp_auxPoint
te::gm::Point m_maxMethodImp_auxPoint
Definition: Blender.h:309
te::rp::Blender::BlendIntoRaster1ThreadParams::m_noDataValue
double m_noDataValue
The value returned where there is no pixel data bo blend.
Definition: Blender.h:201
te::rp::Blender::m_euclideanDistanceMethodImp_cValue1
std::complex< double > m_euclideanDistanceMethodImp_cValue1
Definition: Blender.h:282
te::rp::Blender::m_euclideanDistanceMethodImp_pixel1IsValid
bool m_euclideanDistanceMethodImp_pixel1IsValid
Definition: Blender.h:293
te::rp::Blender::m_interp1Ptr
std::unique_ptr< te::rst::Interpolator > m_interp1Ptr
Raster 1 interpolator instance pointer.
Definition: Blender.h:246
te::rp::BlenderRule
Definition: BlenderRule.h:45
te::rp::Blender::m_interp2Ptr
std::unique_ptr< te::rst::Interpolator > m_interp2Ptr
Raster 2 interpolator instance pointer.
Definition: Blender.h:247
te::rp::Blender::clear
void clear()
Clear all internal allocated resources.
te::rp::Blender::BlendIntoRaster1ThreadParams::m_returnValuePtr
bool * m_returnValuePtr
A pointer to the threadreturn value.
Definition: Blender.h:188
te::rp::Blender::m_r2IntersectionSegmentsPointsSize
std::size_t m_r2IntersectionSegmentsPointsSize
Size of m_r2IntersectionSegmentsPoints;.
Definition: Blender.h:241
te::rp::Blender::m_sumMethodImp_IntersectionTileIndexersIdx
unsigned int m_sumMethodImp_IntersectionTileIndexersIdx
Definition: Blender.h:305
te::rp::Blender::BlendIntoRaster1ThreadParams::m_pixelScales1Ptr
std::vector< double > const * m_pixelScales1Ptr
The values scale to be applied to raster 1 pixel values before the blended value calcule (one element...
Definition: Blender.h:205
te::gm::GeometricTransformation
2D Geometric transformation base class.
Definition: GeometricTransformation.h:57
te::rp::Blender::m_euclideanDistanceMethodImp_BandIdx
unsigned int m_euclideanDistanceMethodImp_BandIdx
Definition: Blender.h:284
te::rp::Blender::BlendIntoRaster1ThreadParams::BlendIntoRaster1ThreadParams
BlendIntoRaster1ThreadParams()
Definition: Blender.h:216
te::rp::Blender::m_pixelOffsets2
std::vector< double > m_pixelOffsets2
The values offset to be applied to raster 2 pixel values before the blended value calcule (one elemen...
Definition: Blender.h:254
Config.h
Proxy configuration file for TerraView (see terraview_config.h).
te::rp::Blender::BlendIntoRaster1ThreadParams::~BlendIntoRaster1ThreadParams
~BlendIntoRaster1ThreadParams()
Definition: Blender.h:218
te::rp::Blender::m_noBlendMethodImp_Point1YProj2
double m_noBlendMethodImp_Point1YProj2
Definition: Blender.h:267
te::rp::Blender::m_r1ValidDataDelimiterPtr
std::unique_ptr< te::gm::MultiPolygon > m_r1ValidDataDelimiterPtr
A pointer to a geometry (raster 1 world/projected coords) delimiting the raster region with valid dat...
Definition: Blender.h:235
te::rp::Blender::m_sumMethodImp_PointInsideIntersection
bool m_sumMethodImp_PointInsideIntersection
Definition: Blender.h:306
te::rp::Blender::blendIntoRaster1Thread
static void blendIntoRaster1Thread(BlendIntoRaster1ThreadParams *paramsPtr)
Thread entry for the method blendIntoRaster1.
te::rp::Blender::m_raster2Ptr
te::rst::Raster const * m_raster2Ptr
Input raster 2.
Definition: Blender.h:234
te::rp::Blender::BlendMethod
te::rp::blender::BlendMethod BlendMethod
Definition: Blender.h:67
te::rp::Blender::m_ruleMethodImp_Point2Col
double m_ruleMethodImp_Point2Col
Definition: Blender.h:330
te::rp::Blender::m_sumMethodImp_Point2Line
double m_sumMethodImp_Point2Line
Definition: Blender.h:300
te::rp::Blender::getBlendedValues
void getBlendedValues(const double &line, const double &col, double *const values)
Blend a pixel value using the current parameters.
Definition: Blender.h:133
te::rp::Blender::m_ruleMethodImp_Point2Line
double m_ruleMethodImp_Point2Line
Definition: Blender.h:329
te::rp::Blender::BlendIntoRaster1ThreadParams::m_forceRaster2NoDataValue
bool m_forceRaster2NoDataValue
Use noDataValue as the input rasters no-data value (The original rasters no-data values will be ignor...
Definition: Blender.h:203
te::rp::Blender::m_euclideanDistanceMethodImp_aux1
double m_euclideanDistanceMethodImp_aux1
Definition: Blender.h:289
te::rp::Blender::BlendIntoRaster1ThreadParams::BlendIntoRaster1ThreadParams
BlendIntoRaster1ThreadParams(const BlendIntoRaster1ThreadParams &)
Definition: Blender.h:222
te::rp::Blender::m_outputNoDataValue
double m_outputNoDataValue
The output raster no-data value.
Definition: Blender.h:245
te::gm::Geometry
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:78
te::rp::Blender::m_interpMethod2
te::rst::Interpolator::Method m_interpMethod2
The interpolation method to use when reading raster 2 data.
Definition: Blender.h:244
te::rp::Blender::m_noBlendMethodImp_Point2Line
double m_noBlendMethodImp_Point2Line
Definition: Blender.h:268
te::rp::Blender::m_maxMethodImp_BandIdx
unsigned int m_maxMethodImp_BandIdx
Definition: Blender.h:314
te::rp::Blender::m_noBlendMethodImp_pixel2IsValid
bool m_noBlendMethodImp_pixel2IsValid
Definition: Blender.h:274
te::rp::Blender::m_euclideanDistanceMethodImp_aux2
double m_euclideanDistanceMethodImp_aux2
Definition: Blender.h:290
te::rp::Blender::m_pixelOffsets1
std::vector< double > m_pixelOffsets1
The values offset to be applied to raster 1 pixel values before the blended value calcule (one elemen...
Definition: Blender.h:252
te::rp::Blender::initialize
bool initialize(te::rst::Raster &raster1, const std::vector< unsigned int > &raster1Bands, const te::rst::Raster &raster2, const std::vector< unsigned int > &raster2Bands, const BlendMethod &blendMethod, const te::rst::Interpolator::Method &interpMethod1, const te::rst::Interpolator::Method &interpMethod2, const double &noDataValue, const bool forceRaster1NoDataValue, const bool forceRaster2NoDataValue, const std::vector< double > &pixelOffsets1, const std::vector< double > &pixelScales1, const std::vector< double > &pixelOffsets2, const std::vector< double > &pixelScales2, te::gm::MultiPolygon const *const r1ValidDataDelimiterPtr, te::gm::MultiPolygon const *const r2ValidDataDelimiterPtr, const te::gm::GeometricTransformation &geomTransformation, const unsigned int threadsNumber, const bool enableProgressInterface, BlenderRule const *const rulePtr, const bool enableRasterCache)
Inititate the blender instance.
te::rp::Blender::m_minMethodImp_Point2Line
double m_minMethodImp_Point2Line
Definition: Blender.h:320
te::gm::Point
A point with x and y coordinate values.
Definition: Point.h:51
te::rp::Blender::RasterBlockInfo::m_blkY
unsigned int m_blkY
Definition: Blender.h:173
te::rp::Blender::m_maxMethodImp_cValue2
std::complex< double > m_maxMethodImp_cValue2
Definition: Blender.h:313
te::rp::Blender::m_minMethodImp_cValue1
std::complex< double > m_minMethodImp_cValue1
Definition: Blender.h:322
te::rp::Blender::setBlendFunctionsPonters
void setBlendFunctionsPonters(const BlendMethod blendMethod)
Set the value of m_blendFuncPtr following the given blend method.
te::rp::Blender::BlendIntoRaster1ThreadParams::m_mutexPtr
std::mutex * m_mutexPtr
mutex pointer.
Definition: Blender.h:193
te::rp::Blender::getTileIndexers
bool getTileIndexers(te::gm::Geometry const *const geometryPtr, boost::ptr_vector< te::rst::TileIndexer > &tileIndexers) const
Creater polygon tile indexers from the given geometry (only if it is a polygon or a collection of pol...
te::rp::Blender::m_euclideanDistanceMethodImp_IntersectionTileIndexersIdx
unsigned int m_euclideanDistanceMethodImp_IntersectionTileIndexersIdx
Definition: Blender.h:291
te::rp::Blender::m_primaryBlendFuncPtr
PrimaryBlendFunctPtr m_primaryBlendFuncPtr
The primary blend function.
Definition: Blender.h:232
te::rp::Blender::m_raster1Ptr
te::rst::Raster * m_raster1Ptr
Input raster 1.
Definition: Blender.h:233
te::rp::Blender::m_maxMethodImp_PointInsideIntersection
bool m_maxMethodImp_PointInsideIntersection
Definition: Blender.h:316
te::rp::Blender::RasterBlockInfo::m_rasterCols2ProcessBound
unsigned int m_rasterCols2ProcessBound
Definition: Blender.h:178