Commit db1b3a76 authored by Stephane ALBERT's avatar Stephane ALBERT
Browse files

REFAC: 1649: Replace calls to otb::Wrapper::Application::GetParameterImage<>()...

REFAC: 1649: Replace calls to otb::Wrapper::Application::GetParameterImage<>() by ::GetParameterXImage() when type is statically determined.
No related merge requests found
Showing with 50 additions and 51 deletions
+50 -51
......@@ -54,7 +54,7 @@ public:
/** Filters typedef */
typedef otb::OGRDataToClassStatisticsFilter<FloatVectorImageType,UInt8ImageType> FilterType;
typedef otb::StatisticsXMLFileWriter<FloatVectorImageType::PixelType> StatWriterType;
typedef otb::GeometriesSet GeometriesType;
......@@ -64,7 +64,7 @@ public:
private:
PolygonClassStatistics()
{
}
void DoInit() override
......@@ -98,17 +98,17 @@ private:
AddParameter(ParameterType_InputImage, "mask", "Input validity mask");
SetParameterDescription("mask", "Validity mask (only pixels corresponding to a mask value greater than 0 will be used for statistics)");
MandatoryOff("mask");
AddParameter(ParameterType_InputFilename, "vec", "Input vectors");
SetParameterDescription("vec","Input geometries to analyze");
AddParameter(ParameterType_OutputFilename, "out", "Output XML statistics file");
SetParameterDescription("out","Output file to store statistics (XML format)");
AddParameter(ParameterType_ListView, "field", "Field Name");
SetParameterDescription("field","Name of the field carrying the class name in the input vectors.");
SetListViewSingleSelectionMode("field",true);
AddParameter(ParameterType_Int, "layer", "Layer Index");
SetParameterDescription("layer", "Layer index to read in the input vector file.");
MandatoryOff("layer");
......@@ -138,16 +138,16 @@ private:
ogr::Feature feature = layer.ogr().GetNextFeature();
ClearChoices("field");
for(int iField=0; iField<feature.ogr().GetFieldCount(); iField++)
{
std::string key, item = feature.ogr().GetFieldDefnRef(iField)->GetNameRef();
key = item;
std::string::iterator end = std::remove_if(key.begin(),key.end(),IsNotAlphaNum);
std::transform(key.begin(), end, key.begin(), tolower);
OGRFieldType fieldType = feature.ogr().GetFieldDefnRef(iField)->GetType();
if(fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64)
{
std::string tmpKey="field."+key.substr(0, end - key.begin());
......@@ -159,7 +159,7 @@ private:
// Check that the extension of the output parameter is XML (mandatory for
// StatisticsXMLFileWriter)
// Check it here to trigger the error before polygons analysis
if ( HasValue("out") )
{
// Store filename extension
......@@ -175,7 +175,7 @@ private:
void DoExecute() override
{
otb::ogr::DataSource::Pointer vectors =
otb::ogr::DataSource::Pointer vectors =
otb::ogr::DataSource::New(this->GetParameterString("vec"));
// Retrieve the field name
......@@ -186,7 +186,7 @@ private:
otbAppLogFATAL(<<"No field has been selected for data labelling!");
}
std::vector<std::string> cFieldNames = GetChoiceNames("field");
std::vector<std::string> cFieldNames = GetChoiceNames("field");
std::string fieldName = cFieldNames[selectedCFieldIdx.front()];
otb::Wrapper::ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(this,"elev");
......@@ -203,14 +203,14 @@ private:
GeometriesType::Pointer inputGeomSet;
ProjectionFilterType::Pointer geometriesProjFilter;
GeometriesType::Pointer outputGeomSet;
const OGRSpatialReference imgOGRSref =
const OGRSpatialReference imgOGRSref =
OGRSpatialReference( imageProjectionRef.c_str() );
const OGRSpatialReference vectorOGRSref =
const OGRSpatialReference vectorOGRSref =
OGRSpatialReference( vectorProjectionRef.c_str() );
bool doReproj = true;
// don't reproject for these cases
if ( vectorProjectionRef.empty()
|| ( imgOGRSref.IsSame( &vectorOGRSref ) )
if ( vectorProjectionRef.empty()
|| ( imgOGRSref.IsSame( &vectorOGRSref ) )
|| ( imageProjectionRef.empty() && imageKwl.GetSize() == 0) )
doReproj = false;
......@@ -236,7 +236,7 @@ private:
filter->SetInput(this->GetParameterImage("in"));
if (IsParameterEnabled("mask") && HasValue("mask"))
{
filter->SetMask(this->GetParameterImage<UInt8ImageType>("mask"));
filter->SetMask(this->GetParameterUInt8Image("mask"));
}
filter->SetOGRData(reprojVector);
filter->SetFieldName(fieldName);
......@@ -245,10 +245,10 @@ private:
AddProcess(filter->GetStreamer(),"Analyze polygons...");
filter->Update();
FilterType::ClassCountMapType &classCount = filter->GetClassCountOutput()->Get();
FilterType::PolygonSizeMapType &polySize = filter->GetPolygonSizeOutput()->Get();
StatWriterType::Pointer statWriter = StatWriterType::New();
statWriter->SetFileName(this->GetParameterString("out"));
statWriter->AddInputMap<FilterType::ClassCountMapType>("samplesPerClass",classCount);
......
......@@ -63,7 +63,7 @@ public:
UInt8ImageType,
otb::RandomSampler> RandomSamplerType;
typedef otb::SamplingRateCalculator RateCalculatorType;
typedef std::map<std::string, unsigned long> ClassCountMapType;
typedef RateCalculatorType::MapRateType MapRateType;
typedef itk::VariableLengthVector<float> MeasurementType;
......@@ -96,9 +96,9 @@ private:
"parameters 'in' and 'vec' respectively. Only the sampling grid (origin, size, spacing)"
"will be read in the input image.\n"
"There are several strategies to select samples (parameter strategy) : \n\n"
" - smallest (default) : select the same number of sample in each class"
" - smallest (default) : select the same number of sample in each class"
" so that the smallest one is fully sampled.\n"
" - constant : select the same number of samples N in each class"
" - constant : select the same number of samples N in each class"
" (with N below or equal to the size of the smallest class).\n"
" - byclass : set the required number for each class manually, with an input CSV file"
" (first column is class name, second one is the required samples number).\n\n"
......@@ -109,13 +109,13 @@ private:
" - random : select samples randomly distributed\n\n"
"Once the strategy and type are selected, the application outputs samples positions"
"(parameter out).\n\n"
"The other parameters to look at are : \n\n"
" - layer : index specifying from which layer to pick geometries.\n"
" - field : set the field name containing the class.\n"
" - mask : an optional raster mask can be used to discard samples.\n"
" - outrates : allows outputting a CSV file that summarizes the sampling rates for each class.\n"
"\nAs with the PolygonClassStatistics application, different types of geometry are supported : "
"polygons, lines, points. \nThe behavior of this application is different for each type of geometry : \n\n"
" - polygon: select points whose center is inside the polygon\n"
......@@ -192,7 +192,7 @@ private:
SetParameterDescription("strategy.total.v","The number of samples to generate");
SetMinimumParameterIntValue("strategy.total.v",1);
SetDefaultParameterInt("strategy.total.v",1000);
AddChoice("strategy.smallest","Set same number of samples for all classes, with the smallest class fully sampled");
SetParameterDescription("strategy.smallest","Set same number of samples for all classes, with the smallest class fully sampled");
......@@ -238,16 +238,16 @@ private:
ogr::Feature feature = layer.ogr().GetNextFeature();
ClearChoices("field");
for(int iField=0; iField<feature.ogr().GetFieldCount(); iField++)
{
std::string key, item = feature.ogr().GetFieldDefnRef(iField)->GetNameRef();
key = item;
std::string::iterator end = std::remove_if(key.begin(),key.end(),IsNotAlphaNum);
std::transform(key.begin(), end, key.begin(), tolower);
OGRFieldType fieldType = feature.ogr().GetFieldDefnRef(iField)->GetType();
if(fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64)
{
std::string tmpKey="field."+key.substr(0, end - key.begin());
......@@ -266,26 +266,26 @@ private:
// Get field name
std::vector<int> selectedCFieldIdx = GetSelectedItems("field");
if(selectedCFieldIdx.empty())
{
otbAppLogFATAL(<<"No field has been selected for data labelling!");
}
std::vector<std::string> cFieldNames = GetChoiceNames("field");
std::vector<std::string> cFieldNames = GetChoiceNames("field");
std::string fieldName = cFieldNames[selectedCFieldIdx.front()];
m_ReaderStat->SetFileName(this->GetParameterString("instats"));
ClassCountMapType classCount = m_ReaderStat->GetStatisticMapByName<ClassCountMapType>("samplesPerClass");
m_RateCalculator->SetClassCount(classCount);
switch (this->GetParameterInt("strategy"))
{
// byclass
case 0:
{
otbAppLogINFO("Sampling strategy : set number of samples for each class");
ClassCountMapType requiredCount =
ClassCountMapType requiredCount =
otb::SamplingRateCalculator::ReadRequiredSamples(this->GetParameterString("strategy.byclass.in"));
m_RateCalculator->SetNbOfSamplesByClass(requiredCount);
}
......@@ -330,12 +330,12 @@ private:
otbAppLogFATAL("Strategy mode unknown :"<<this->GetParameterString("strategy"));
break;
}
if (IsParameterEnabled("outrates") && HasValue("outrates"))
{
m_RateCalculator->Write(this->GetParameterString("outrates"));
}
MapRateType rates = m_RateCalculator->GetRatesByClass();
std::ostringstream oss;
oss << " className requiredSamples totalSamples rate" << std::endl;
......@@ -376,16 +376,16 @@ private:
ProjectionFilterType::Pointer geometriesProjFilter;
GeometriesType::Pointer outputGeomSet;
bool doReproj = true;
const OGRSpatialReference imgOGRSref =
const OGRSpatialReference imgOGRSref =
OGRSpatialReference( imageProjectionRef.c_str() );
const OGRSpatialReference vectorOGRSref =
const OGRSpatialReference vectorOGRSref =
OGRSpatialReference( vectorProjectionRef.c_str() );
// don't reproject for these cases
if ( vectorProjectionRef.empty()
|| ( imgOGRSref.IsSame( &vectorOGRSref ) )
|| ( imageProjectionRef.empty() && imageKwl.GetSize() == 0) )
doReproj = false;
if (doReproj)
{
inputGeomSet = GeometriesType::New(vectors);
......@@ -407,7 +407,7 @@ private:
// Create output dataset for sample positions
otb::ogr::DataSource::Pointer outputSamples =
otb::ogr::DataSource::New(this->GetParameterString("out"),otb::ogr::DataSource::Modes::Overwrite);
switch (this->GetParameterInt("sampler"))
{
// periodic
......@@ -426,7 +426,7 @@ private:
periodicFilt->SetSamplerParameters(param);
if (IsParameterEnabled("mask") && HasValue("mask"))
{
periodicFilt->SetMask(this->GetParameterImage<UInt8ImageType>("mask"));
periodicFilt->SetMask(this->GetParameterUInt8Image("mask"));
}
periodicFilt->GetStreamer()->SetAutomaticTiledStreaming(this->GetParameterInt("ram"));
AddProcess(periodicFilt->GetStreamer(),"Selecting positions with periodic sampler...");
......@@ -444,7 +444,7 @@ private:
randomFilt->SetLayerIndex(this->GetParameterInt("layer"));
if (IsParameterEnabled("mask") && HasValue("mask"))
{
randomFilt->SetMask(this->GetParameterImage<UInt8ImageType>("mask"));
randomFilt->SetMask(this->GetParameterUInt8Image("mask"));
}
randomFilt->GetStreamer()->SetAutomaticTiledStreaming(this->GetParameterInt("ram"));
AddProcess(randomFilt->GetStreamer(),"Selecting positions with random sampler...");
......
......@@ -50,7 +50,7 @@ public:
/** Filters typedef */
typedef otb::ImageToNoDataMaskFilter<FloatVectorImageType,UInt8ImageType> FilterType;
typedef otb::ChangeNoDataValueFilter<FloatVectorImageType,FloatVectorImageType> ChangeNoDataFilterType;
typedef otb::ImageList<FloatImageType> ImageListType;
typedef otb::VectorImageToImageListFilter<FloatVectorImageType,ImageListType> VectorToListFilterType;
typedef otb::ImageListToVectorImageFilter<ImageListType,FloatVectorImageType> ListToVectorFilterType;
......@@ -81,12 +81,12 @@ private:
AddParameter(ParameterType_Bool,"usenan", "Consider NaN as no-data");
SetParameterDescription("usenan","If active, the application will consider NaN as no-data values as well");
AddParameter(ParameterType_Choice,"mode","No-data handling mode");
SetParameterDescription("mode","Allows choosing between different no-data handling options");
AddChoice("mode.buildmask","Build a no-data Mask");
AddParameter(ParameterType_Float,"mode.buildmask.inv","Inside Value");
SetParameterDescription("mode.buildmask.inv","Value given in the output mask to pixels that are not no data pixels");
SetDefaultParameterInt("mode.buildmask.inv",1);
......@@ -132,7 +132,7 @@ private:
void DoExecute() override
{
FloatVectorImageType::Pointer inputPtr = this->GetParameterImage("in");
m_Filter = FilterType::New();
m_Filter->SetInsideValue(this->GetParameterFloat("mode.buildmask.inv"));
m_Filter->SetOutsideValue(this->GetParameterFloat("mode.buildmask.outv"));
......@@ -146,7 +146,7 @@ private:
std::vector<double> newNoData(inputPtr->GetNumberOfComponentsPerPixel(),GetParameterFloat("mode.changevalue.newv"));
m_ChangeNoDataFilter->SetNewNoDataValues(newNoData);
if(GetParameterString("mode") == "buildmask")
{
SetParameterOutputImage("out",m_Filter->GetOutput());
......@@ -158,7 +158,7 @@ private:
else if (GetParameterString("mode") == "apply")
{
m_MaskFilters.clear();
UInt8ImageType::Pointer maskPtr = this->GetParameterImage<UInt8ImageType>("mode.apply.mask");
UInt8ImageType::Pointer maskPtr = this->GetParameterUInt8Image("mode.apply.mask");
unsigned int nbBands = inputPtr->GetNumberOfComponentsPerPixel();
itk::MetaDataDictionary &dict = inputPtr->GetMetaDataDictionary();
std::vector<bool> flags;
......@@ -221,4 +221,3 @@ private:
}
OTB_APPLICATION_EXPORT(otb::Wrapper::ManageNoData)
......@@ -33,7 +33,7 @@ namespace Wrapper
*
* This application gathers the 4 steps of the large-scale MeanShift
* segmentation framework.
*
*
*/
class LargeScaleMeanShift : public CompositeApplication
{
......@@ -192,12 +192,12 @@ private:
HasValue("mode.vector.imfield"))
{
GetInternalApplication("vectorization")->SetParameterInputImage("in",
GetParameterImage<ImageBaseType>("mode.vector.imfield"));
GetParameterImageBase("mode.vector.imfield"));
}
else
{
GetInternalApplication("vectorization")->SetParameterInputImage("in",
GetParameterImage<ImageBaseType>("in"));
GetParameterImageBase("in"));
}
GetInternalApplication("vectorization")->SetParameterString("inseg",
tmpFilenames[2]);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment