TePDIPrincipalComponents_test.cpp

Go to the documentation of this file.
00001 #include <TePDIPrincipalComponents.hpp>
00002 #include <TePDIParameters.hpp>
00003 #include <TeAgnostic.h>
00004 #include <TePDIUtils.hpp>
00005 
00006 #include <TeRaster.h>
00007 
00008 #include <TeProgress.h>
00009 #include <TeStdIOProgress.h>
00010 
00011 #include <TePDIExamplesBase.hpp>
00012 
00013 void pca_test()
00014 {
00015 /********* Direct analysis *********/
00016 
00017         TePDIPrincipalComponents::TePDIPCAType analysis_type = 
00018           TePDIPrincipalComponents::TePDIPCADirect;
00019 
00020         TePDIParameters params_direct;
00021 
00022         TePDITypes::TePDIRasterPtrType inRaster1( new TeRaster(
00023           std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ), 
00024           'r') );
00025         TEAGN_TRUE_OR_THROW(inRaster1->init(), 
00026           "Unable to init inRaster1");
00027           
00028         TePDITypes::TePDIRasterPtrType inRaster2( new TeRaster(
00029           std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ),
00030           'r') );
00031         TEAGN_TRUE_OR_THROW(inRaster2->init(), 
00032           "Unable to init inRaster2");
00033         
00034         TePDITypes::TePDIRasterPtrType inRaster3(new TeRaster(
00035           std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1.tif" ),
00036           'r') );
00037         TEAGN_TRUE_OR_THROW(inRaster3->init(), "Unable to init inRaster3");
00038         
00039         TePDITypes::TePDIRasterVectorType input_rasters;
00040         input_rasters.push_back(inRaster1);
00041         input_rasters.push_back(inRaster2);
00042         input_rasters.push_back(inRaster3);
00043 
00044         std::vector<int> bands_direct;
00045         bands_direct.push_back(0);
00046         bands_direct.push_back(1);
00047         bands_direct.push_back(2);
00048         
00049         TePDITypes::TePDIRasterPtrType outRaster1_direct;
00050         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00051           outRaster1_direct, 1, 1, 1, false, TeDOUBLE, 0), 
00052           "RAM Raster 1 Alloc error");
00053           
00054         TePDITypes::TePDIRasterPtrType outRaster2_direct;
00055         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00056           outRaster2_direct, 1, 1, 1, false, TeDOUBLE, 0), 
00057           "RAM Raster 2 Alloc error");
00058           
00059         TePDITypes::TePDIRasterPtrType outRaster3_direct;
00060         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00061           outRaster3_direct, 1, 1, 1, false, TeDOUBLE, 0 ), 
00062           "RAM Raster 3 Alloc error");
00063         
00064         TePDITypes::TePDIRasterVectorType output_rasters_direct;
00065         output_rasters_direct.push_back(outRaster1_direct);
00066         output_rasters_direct.push_back(outRaster2_direct);
00067         output_rasters_direct.push_back(outRaster3_direct);
00068         
00069         TeSharedPtr<TeMatrix> covariance_matrix(new TeMatrix);
00070         
00071         params_direct.SetParameter("analysis_type", analysis_type);
00072         params_direct.SetParameter("input_rasters", input_rasters);
00073         params_direct.SetParameter("bands", bands_direct);
00074         params_direct.SetParameter("output_rasters", output_rasters_direct);
00075         params_direct.SetParameter("covariance_matrix", covariance_matrix);
00076         
00077         TePDIPrincipalComponents pc_direct;
00078         TEAGN_TRUE_OR_THROW(pc_direct.Reset(params_direct), "Invalid Parameters");
00079         TEAGN_TRUE_OR_THROW(pc_direct.Apply(), "Apply error");
00080         
00081         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00082           output_rasters_direct[0], 
00083           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_pca0.tif" ), 
00084           "GeoTIFF0 generation error");
00085         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00086           output_rasters_direct[1], 
00087           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_pca1.tif" ), 
00088           "GeoTIFF1 generation error");
00089         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00090           output_rasters_direct[2], 
00091           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_pca2.tif" ), 
00092           "GeoTIFF2 generation error");
00093 
00094 /********* Inverse analysis *********/
00095         
00096         analysis_type = TePDIPrincipalComponents::TePDIPCAInverse;
00097         
00098         TePDIParameters params_inverse;
00099 
00100         std::vector< int > bands_inverse;
00101         bands_inverse.push_back(0);
00102         bands_inverse.push_back(0);
00103         bands_inverse.push_back(0);
00104 
00105         TePDITypes::TePDIRasterPtrType outRaster1_inverse;
00106         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00107           outRaster1_inverse, 1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), 
00108           "RAM Raster 1 Alloc error");
00109           
00110         TePDITypes::TePDIRasterPtrType outRaster2_inverse;
00111         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00112           outRaster2_inverse, 1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), 
00113           "RAM Raster 2 Alloc error");
00114           
00115         TePDITypes::TePDIRasterPtrType outRaster3_inverse;
00116         TEAGN_TRUE_OR_THROW(TePDIUtils::TeAllocRAMRaster(
00117           outRaster3_inverse, 1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), 
00118           "RAM Raster 3 Alloc error");
00119         
00120         TePDITypes::TePDIRasterVectorType output_rasters_inverse;
00121         output_rasters_inverse.push_back(outRaster1_inverse);
00122         output_rasters_inverse.push_back(outRaster2_inverse);
00123         output_rasters_inverse.push_back(outRaster3_inverse);
00124         
00125         params_inverse.SetParameter("analysis_type", analysis_type);
00126         params_inverse.SetParameter("input_rasters", 
00127           output_rasters_direct);
00128         params_inverse.SetParameter("bands", bands_inverse);
00129         params_inverse.SetParameter("output_rasters", 
00130           output_rasters_inverse);
00131         params_inverse.SetParameter("covariance_matrix", 
00132           covariance_matrix);
00133         
00134         TePDIPrincipalComponents pc_inverse;
00135         TEAGN_TRUE_OR_THROW(pc_inverse.Reset(params_inverse), 
00136           "Invalid Parameters");
00137         TEAGN_TRUE_OR_THROW(pc_inverse.Apply(), "Apply error");
00138         
00139         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00140           output_rasters_inverse[0], 
00141           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_band0.tif"), 
00142           "GeoTIFF0 generation error");
00143         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00144           output_rasters_inverse[1], 
00145           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_band1.tif"), 
00146           "GeoTIFF1 generation error");
00147         TEAGN_TRUE_OR_THROW(TePDIUtils::TeRaster2Geotiff(
00148           output_rasters_inverse[2], 
00149           TEPDIEXAMPLESBINPATH "TePDIPrincipalComponents_band2.tif"), 
00150           "GeoTIFF2 generation error");
00151 }
00152 
00153 int main()
00154 {
00155   TEAGN_LOGMSG( "Test started." );
00156 
00157   TEAGN_DEBUG_MODE_CHECK;
00158 
00159   try{
00160     TeStdIOProgress pi;
00161     TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );
00162 
00163     pca_test();
00164   }
00165   catch( const TeException& e ){
00166     TEAGN_LOGERR( "Test Failed - " + e.message() );
00167     return EXIT_FAILURE;
00168   }  
00169 
00170   TEAGN_LOGMSG( "Test OK." );
00171   return EXIT_SUCCESS;
00172 }

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