TePDIColorTransform_test.cpp

Shows how to use this class.

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   /* Testing RGB -> IHS */
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   /* Testing IHS -> RGB */
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   /* Testing RGB -> IHS */
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   /* Testing IHS -> RGB */
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 }

Generated on Sun Jul 29 04:01:03 2012 for TerraLib - Development Source by  doxygen 1.5.3