examples/rp/MixtureModel.cpp
Go to the documentation of this file.
1 #include "RPExamples.h"
2 
3 // TerraLib
4 #include <terralib/raster.h>
5 #include <terralib/rp.h>
6 
7 // STL
8 #include <iostream>
9 
11 {
12  try
13  {
14  std::cout << "Raster decomposition using Mixture Model module." << std::endl << std::endl;
15 
16 // open input raster
17  std::map<std::string, std::string> rinfo;
18  rinfo["URI"] = TERRALIB_DATA_DIR"/geotiff/cbers2b_rgb342_crop.tif";
20 
21  bool executeok = false;
22  bool initok = false;
23  {
24  std::cout << "Using Linear Mixture Model" << std::endl;
25 
26 // create output raster for linear mixture model
27  std::map<std::string, std::string> orinfo;
28  orinfo["URI"] = TERRALIB_DATA_DIR"/geotiff/cbers2b_rgb342_crop_linearMixtureModel.tif";
29 
30 // create algorithm parameters
31  te::rp::MixtureModel::InputParameters mmInputParameters;
32  te::rp::MixtureModel::OutputParameters mmOutputParameters;
33 
34 // defining input parameters
35  mmInputParameters.m_inputRasterPtr = rin;
36  for (unsigned b = 0; b < rin->getNumberOfBands(); b++)
37  mmInputParameters.m_inputRasterBands.push_back(b);
38  mmInputParameters.m_strategyName = "linear";
39 
40 // link specific parameters with chosen implementation
42  mmInputParameters.setMixtureModelStrategyParams(lmmParameters);
43 
44 // defining endmembers
45  mmInputParameters.m_components["clouds"].push_back(255.0);
46  mmInputParameters.m_components["clouds"].push_back(184.875);
47  mmInputParameters.m_components["clouds"].push_back(255.0);
48 
49  mmInputParameters.m_components["shadow"].push_back(42.075);
50  mmInputParameters.m_components["shadow"].push_back(24.99);
51  mmInputParameters.m_components["shadow"].push_back(49.98);
52 
53  mmInputParameters.m_components["vegetation"].push_back(99.96);
54  mmInputParameters.m_components["vegetation"].push_back(64.005);
55  mmInputParameters.m_components["vegetation"].push_back(154.02);
56 
57 // defining sensor information
58  mmInputParameters.m_inputSensorBands.push_back("CBERS2_CCD_3_RED");
59  mmInputParameters.m_inputSensorBands.push_back("CBERS2_CCD_4_NIR");
60  mmInputParameters.m_inputSensorBands.push_back("CBERS2_CCD_2_GREEN");
61 
62 // defining output parameters
63  mmOutputParameters.m_rInfo = orinfo;
64  mmOutputParameters.m_rType = "GDAL";
65  mmOutputParameters.m_createErrorRaster = true;
66 
67 // execute the algorithm
68  te::rp::MixtureModel mmInstance;
69 
70  initok = mmInstance.initialize(mmInputParameters);
71 
72  if (initok)
73  executeok = mmInstance.execute(mmOutputParameters);
74 
75  if (!executeok)
76  std::cout << "Problems in linear mixture model." << std::endl;
77 
78  std::cout << mmOutputParameters.m_outputRasterPtr->toString() << std::endl;
79  }
80 
81  // clean up
82  delete rin;
83 
84  if (executeok)
85  std::cout << "Done!" << std::endl << std::endl;
86  }
87  catch(const std::exception& e)
88  {
89  std::cout << std::endl << "An exception has occurred in MixtureModel(): " << e.what() << std::endl;
90  }
91  catch(...)
92  {
93  std::cout << std::endl << "An unexpected exception has occurred in MixtureModel()!" << std::endl;
94  }
95 }
96 
Raster decomposition using mixture model.
Definition: MixtureModel.h:62
std::string m_rType
Output raster data source type (as described in te::raster::RasterFactory ).
Definition: MixtureModel.h:154
These routines show how to use the RP (raster processing) module.
std::vector< std::string > m_inputSensorBands
The names of the sensor/bands.
Definition: MixtureModel.h:113
std::string m_strategyName
The mixture model strategy name see each te::rp::MixtureModelStrategyFactory inherited classes docume...
Definition: MixtureModel.h:115
std::map< std::string, std::string > m_rInfo
The necessary information to create the output raster (as described in te::raster::RasterFactory).
Definition: MixtureModel.h:155
MixtureModel input parameters.
Definition: MixtureModel.h:72
int b
Definition: TsRtree.cpp:32
An abstract class for raster data strucutures.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
This file contains include headers for the TerraLib Raster Processing module.
std::map< std::string, std::vector< double > > m_components
A set of endmembers and its radiances.
Definition: MixtureModel.h:114
MixtureModel output parameters.
Definition: MixtureModel.h:127
void MixtureModel()
bool execute(AlgorithmOutputParameters &outputParams)
Executes the mixing model using the parameters defined in inputParams and outputParams.
std::unique_ptr< te::rst::Raster > m_outputRasterPtr
A pointer to the generated output raster, one band per component plus one error band per component (w...
Definition: MixtureModel.h:156
void setMixtureModelStrategyParams(const StrategyParameters &p)
Set specific mixture model strategy parameters.
te::rst::Raster const * m_inputRasterPtr
Input raster.
Definition: MixtureModel.h:111
bool m_createErrorRaster
A flag to indicate that output raster will include the error bands.
Definition: MixtureModel.h:162
bool initialize(const AlgorithmInputParameters &inputParams)
Initializes model with paramters defined in inputParams.
std::vector< unsigned int > m_inputRasterBands
Bands to be processed from the input raster.
Definition: MixtureModel.h:112
static Raster * open(const std::map< std::string, std::string > &rinfo, te::common::AccessPolicy p=te::common::RAccess)
It opens a raster with the given parameters and default raster driver.