| TerraLib 4.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Examples

TePDIBlender_test.cpp

Shows how to use this class.

    #define TEAGN_ENABLE_STDOUT_LOG

    #include <TePDIExamplesBase.hpp>

    #include <TePDIBlender.hpp>
    #include <TePDIUtils.hpp>

    #include <TeAgnostic.h>
    #include <TeProgress.h>
    #include <TeStdIOProgress.h>

    void noBlendMethodTest1()
    {
      /* Initializing input rasters */

      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop2.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 0 );
      raster1ChannelsVec.push_back( 1 );
      raster1ChannelsVec.push_back( 2 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 0 );
      raster2ChannelsVec.push_back( 1 );
      raster2ChannelsVec.push_back( 2 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeGTParams transParams;

      TeCoordPair auxPair;

      auxPair.pt1.setXY( 38,25 ); // point over input image 1
      auxPair.pt2.setXY( 333,562 ); // the corresponding point over input image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 526,43 );
      auxPair.pt2.setXY( 820,580 );
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 276,395 );
      auxPair.pt2.setXY( 570,932 );
      transParams.tiepoints_.push_back( auxPair );

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::NoBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams = raster1Ptr->params();

      outputRasterParams.nBands( 3 );

      TeBox outputRasterBoundingBox = raster1Ptr->params().boundingBox();
      updateBox( outputRasterBoundingBox, raster2Ptr->params().boundingBox() );

      outputRasterParams.boundingBoxResolution( outputRasterBoundingBox.x1(),
        outputRasterBoundingBox.y1(), outputRasterBoundingBox.x2(),
        outputRasterBoundingBox.y2(), raster1Ptr->params().resx_,
        raster1Ptr->params().resy_ );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      double value = 0;
      const double colOff = ( outputRaster->params().boundingBox().x1() -
        raster1Ptr->params().boundingBox().x1() ) /
        outputRaster->params().resx_;
      const double lineOff = -1.0 * ( outputRaster->params().boundingBox().y2() -
        raster1Ptr->params().boundingBox().y2() ) /
        outputRaster->params().resy_;

      for( int band = 0 ; band < outputRaster->params().nBands() ; ++band )
      {
        for( int line = 0 ; line < outNLines ; ++line )
        {
          for( int col = 0 ; col < outNCols ; ++col )
          {
            blender.blend( ((double)line) + lineOff, ((double)col) + colOff, band,
              value );

            TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, band ),
              "Error writing value" );
          }
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_noBlendMethodTest1.tif" ),
        "GeoTIF generation error" );
    }

    // Testing no-overlaped images (simulated)
    void noBlendMethodNoOverlapTest()
    {
      /* Initializing input rasters */

      // This image has 875 x 1009 pixels
      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      // This image has 838 x 1009 pixels
      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop2.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 0 );
      raster1ChannelsVec.push_back( 1 );
      raster1ChannelsVec.push_back( 2 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 0 );
      raster2ChannelsVec.push_back( 1 );
      raster2ChannelsVec.push_back( 2 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeGTParams transParams;

      TeCoordPair auxPair;

      auxPair.pt1.setXY( 885,0 ); // point over input image 1
      auxPair.pt2.setXY( 0,0 ); // TopLeft - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885 + 838,0 );
      auxPair.pt2.setXY( 837,0 ); // TopRight - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885,1009 );
      auxPair.pt2.setXY( 0,1008 ); // LowerLeft - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885 + 838,1009 );
      auxPair.pt2.setXY( 837,1008 ); // LowerRight - image 2
      transParams.tiepoints_.push_back( auxPair );

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::NoBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams;
      outputRasterParams.setDataType( TeUNSIGNEDCHAR, 1 );
      outputRasterParams.setNLinesNColumns( raster1Ptr->params().nlines_,
        10 + raster1Ptr->params().ncols_ + raster2Ptr->params().ncols_ );
      outputRasterParams.nBands( 3 );
      outputRasterParams.setPhotometric( TeRasterParams::TeRGB, -1 );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      const int outNBands = outputRaster->params().nBands();
      double value = 0;

      for( int band = 0 ; band < outNBands ; ++band )
      {
        for( int line = 0 ; line < outNLines ; ++line )
        {
          for( int col = 0 ; col < outNCols ; ++col )
          {
            blender.blend( line, col, band, value );

            TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, band ),
              "Error writing value" );
          }
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_noBlendMethodNoOverlapTest.tif" ),
        "GeoTIF generation error" );
    }

    void euclideanBlendMethodTest1()
    {
      /* Initializing input rasters */

      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_A.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_B_contraste.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 0 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 0 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeGTParams transParams;

      TeCoordPair auxPair;

      auxPair.pt2.setXY( 18,48 ); // point over input image 2
      auxPair.pt1.setXY( 232,280 ); // the corresponding point over input image 1
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt2.setXY( 148,345 );
      auxPair.pt1.setXY( 362,577 );
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt2.setXY( 327,17 );
      auxPair.pt1.setXY( 541,249 );
      transParams.tiepoints_.push_back( auxPair );

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::EuclideanBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams = raster1Ptr->params();

      outputRasterParams.nBands( 1 );

      TeBox outputRasterBoundingBox = raster1Ptr->params().boundingBox();
      updateBox( outputRasterBoundingBox, raster2Ptr->params().boundingBox() );

      outputRasterParams.boundingBoxResolution( outputRasterBoundingBox.x1(),
        outputRasterBoundingBox.y1(), outputRasterBoundingBox.x2(),
        outputRasterBoundingBox.y2(), raster1Ptr->params().resx_,
        raster1Ptr->params().resy_ );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      double value = 0;
      const double colOff = ( outputRaster->params().boundingBox().x1() -
        raster1Ptr->params().boundingBox().x1() ) /
        outputRaster->params().resx_;
      const double lineOff = -1.0 * ( outputRaster->params().boundingBox().y2() -
        raster1Ptr->params().boundingBox().y2() ) /
        outputRaster->params().resy_;

      for( int band = 0 ; band < outputRaster->params().nBands() ; ++band )
      {
        for( int line = 0 ; line < outNLines ; ++line )
        {
          for( int col = 0 ; col < outNCols ; ++col )
          {
            blender.blend( ((double)line) + lineOff, ((double)col) + colOff, band,
              value );

            TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, band ),
              "Error writing value" );
          }
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_euclideanBlendMethodTest1.tif" ),
        "GeoTIF generation error" );
    }

    void euclideanBlendMethodTest2()
    {
      /* Initializing input rasters */

      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_C.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_B_contraste.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 0 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 0 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeGTParams transParams;

      TeCoordPair auxPair;

      auxPair.pt1.setXY( 36,234 ); // point over input image 1
      auxPair.pt2.setXY( 245,21 ); // the corresponding point over input image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 319,252 );
      auxPair.pt2.setXY( 528,39 );
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 136,416 );
      auxPair.pt2.setXY( 345,203 );
      transParams.tiepoints_.push_back( auxPair );

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::EuclideanBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams = raster1Ptr->params();

      outputRasterParams.nBands( 1 );

      TeBox outputRasterBoundingBox = raster1Ptr->params().boundingBox();
      updateBox( outputRasterBoundingBox, raster2Ptr->params().boundingBox() );

      outputRasterParams.boundingBoxResolution( outputRasterBoundingBox.x1(),
        outputRasterBoundingBox.y1(), outputRasterBoundingBox.x2(),
        outputRasterBoundingBox.y2(), raster1Ptr->params().resx_,
        raster1Ptr->params().resy_ );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      double value = 0;
      const double colOff = ( outputRaster->params().boundingBox().x1() -
        raster1Ptr->params().boundingBox().x1() ) /
        outputRaster->params().resx_;
      const double lineOff = -1.0 * ( outputRaster->params().boundingBox().y2() -
        raster1Ptr->params().boundingBox().y2() ) /
        outputRaster->params().resy_;

      for( int band = 0 ; band < outputRaster->params().nBands() ; ++band )
      {
        for( int line = 0 ; line < outNLines ; ++line )
        {
          for( int col = 0 ; col < outNCols ; ++col )
          {
            blender.blend( ((double)line) + lineOff, ((double)col) + colOff, band,
              value );

            TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, band ),
              "Error writing value" );
          }
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_euclideanBlendMethodTest2.tif" ),
        "GeoTIF generation error" );
    }

    // Testing no-overlaped images (simulated)
    void euclideanBlendMethodNoOverlapTest()
    {
      /* Initializing input rasters */

      // This image has 875 x 1009 pixels
      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      // This image has 838 x 1009 pixels
      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop2.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 0 );
      raster1ChannelsVec.push_back( 1 );
      raster1ChannelsVec.push_back( 2 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 0 );
      raster2ChannelsVec.push_back( 1 );
      raster2ChannelsVec.push_back( 2 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeGTParams transParams;

      TeCoordPair auxPair;

      auxPair.pt1.setXY( 885,0 ); // point over input image 1
      auxPair.pt2.setXY( 0,0 ); // TopLeft - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885 + 838,0 );
      auxPair.pt2.setXY( 837,0 ); // TopRight - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885,1009 );
      auxPair.pt2.setXY( 0,1008 ); // LowerLeft - image 2
      transParams.tiepoints_.push_back( auxPair );

      auxPair.pt1.setXY( 885 + 838,1009 );
      auxPair.pt2.setXY( 837,1008 ); // LowerRight - image 2
      transParams.tiepoints_.push_back( auxPair );

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::EuclideanBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams;
      outputRasterParams.setDataType( TeUNSIGNEDCHAR, 1 );
      outputRasterParams.setNLinesNColumns( raster1Ptr->params().nlines_,
        10 + raster1Ptr->params().ncols_ + raster2Ptr->params().ncols_ );
      outputRasterParams.nBands( 3 );
      outputRasterParams.setPhotometric( TeRasterParams::TeRGB, -1 );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      const int outNBands = outputRaster->params().nBands();
      double value = 0;

      for( int band = 0 ; band < outNBands ; ++band )
      {
        for( int line = 0 ; line < outNLines ; ++line )
        {
          for( int col = 0 ; col < outNCols ; ++col )
          {
            blender.blend( line, col, band, value );

            TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, band ),
              "Error writing value" );
          }
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_euclideanBlendMethodNoOverlapTest.tif" ),
        "GeoTIF generation error" );
    }

    // Testing overlaped images (one image is inside another)
    void euclideanBlendMethodContainsTest()
    {
      /* Initializing input rasters */

      TePDITypes::TePDIRasterPtrType raster1Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster1Ptr->init(),
        "Unable to init raster1Ptr" );

      // This image has 250 x 250 pixels
      TePDITypes::TePDIRasterPtrType raster2Ptr( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1_chip500_500.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( raster2Ptr->init(),
        "Unable to init raster1Ptr" );

      // what bands we want to use from each raster ??

      std::vector< unsigned int > raster1ChannelsVec;
      raster1ChannelsVec.push_back( 2 );

      std::vector< unsigned int > raster2ChannelsVec;
      raster2ChannelsVec.push_back( 1 );

      // The geometric transformation parameters telling how the input rasters are
      // overlapped

      TeCoord2D topLeftCoord = raster2Ptr->params().index2Coord(
        TeCoord2D( 0, 0 ) );
      TeCoord2D topLeftIdxOverR1 = raster1Ptr->params().coord2Index(
        topLeftCoord );

      TeGTParams transParams;
      TEAGN_TRUE_OR_THROW( transParams.direct_parameters_.Init( 3, 3, 0.0 ),
        "Matrix init error" );
      TEAGN_TRUE_OR_THROW( transParams.inverse_parameters_.Init( 3, 3, 0.0 ),
        "Matrix init error" );
      transParams.direct_parameters_( 0, 0 ) = 1.0;
      transParams.direct_parameters_( 0, 2 ) = -500.0;
      transParams.direct_parameters_( 1, 1 ) = 1.0;
      transParams.direct_parameters_( 1, 2 ) = -500.0;
      transParams.inverse_parameters_( 0, 0 ) = 1.0;
      transParams.inverse_parameters_( 0, 2 ) = 500.0;
      transParams.inverse_parameters_( 1, 1 ) = 1.0;
      transParams.inverse_parameters_( 1, 2 ) = 500.0;

      /* Initializing blender instance */

      std::vector< double > pixelScales;
      pixelScales.push_back( 1 );

      std::vector< double > pixelOffsets;
      pixelOffsets.push_back( 0 );

      TePDIBlender blender;
      TEAGN_TRUE_OR_THROW( blender.init( raster1Ptr, raster1ChannelsVec,
        raster2Ptr, raster2ChannelsVec, TePDIBlender::EuclideanBlendMethod,
        TePDIInterpolator::NNMethod, transParams, 0, pixelOffsets, pixelScales,
        pixelOffsets, pixelScales ),
        "Blender initiation error" );

      // Creating an output image

      TeRasterParams outputRasterParams;
      outputRasterParams.setDataType( TeUNSIGNEDCHAR, 1 );
      outputRasterParams.setNLinesNColumns( raster1Ptr->params().nlines_,
        raster1Ptr->params().ncols_ );
      outputRasterParams.nBands( 1 );
      outputRasterParams.setPhotometric( TeRasterParams::TeRGB, -1 );

      TePDITypes::TePDIRasterPtrType outputRaster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( outputRasterParams,
        outputRaster ), "outputRaster creation error" );

      // Generate output raster blended values

      const int outNLines = outputRaster->params().nlines_;
      const int outNCols = outputRaster->params().ncols_;
      double value = 0;

      for( int line = 0 ; line < outNLines ; ++line )
      {
        for( int col = 0 ; col < outNCols ; ++col )
        {
          blender.blend( line, col, 0, value );

          TEAGN_TRUE_OR_THROW( outputRaster->setElement( col, line, value, 0 ),
            "Error writing value" );
        }
      }

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( outputRaster,
        TEPDIEXAMPLESBINPATH "TePDIBlender_euclideanBlendMethodContainsTest.tif" ),
        "GeoTIF generation error" );
    }

    int main()
    {
      TEAGN_LOGMSG( "Test started." );

      TeStdIOProgress pi;
      TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );

      euclideanBlendMethodContainsTest();
      euclideanBlendMethodNoOverlapTest();
      noBlendMethodNoOverlapTest();
      euclideanBlendMethodTest2();
      euclideanBlendMethodTest1();
      noBlendMethodTest1();

      TEAGN_LOGMSG( "Test OK." );
      return EXIT_SUCCESS;
    }

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines