00001 #define TEAGN_ENABLE_STDOUT_LOG
00002
00003 #include <TePDIExamplesBase.hpp>
00004
00005 #include <TePDIColorTransform.hpp>
00006 #include <TePDIParameters.hpp>
00007 #include <TeAgnostic.h>
00008 #include <TePDIUtils.hpp>
00009
00010 #include <TeRaster.h>
00011 #include <TeInitRasterDecoders.h>
00012 #include <TeProgress.h>
00013 #include <TeStdIOProgress.h>
00014
00015
00016 void RGB2IHS_IHS2RGB_image_test()
00017 {
00018 TePDITypes::TePDIRasterPtrType IHSRasterPtr;
00019
00020
00021 {
00022 TePDIParameters params;
00023
00024 TePDITypes::TePDIRasterPtrType rgb_raster( new TeRaster(
00025 std::string( TEPDIEXAMPLESRESPATH "cbers2b_rgb342_crop.tif" ), 'r' ) );
00026 TEAGN_TRUE_OR_THROW( rgb_raster->init(),
00027 "Unable to init input_raster1" );
00028
00029 TePDITypes::TePDIRasterVectorType input_rasters;
00030 input_rasters.push_back( rgb_raster );
00031 input_rasters.push_back( rgb_raster );
00032 input_rasters.push_back( rgb_raster );
00033 params.SetParameter( "input_rasters", input_rasters );
00034
00035 std::vector< int > input_channels;
00036 input_channels.push_back( 0 );
00037 input_channels.push_back( 1 );
00038 input_channels.push_back( 2 );
00039 params.SetParameter( "input_channels", input_channels );
00040
00041 TeRasterParams outRaster_params;
00042 outRaster_params.nBands( 3 );
00043 outRaster_params.setNLinesNColumns( 1, 1 );
00044 outRaster_params.setDataType( TeFLOAT, -1 );
00045 TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( IHSRasterPtr,
00046 outRaster_params, false ), "output_raster Alloc error" );
00047
00048 TePDITypes::TePDIRasterVectorType output_rasters;
00049 output_rasters.push_back( IHSRasterPtr );
00050 params.SetParameter( "output_rasters", output_rasters );
00051
00052 params.SetParameter( "transf_type", TePDIColorTransform::Rgb2Ihs );
00053 params.SetParameter( "rgb_channels_min", (double)0.0 );
00054 params.SetParameter( "rgb_channels_max", (double)255.0 );
00055
00056 TePDIColorTransform ct;
00057
00058 TEAGN_TRUE_OR_THROW( ct.Reset( params ),
00059 "Invalid Parameters" );
00060
00061 TEAGN_TRUE_OR_THROW( ct.Apply(),
00062 "Apply error" );
00063
00064 TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( IHSRasterPtr,
00065 TEPDIEXAMPLESBINPATH
00066 "TePDIColorTransform_RGB2IHS_IHS2RGB_image_test_ihs.tif" ),
00067 "GeoTIF generation error" );
00068 }
00069
00070 TePDITypes::TePDIRasterPtrType RGBRasterPtr;
00071
00072
00073 {
00074 TePDIParameters params;
00075
00076 TePDITypes::TePDIRasterVectorType input_rasters;
00077 input_rasters.push_back( IHSRasterPtr );
00078 input_rasters.push_back( IHSRasterPtr );
00079 input_rasters.push_back( IHSRasterPtr );
00080 params.SetParameter( "input_rasters", input_rasters );
00081
00082 std::vector< int > input_channels;
00083 input_channels.push_back( 0 );
00084 input_channels.push_back( 1 );
00085 input_channels.push_back( 2 );
00086 params.SetParameter( "input_channels", input_channels );
00087
00088 TeRasterParams outRaster_params;
00089 outRaster_params.nBands( 3 );
00090 outRaster_params.setNLinesNColumns( 1, 1 );
00091 outRaster_params.setDataType( TeUNSIGNEDCHAR, -1 );
00092 outRaster_params.setPhotometric( TeRasterParams::TeRGB, -1 );
00093
00094 TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RGBRasterPtr,
00095 outRaster_params, false ), "output_raster Alloc error" );
00096
00097 TePDITypes::TePDIRasterVectorType output_rasters;
00098 output_rasters.push_back( RGBRasterPtr );
00099 params.SetParameter( "output_rasters", output_rasters );
00100
00101 params.SetParameter( "transf_type", TePDIColorTransform::Ihs2Rgb );
00102
00103 params.SetParameter( "rgb_channels_min", (double)0.0 );
00104 params.SetParameter( "rgb_channels_max", (double)255.0 );
00105
00106 TePDIColorTransform ct;
00107
00108 TEAGN_TRUE_OR_THROW( ct.Reset( params ),
00109 "Invalid Parameters" );
00110
00111 TEAGN_TRUE_OR_THROW( ct.Apply(),
00112 "Apply error" );
00113
00114 TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( RGBRasterPtr,
00115 TEPDIEXAMPLESBINPATH
00116 "TePDIColorTransform_RGB2IHS_IHS2RGB_image_test_rgb.tif" ),
00117 "GeoTIF generation error" );
00118 }
00119 }
00120
00121 void RGB2IHS_IHS2RGB_numeric_test()
00122 {
00123
00124
00125 TeRasterParams inRaster_params;
00126 inRaster_params.mode_ = 'c';
00127 inRaster_params.nBands( 3 );
00128 inRaster_params.setNLinesNColumns( 1, 4 );
00129 inRaster_params.setDataType( TeUNSIGNEDCHAR, -1 );
00130 inRaster_params.decoderIdentifier_ = "SMARTMEM";
00131 inRaster_params.setPhotometric( TeRasterParams::TeMultiBand, -1 );
00132 TePDITypes::TePDIRasterPtrType inRaster( new TeRaster( inRaster_params ) );
00133 TEAGN_TRUE_OR_THROW( inRaster->init(),
00134 "inRaster allocation error" );
00135
00136 TEAGN_TRUE_OR_THROW( inRaster->setElement( 0, 0, 50., 0 ), "value set" );
00137 TEAGN_TRUE_OR_THROW( inRaster->setElement( 0, 0, 50., 1 ), "value set" );
00138 TEAGN_TRUE_OR_THROW( inRaster->setElement( 0, 0, 50., 2 ), "value set" );
00139 TEAGN_TRUE_OR_THROW( inRaster->setElement( 1, 0, 0., 0 ), "value set" );
00140 TEAGN_TRUE_OR_THROW( inRaster->setElement( 1, 0, 200., 1 ), "value set" );
00141 TEAGN_TRUE_OR_THROW( inRaster->setElement( 1, 0, 255., 2 ), "value set" );
00142 TEAGN_TRUE_OR_THROW( inRaster->setElement( 2, 0, 0.0, 0 ), "value set" );
00143 TEAGN_TRUE_OR_THROW( inRaster->setElement( 2, 0, 0.0, 1 ), "value set" );
00144 TEAGN_TRUE_OR_THROW( inRaster->setElement( 2, 0, 0.0, 2 ), "value set" );
00145 TEAGN_TRUE_OR_THROW( inRaster->setElement( 3, 0, 255.0, 0 ), "value set" );
00146 TEAGN_TRUE_OR_THROW( inRaster->setElement( 3, 0, 255.0, 1 ), "value set" );
00147 TEAGN_TRUE_OR_THROW( inRaster->setElement( 3, 0, 255.0, 2 ), "value set" );
00148
00149 TeRasterParams outRaster_params;
00150 outRaster_params.mode_ = 'c';
00151 outRaster_params.nBands( 3 );
00152 outRaster_params.setNLinesNColumns( 1, 1 );
00153 outRaster_params.setDataType( TeDOUBLE, -1 );
00154 outRaster_params.decoderIdentifier_ = "SMARTMEM";
00155 TePDITypes::TePDIRasterPtrType outRaster( new TeRaster( outRaster_params ) );
00156 TEAGN_TRUE_OR_THROW( outRaster->init(),
00157 "outRaster allocation error" );
00158
00159 TePDIParameters params;
00160
00161 TePDITypes::TePDIRasterVectorType input_rasters;
00162 input_rasters.push_back( inRaster );
00163 input_rasters.push_back( inRaster );
00164 input_rasters.push_back( inRaster );
00165 params.SetParameter( "input_rasters", input_rasters );
00166
00167 std::vector< int > input_channels;
00168 input_channels.push_back( 0 );
00169 input_channels.push_back( 1 );
00170 input_channels.push_back( 2 );
00171 params.SetParameter( "input_channels", input_channels );
00172
00173 TePDITypes::TePDIRasterVectorType output_rasters;
00174 output_rasters.push_back( outRaster );
00175 params.SetParameter( "output_rasters", output_rasters );
00176
00177 params.SetParameter( "transf_type", TePDIColorTransform::Rgb2Ihs );
00178 params.SetParameter( "rgb_channels_min", (double)0.0 );
00179 params.SetParameter( "rgb_channels_max", (double)255.0 );
00180
00181 TePDIColorTransform ct;
00182
00183 TEAGN_TRUE_OR_THROW( ct.Reset( params ),
00184 "Invalid Parameters" );
00185
00186 TEAGN_TRUE_OR_THROW( ct.Apply(),
00187 "Apply error" );
00188
00189 double value;
00190 TEAGN_TRUE_OR_THROW( outRaster->getElement( 0, 0, value, 0 ), "Value get" );
00191 TEAGN_CHECK_EPS( value, 0.196078, 0.0001,
00192 "Invalid value" );
00193 TEAGN_TRUE_OR_THROW( outRaster->getElement( 0, 0, value, 1 ), "Value get" );
00194 TEAGN_CHECK_EPS( value, 0.0, 0.00001,
00195 "Invalid value" );
00196 TEAGN_TRUE_OR_THROW( outRaster->getElement( 0, 0, value, 2 ), "Value get" );
00197 TEAGN_CHECK_EPS( value, 0.0, 0.0001,
00198 "Invalid value" );
00199
00200 TEAGN_TRUE_OR_THROW( outRaster->getElement( 1, 0, value, 0 ), "Value get" );
00201 TEAGN_CHECK_EPS( value, 0.594771, 0.0001,
00202 "Invalid value" );
00203 TEAGN_TRUE_OR_THROW( outRaster->getElement( 1, 0, value, 1 ), "Value get" );
00204 TEAGN_CHECK_EPS( value, 3.347980, 0.00001,
00205 "Invalid value" );
00206 TEAGN_TRUE_OR_THROW( outRaster->getElement( 1, 0, value, 2 ), "Value get" );
00207 TEAGN_CHECK_EPS( value, 1.0, 0.0001,
00208 "Invalid value" );
00209
00210 TEAGN_TRUE_OR_THROW( outRaster->getElement( 2, 0, value, 0 ), "Value get" );
00211 TEAGN_CHECK_EPS( value, 0.0, 0.0001,
00212 "Invalid value" );
00213 TEAGN_TRUE_OR_THROW( outRaster->getElement( 2, 0, value, 1 ), "Value get" );
00214 TEAGN_CHECK_EPS( value, 0.0, 0.00001,
00215 "Invalid value" );
00216 TEAGN_TRUE_OR_THROW( outRaster->getElement( 2, 0, value, 2 ), "Value get" );
00217 TEAGN_CHECK_EPS( value, 0.0, 0.0001,
00218 "Invalid value" );
00219
00220 TEAGN_TRUE_OR_THROW( outRaster->getElement( 3, 0, value, 0 ), "Value get" );
00221 TEAGN_CHECK_EPS( value, 1.0, 0.0001,
00222 "Invalid value" );
00223 TEAGN_TRUE_OR_THROW( outRaster->getElement( 3, 0, value, 1 ), "Value get" );
00224 TEAGN_CHECK_EPS( value, 0.0, 0.00001,
00225 "Invalid value" );
00226 TEAGN_TRUE_OR_THROW( outRaster->getElement( 3, 0, value, 2 ), "Value get" );
00227 TEAGN_CHECK_EPS( value, 0.0, 0.0001,
00228 "Invalid value" );
00229
00230
00231
00232 params.Clear();
00233
00234 TeRasterParams outRaster2_params;
00235 outRaster2_params.mode_ = 'c';
00236 outRaster2_params.nBands( 3 );
00237 outRaster2_params.setNLinesNColumns( 1, 1 );
00238 outRaster2_params.setDataType( TeDOUBLE, -1 );
00239 outRaster2_params.decoderIdentifier_ = "SMARTMEM";
00240 outRaster2_params.setPhotometric( TeRasterParams::TeMultiBand, -1 );
00241 TePDITypes::TePDIRasterPtrType outRaster2( new TeRaster(
00242 outRaster2_params ) );
00243 TEAGN_TRUE_OR_THROW( outRaster2->init(),
00244 "outRaster2 allocation error" );
00245
00246 TePDITypes::TePDIRasterVectorType input_rasters2;
00247 input_rasters2.push_back( outRaster );
00248 input_rasters2.push_back( outRaster );
00249 input_rasters2.push_back( outRaster );
00250 params.SetParameter( "input_rasters", input_rasters2 );
00251
00252 std::vector< int > input_channels2;
00253 input_channels2.push_back( 0 );
00254 input_channels2.push_back( 1 );
00255 input_channels2.push_back( 2 );
00256 params.SetParameter( "input_channels", input_channels2 );
00257
00258 TePDITypes::TePDIRasterVectorType output_rasters2;
00259 output_rasters2.push_back( outRaster2 );
00260 params.SetParameter( "output_rasters", output_rasters2 );
00261
00262 params.SetParameter( "transf_type", TePDIColorTransform::Ihs2Rgb );
00263 params.SetParameter( "rgb_channels_min", (double)0.0 );
00264 params.SetParameter( "rgb_channels_max", (double)255.0 );
00265
00266 TEAGN_TRUE_OR_THROW( ct.Reset( params ),
00267 "Invalid Parameters" );
00268
00269 TEAGN_TRUE_OR_THROW( ct.Apply(),
00270 "Apply error" );
00271
00272 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 0, 0, value, 0 ), "Value get" );
00273 TEAGN_CHECK_EPS( value, 50.0, 0.000001, "Invalid value" );
00274 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 0, 0, value, 1 ), "Value get" );
00275 TEAGN_CHECK_EPS( value, 50.0, 0.000001, "Invalid value" );
00276 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 0, 0, value, 2 ), "Value get" );
00277 TEAGN_CHECK_EPS( value, 50.0, 0.000001, "Invalid value" );
00278
00279 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 1, 0, value, 0 ), "Value get" );
00280 TEAGN_CHECK_EPS( value, 0.0, 0.000001, "Invalid value" );
00281 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 1, 0, value, 1 ), "Value get" );
00282 TEAGN_CHECK_EPS( value, 200.0, 0.000001, "Invalid value" );
00283 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 1, 0, value, 2 ), "Value get" );
00284 TEAGN_CHECK_EPS( value, 255.0, 0.000001, "Invalid value" );
00285
00286 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 2, 0, value, 0 ), "Value get" );
00287 TEAGN_CHECK_EPS( value, 0.0, 0.000001, "Invalid value" );
00288 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 2, 0, value, 1 ), "Value get" );
00289 TEAGN_CHECK_EPS( value, 0.0, 0.000001, "Invalid value" );
00290 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 2, 0, value, 2 ), "Value get" );
00291 TEAGN_CHECK_EPS( value, 0.0, 0.000001, "Invalid value" );
00292
00293 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 3, 0, value, 0 ), "Value get" );
00294 TEAGN_CHECK_EPS( value, 255.0, 0.000001, "Invalid value" );
00295 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 3, 0, value, 1 ), "Value get" );
00296 TEAGN_CHECK_EPS( value, 255.0, 0.000001, "Invalid value" );
00297 TEAGN_TRUE_OR_THROW( outRaster2->getElement( 3, 0, value, 2 ), "Value get" );
00298 TEAGN_CHECK_EPS( value, 255.0, 0.000001, "Invalid value" );
00299 }
00300
00301
00302 int main()
00303 {
00304 TEAGN_LOGMSG( "Test started." );
00305
00306 try{
00307 TeStdIOProgress pi;
00308 TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );
00309
00310 TeInitRasterDecoders();
00311
00312 RGB2IHS_IHS2RGB_image_test();
00313 RGB2IHS_IHS2RGB_numeric_test();
00314 }
00315 catch( const TeException& excpt ){
00316 TEAGN_LOGERR( excpt.message() )
00317 return EXIT_FAILURE;
00318 }
00319
00320 TEAGN_LOGMSG( "Test OK." );
00321 return EXIT_SUCCESS;
00322 }