1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
#define TEAGN_ENABLE_STDOUT_LOG
#include <TePDIExamplesBase.hpp>
#include <TePDIRegister.hpp>
#include <TePDIParameters.hpp>
#include <TeAgnostic.h>
#include <TePDIUtils.hpp>
#include <TeInitRasterDecoders.h>
#include <TeProgress.h>
#include <TeStdIOProgress.h>
#include <TePrecision.h>
void Register_test1()
{
TePDIParameters params;
TePDITypes::TePDIRasterPtrType reference_raster( new TeRaster(
std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_A.tif" ), 'r' ) );
TEAGN_TRUE_OR_THROW( reference_raster->init(),
"Unable to init reference_raster" );
TePDITypes::TePDIRasterPtrType adjust_disk_raster( new TeRaster(
std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_B_contraste.tif" ), 'r' ) );
TEAGN_TRUE_OR_THROW( adjust_disk_raster->init(),
"Unable to init adjust_disk_raster" );
TePDITypes::TePDIRasterPtrType adjust_raster( new TeRaster() );
{
TeRasterParams adjust_raster_params;
adjust_raster_params.setDataType( TeUNSIGNEDCHAR, -1 );
adjust_raster_params.nBands( 1 );
adjust_raster_params.setNLinesNColumns(
adjust_disk_raster->params().nlines_,
adjust_disk_raster->params().ncols_ );
TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( adjust_raster,
adjust_raster_params, false ), "adjust_raster Alloc error" );
TEAGN_TRUE_OR_THROW( TePDIUtils::TeCopyRasterBands( adjust_disk_raster,
adjust_raster, false, false ), "Pixel copy error" );
}
TePDITypes::TePDIRasterPtrType output_raster;
TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster,
1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), "output_raster Alloc error" );
TePDITypes::TeProjParamsPtrType proj_params( new TeProjectionParams );
*proj_params = reference_raster->projection()->params();
params.SetParameter( "proj_params" , proj_params );
params.SetParameter( "res_x" , reference_raster->params().resx_ );
params.SetParameter( "res_y" , reference_raster->params().resy_ );
params.SetParameter( "adjust_raster" , adjust_raster );
params.SetParameter( "output_raster" , output_raster );
params.SetParameter( "gt_name" , std::string( "affine" ) );
params.SetParameter( "dummy_value" , (double)0.0 );
params.SetParameter( "interpolator" , TePDIInterpolator::NNMethod );
std::vector< int > adjust_channels;
adjust_channels.push_back( 0 );
params.SetParameter( "adjust_channels" , adjust_channels );
TePDITypes::TeCoordPairVectPtrType tie_points( new TeCoordPairVect );
tie_points->push_back(
TeCoordPair( TeCoord2D( 278, 269 ),
reference_raster->index2Coord( TeCoord2D( 492, 502 ) ) ) );
tie_points->push_back(
TeCoordPair( TeCoord2D( 282, 88 ),
reference_raster->index2Coord( TeCoord2D( 495, 320 ) ) ) );
tie_points->push_back(
TeCoordPair( TeCoord2D( 66, 12 ),
reference_raster->index2Coord( TeCoord2D( 279, 245 ) ) ) );
params.SetParameter( "tie_points" , tie_points );
TePDIRegister algo;
TEAGN_TRUE_OR_THROW( algo.Reset(params), "Apply error" );
TEAGN_TRUE_OR_THROW( algo.Apply(), "Apply error" );
TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster,
TEPDIEXAMPLESBINPATH "Register_test1.tif" ), "GeoTIF generation error" );
TEAGN_CHECK_EPS( output_raster->params().nlines_,
adjust_disk_raster->params().nlines_, 7.0, "Invalid lines number" );
TEAGN_CHECK_EPS( output_raster->params().ncols_,
adjust_disk_raster->params().ncols_, 2.0, "Invalid cols number" );
TEAGN_CHECK_EPS( output_raster->params().nBands(),
adjust_disk_raster->params().nBands(), 0.0001, "Invalid bands number" );
TEAGN_CHECK_EPS( output_raster->params().resx_,
adjust_disk_raster->params().resx_, 0.0001, "Invalid x res" );
TEAGN_CHECK_EPS( output_raster->params().resy_,
adjust_disk_raster->params().resy_, 0.0001, "Invalid y res" );
TEAGN_CHECK_EPS( output_raster->params().box().x1(),
adjust_disk_raster->params().box().x1(), 29.0, "Invalid box x1" );
TEAGN_CHECK_EPS( output_raster->params().box().x2(),
adjust_disk_raster->params().box().x2(), 22.0, "Invalid box x2" );
TEAGN_CHECK_EPS( output_raster->params().box().y1(),
adjust_disk_raster->params().box().y1(), 100.0, "Invalid box y1" );
TEAGN_CHECK_EPS( output_raster->params().box().y2(),
adjust_disk_raster->params().box().y2(), 51.0, "Invalid box y2" );
reference_raster.reset();
adjust_disk_raster.reset();
adjust_raster.reset();
output_raster.reset();
tie_points.reset();
}
int main()
{
TEAGN_LOGMSG( "Test started." );
try{
TeInitRasterDecoders();
TeStdIOProgress pi;
TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );
TePrecision::instance().setPrecision( 0.000000000001 );
Register_test1();
}
catch( const TeException& e ){
TEAGN_LOGERR( "Test Failed - " + e.message() );
return EXIT_FAILURE;
}
TEAGN_LOGMSG( "Test OK." );
return EXIT_SUCCESS;
}
|