File: TePDIRegister_test.cpp

package info (click to toggle)
libterralib 4.3.0%2Bdfsg.1-2
  • links: PTS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 70,928 kB
  • sloc: cpp: 254,330; ansic: 82,910; makefile: 814; sh: 80; xml: 37
file content (138 lines) | stat: -rw-r--r-- 5,139 bytes parent folder | download | duplicates (8)
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;
}