| TerraLib 4.1

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

TePDIFusion_test.cpp

Shows how to use this class.

    #define TEAGN_ENABLE_STDOUT_LOG

    #include <TePDIExamplesBase.hpp>

    #include <TePDIParameters.hpp>
    #include <TeAgnostic.h>
    #include <TePDIUtils.hpp>
    #include <TePDIPrincipalComponentsFusion.hpp>
    #include <TePDIIHSFusion.hpp>
    #include <TePDIVenturaFusion.hpp>
    #include <TePDIGarguetFusion.hpp>
    #include <TePDIGeneralizedIHSFusion.hpp>
    #include <TePDIIHSWaveletFusion.hpp>
    #include <TePDIPCAWaveletFusion.hpp>
    #include <TePDIWaveletAtrousFusion.hpp>
    #include <TePDIWiSpeRFusion.hpp>

    #include <TeInitRasterDecoders.h>
    #include <TeProgress.h>
    #include <TeStdIOProgress.h>
    #include <TeRasterParams.h>

    #include <vector>

    void GarguetFusion_test()
    {
      TePDIParameters params1;

      /* Building rasters */

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

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

      TePDITypes::TePDIRasterPtrType output_raster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), "output_raster Alloc error" );

      params1.SetParameter( "reference_raster" , reference_raster );
      params1.SetParameter( "lowres_raster" , lowres_raster );
      params1.SetParameter( "output_raster" , output_raster );
      params1.SetParameter( "reference_raster_band" , 0 );
      params1.SetParameter( "lowres_raster_band" , 0 );

      TePDIGarguetFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Reset(params1), "Reset failed" );

      TEAGN_TRUE_OR_THROW( fusion.Apply(), "Apply error" );

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

    void VenturaFusion_test()
    {
      TePDIParameters params1;

      /* Building rasters */

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

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

      TePDITypes::TePDIRasterPtrType output_raster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), "output_raster Alloc error" );

      params1.SetParameter( "reference_raster" , reference_raster );
      params1.SetParameter( "lowres_raster" , lowres_raster );
      params1.SetParameter( "output_raster" , output_raster );
      params1.SetParameter( "reference_raster_band" , 0 );
      params1.SetParameter( "lowres_raster_band" , 0 );

      TePDIVenturaFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Reset(params1), "Reset failed" );

      TEAGN_TRUE_OR_THROW( fusion.Apply(), "Apply error" );

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

    void IHSFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the rgb raster */

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

      TePDITypes::TePDIRasterVectorType lowres_rasters;
      lowres_rasters.push_back( rgb_raster );
      lowres_rasters.push_back( rgb_raster );
      lowres_rasters.push_back( rgb_raster );

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

      /* Building output raster */

      TePDITypes::TePDIRasterPtrType output_raster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster,
        1, 1, 1, false, rgb_raster->params().dataType_[ 0 ], 0 ), "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params1;

      params1.SetParameter( "reference_raster" , reference_raster );
      params1.SetParameter( "lowres_rasters" , lowres_rasters );
      params1.SetParameter( "lowres_channels" , lowres_channels );
      params1.SetParameter( "output_raster" , output_raster );
      params1.SetParameter( "reference_raster_band" , 0 );
      params1.SetParameter( "interpol_method" , TePDIInterpolator::NNMethod );

      TePDIIHSFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Reset(params1), "Reset failed" );

      TEAGN_TRUE_OR_THROW( fusion.Apply(), "Apply error" );

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

    void TePDIPrincipalComponentsFusion_test()
    {
               TePDIParameters params;

               TePDITypes::TePDIRasterVectorType input_rasters;
               TePDITypes::TePDIRasterVectorType output_rasters;
               std::vector<int> bands_direct;

               for (unsigned int b = 0; b < 3; b++)
               {
                          TePDITypes::TePDIRasterPtrType inRaster(new TeRaster(
                            TEPDIEXAMPLESRESPATH "cbers2b_rgb342_crop.tif", 'r'));
                          TEAGN_TRUE_OR_THROW(inRaster->init(), "Unable to init inRaster " +
                            Te2String(b));
                          input_rasters.push_back(inRaster);

                          TePDITypes::TePDIRasterPtrType outRaster;
                          TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(outRaster, 1, 1, 1,
          false, TeUNSIGNEDCHAR, 0), "RAM Raster " + Te2String(b+1) + " Alloc error");
                          output_rasters.push_back(outRaster);

                          bands_direct.push_back( (int)b );
               }

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

               params.SetParameter("input_rasters", input_rasters);
               params.SetParameter("bands", bands_direct);
               params.SetParameter("output_rasters", output_rasters);
               params.SetParameter("reference_raster", reference_raster);
               params.SetParameter("reference_raster_band", 0);
               params.SetParameter("resampling_type",
                 TePDIInterpolator::NNMethod);
               params.SetParameter("fit_histogram", false);

               TePDIPrincipalComponentsFusion pcf;
               TEAGN_TRUE_OR_THROW(pcf.Reset(params), "Invalid Parameters");
               TEAGN_TRUE_OR_THROW(pcf.Apply(), "Apply error");

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_rasters[ 0 ],
        TEPDIEXAMPLESBINPATH "Fusion_PC_test_output_b0.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_rasters[ 1 ],
        TEPDIEXAMPLESBINPATH "Fusion_PC_test_output_b1.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_rasters[ 2 ],
        TEPDIEXAMPLESBINPATH "Fusion_PC_test_output_b2.tif" ),
        "GeoTIF generation error" );
    }

    void TePDIGeneralizedIHSFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the input rasters */

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

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

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

      /* Building output rasters */

      TePDITypes::TePDIRasterPtrType ihs_output_raster1;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( ihs_output_raster1,
        1, 1, 1, false, TeFLOAT, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType ihs_output_raster2;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( ihs_output_raster2,
        1, 1, 1, false, TeFLOAT, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType ihs_output_raster3;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( ihs_output_raster3,
        1, 1, 1, false, TeFLOAT, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType rgb_output_raster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( rgb_output_raster,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params;

      params.SetParameter("pp_type",
        TePDIGeneralizedIHSFusion::MeanPreProcessing);

      params.SetParameter("mean", (double)128 );

      params.SetParameter("variance", (double)128 );

      vector<double> bands_center;
      bands_center.push_back( 0 );
      bands_center.push_back( 0 );
      bands_center.push_back( 0 );
      params.SetParameter("bands_center", bands_center );

      TePDITypes::TePDIRasterVectorType input_rasters;
      input_rasters.push_back( input_raster1 );
      input_rasters.push_back( input_raster2 );
      input_rasters.push_back( input_raster3 );
      params.SetParameter("input_rasters", input_rasters);

      params.SetParameter("pansharpening", (bool)false);

      params.SetParameter("reference_raster", reference_raster);

      params.SetParameter("reference_raster_band", (int)0 );

      TePDITypes::TePDIRasterVectorType ihs_output_rasters;
      ihs_output_rasters.push_back( ihs_output_raster1 );
      ihs_output_rasters.push_back( ihs_output_raster2 );
      ihs_output_rasters.push_back( ihs_output_raster3 );
      params.SetParameter("ihs_output_rasters", ihs_output_rasters);

      params.SetParameter("rgb_output_raster", rgb_output_raster);

      // Running algorithm

      TePDIGeneralizedIHSFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Apply( params ), "Apply error" );

      // Saving data to output files

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

    void TePDIIHSWaveletFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the rgb raster */

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

      /* Building output rasters */

      TePDITypes::TePDIRasterPtrType output_raster1;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster1,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster2;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster2,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster3;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster3,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params;

      TePDITypes::TePDIRasterVectorType input_rasters;
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      params.SetParameter("input_rasters", input_rasters);

      std::vector< int > bands;
      bands.push_back( 0 );
      bands.push_back( 1 );
      bands.push_back( 2 );
      params.SetParameter("bands", bands);

      TePDITypes::TePDIRasterVectorType output_rasters;
      output_rasters.push_back( output_raster1 );
      output_rasters.push_back( output_raster2 );
      output_rasters.push_back( output_raster3 );
      params.SetParameter("output_rasters", output_rasters);

      params.SetParameter("reference_raster", reference_raster);

      params.SetParameter("reference_raster_band", (int)0 );

      params.SetParameter("i_levels", (int)3 );

      params.SetParameter("filter_file",
        std::string( TEPDIEXAMPLESRESPATH "b3spline.flr" ) );

      params.SetParameter("reference_levels", (int)3 );

      params.SetParameter("resampling_type", TePDIIHSWaveletFusion::NNMethod );

      params.SetParameter("fit_histogram", (bool)false );

      // Running algorithm

      TePDIIHSWaveletFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Apply( params ), "Apply error" );

      // Saving data to output files

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster1,
        TEPDIEXAMPLESBINPATH "TePDIIHSWaveletFusion_test_output_raster1.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster2,
        TEPDIEXAMPLESBINPATH "TePDIIHSWaveletFusion_test_output_raster2.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster3,
        TEPDIEXAMPLESBINPATH "TePDIIHSWaveletFusion_test_output_raster3.tif" ),
        "GeoTIF generation error" );
    }

    void TePDIPCAWaveletFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the rgb raster */

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

      /* Building output rasters */

      TePDITypes::TePDIRasterPtrType output_raster1;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster1,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster2;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster2,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster3;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster3,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params;

      TePDITypes::TePDIRasterVectorType input_rasters;
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      params.SetParameter("input_rasters", input_rasters);

      std::vector< int > bands;
      bands.push_back( 0 );
      bands.push_back( 1 );
      bands.push_back( 2 );
      params.SetParameter("bands", bands);

      TePDITypes::TePDIRasterVectorType output_rasters;
      output_rasters.push_back( output_raster1 );
      output_rasters.push_back( output_raster2 );
      output_rasters.push_back( output_raster3 );
      params.SetParameter("output_rasters", output_rasters);

      params.SetParameter("reference_raster", reference_raster);

      params.SetParameter("reference_raster_band", (int)0 );

      params.SetParameter("pca1_levels", (int)3 );

      params.SetParameter("filter_file",
        std::string( TEPDIEXAMPLESRESPATH "b3spline.flr" ) );

      params.SetParameter("reference_levels", (int)3 );

      params.SetParameter("resampling_type", TePDIPCAWaveletFusion::NNMethod );

      params.SetParameter("fit_histogram", (bool)false );

      // Running algorithm

      TePDIPCAWaveletFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Apply( params ), "Apply error" );

      // Saving data to output files

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster1,
        TEPDIEXAMPLESBINPATH "TePDIPCAWaveletFusion_test_output_raster1.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster2,
        TEPDIEXAMPLESBINPATH "TePDIPCAWaveletFusion_test_output_raster2.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster3,
        TEPDIEXAMPLESBINPATH "TePDIPCAWaveletFusion_test_output_raster3.tif" ),
        "GeoTIF generation error" );
    }

    void TePDIWaveletAtrousFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the rgb raster */

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

      /* Building output rasters */

      TePDITypes::TePDIRasterPtrType output_raster1;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster1,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster2;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster2,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster3;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster3,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ),
        "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params;

      TePDITypes::TePDIRasterVectorType input_rasters;
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      params.SetParameter("input_rasters", input_rasters);

      std::vector< int > bands;
      bands.push_back( 0 );
      bands.push_back( 1 );
      bands.push_back( 2 );
      params.SetParameter("bands", bands);

      TePDITypes::TePDIRasterVectorType output_rasters;
      output_rasters.push_back( output_raster1 );
      output_rasters.push_back( output_raster2 );
      output_rasters.push_back( output_raster3 );
      params.SetParameter("output_rasters", output_rasters);

      params.SetParameter("reference_raster", reference_raster);

      params.SetParameter("reference_raster_band", (int)0 );

      params.SetParameter("rasters_levels", (int)3 );

      params.SetParameter("filter_type", TePDIWaveletAtrous::B3SplineFilter );

      params.SetParameter("reference_levels", (int)3 );

      params.SetParameter("resampling_type", TePDIWaveletAtrousFusion::NNMethod );

      params.SetParameter("fit_histogram", (bool)false );

      // Running algorithm

      TePDIWaveletAtrousFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Apply( params ), "Apply error" );

      // Saving data to output files

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster1,
        TEPDIEXAMPLESBINPATH "TePDIWaveletAtrousFusion_test_output_raster1.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster2,
        TEPDIEXAMPLESBINPATH "TePDIWaveletAtrousFusion_test_output_raster2.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster3,
        TEPDIEXAMPLESBINPATH "TePDIWaveletAtrousFusion_test_output_raster3.tif" ),
        "GeoTIF generation error" );
    }

    void TePDIWiSpeRFusion_test()
    {
      /* Initializing the reference raster */

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

      /* Initializing the rgb raster */

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

      /* Building output rasters */

      TePDITypes::TePDIRasterPtrType output_raster1;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster1,
        1, 1, 1, false, rgb_raster->params().dataType_[ 0 ], 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster2;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster2,
        1, 1, 1, false, rgb_raster->params().dataType_[ 0 ], 0 ),
        "output_raster Alloc error" );

      TePDITypes::TePDIRasterPtrType output_raster3;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster3,
        1, 1, 1, false, rgb_raster->params().dataType_[ 0 ], 0 ),
        "output_raster Alloc error" );

      /* Building algorithm parameters */

      TePDIParameters params;

      TePDITypes::TePDIRasterVectorType input_rasters;
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      input_rasters.push_back( rgb_raster );
      params.SetParameter("input_rasters", input_rasters);

      std::vector< int > bands;
      bands.push_back( 0 );
      bands.push_back( 1 );
      bands.push_back( 2 );
      params.SetParameter("bands", bands);

      TePDITypes::TePDIRasterVectorType output_rasters;
      output_rasters.push_back( output_raster1 );
      output_rasters.push_back( output_raster2 );
      output_rasters.push_back( output_raster3 );
      params.SetParameter("output_rasters", output_rasters);

      params.SetParameter("reference_raster", reference_raster);

      params.SetParameter("reference_raster_band", (int)0 );

      params.SetParameter("rasters_levels", (int)3 );

      params.SetParameter("filter_file",
        std::string( TEPDIEXAMPLESRESPATH "b3spline.flr" ) );

      params.SetParameter("reference_levels", (int)3 );

      params.SetParameter("resampling_type", TePDIWiSpeRFusion::NNMethod );

      params.SetParameter("fit_histogram", (bool)false );

      params.SetParameter("satelliteName", std::string(
        TEPDIEXAMPLESRESPATH "spot5.srf" ) );

      std::vector<int> bands_order;
      bands_order.push_back( 0 );
      bands_order.push_back( 1 );
      bands_order.push_back( 2 );
      params.SetParameter("bands_order", bands_order );

      // Running algorithm

      TePDIWiSpeRFusion fusion;

      TEAGN_TRUE_OR_THROW( fusion.Apply( params ), "Apply error" );

      // Saving data to output files

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster1,
        TEPDIEXAMPLESBINPATH "TePDIWiSpeRFusion_test_output_raster1.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster2,
        TEPDIEXAMPLESBINPATH "TePDIWiSpeRFusion_test_output_raster2.tif" ),
        "GeoTIF generation error" );
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster3,
        TEPDIEXAMPLESBINPATH "TePDIWiSpeRFusion_test_output_raster3.tif" ),
        "GeoTIF generation error" );
    }

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

      try{
        TeInitRasterDecoders();

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

    //    TePDIGeneralizedIHSFusion_test(); ALGORITHM NOT WORKING !!
        TePDIIHSWaveletFusion_test();
        TePDIPCAWaveletFusion_test();
        TePDIWaveletAtrousFusion_test();
    //    TePDIWiSpeRFusion_test(); ALGORITHM NOT WORKING !!
        IHSFusion_test();
        GarguetFusion_test();
        VenturaFusion_test();
        TePDIPrincipalComponentsFusion_test();
      }
      catch( const TeException& excpt ){
        TEAGN_LOGERR( excpt.message() )
        return EXIT_FAILURE;
      }

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

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines