Skip to content
Snippets Groups Projects
Commit 3cde2ae6 authored by Ludovic Hussonnois's avatar Ludovic Hussonnois
Browse files

REFAC: Apply multiple refactoring for the compute confusion matrix app.

- Change prodnodatalabel -> nodatalabel
- Rename private class member with naming convention.
- Change writeContingencyTable to WriteContingencyTable.
- Change initialization m_RasterizeReference.
parent 0b2a8cce
No related branches found
No related tags found
No related merge requests found
...@@ -83,11 +83,11 @@ public: ...@@ -83,11 +83,11 @@ public:
private: private:
Int32ImageType* input; Int32ImageType* m_Input;
Int32ImageType::Pointer reference; Int32ImageType::Pointer m_Reference;
RAMDrivenAdaptativeStreamingManagerType::Pointer streamingManager; RAMDrivenAdaptativeStreamingManagerType::Pointer m_StreamingManager;
otb::ogr::DataSource::Pointer ogrRef; otb::ogr::DataSource::Pointer m_OgrRef;
RasterizeFilterType::Pointer rasterizeReference = RasterizeFilterType::New(); RasterizeFilterType::Pointer m_RasterizeReference;
struct StreamingInitializationData struct StreamingInitializationData
{ {
...@@ -146,17 +146,25 @@ private: ...@@ -146,17 +146,25 @@ private:
SetParameterDescription("ref.vector.field","Field name containing the label values"); SetParameterDescription("ref.vector.field","Field name containing the label values");
SetListViewSingleSelectionMode("ref.vector.field",true); SetListViewSingleSelectionMode("ref.vector.field",true);
AddParameter(ParameterType_Int,"refnodatalabel","Value for nodata pixels in ref"); AddParameter(ParameterType_Int,"ref.raster.nodata","Value for nodata pixels in ref raster");
SetDefaultParameterInt("refnodatalabel",0); SetDefaultParameterInt("ref.raster.nodata",0);
SetParameterDescription("refnodatalabel","Label to be treated as no data in ref. Please note that this value is always used in vector mode, to generate default values. Please set it to a value that does not correspond to a class label."); SetParameterDescription("ref.raster.nodata","Label to be treated as no data in ref raster.");
MandatoryOff("refnodatalabel"); MandatoryOff("ref.raster.nodata");
DisableParameter("refnodatalabel"); DisableParameter("ref.raster.nodata");
AddParameter(ParameterType_Int,"prodnodatalabel","Value for nodata pixels in input image");
SetParameterDescription("prodnodatalabel","Label to be treated as no data in input image"); AddParameter(ParameterType_Int,"ref.vector.nodata","Value for nodata pixels in ref vector");
SetDefaultParameterInt("prodnodatalabel",0); SetDefaultParameterInt("ref.vector.nodata",0);
SetParameterDescription("ref.vector.nodata","Label to be treated as no data in ref vector. Please note that this value is always used in vector mode, to generate default values. Please set it to a value that does not correspond to a class label.");
MandatoryOff("ref.vector.nodata");
DisableParameter("ref.vector.nodata");
AddParameter(ParameterType_Int,"nodatalabel","Value for nodata pixels in input image");
SetParameterDescription("nodatalabel","Label to be treated as no data in input image");
SetDefaultParameterInt("nodatalabel",0);
MandatoryOff("prodnodatalabel"); MandatoryOff("nodatalabel");
DisableParameter("prodnodatalabel"); DisableParameter("nodatalabel");
AddRAMParameter(); AddRAMParameter();
...@@ -166,7 +174,7 @@ private: ...@@ -166,7 +174,7 @@ private:
SetDocExampleParameterValue("ref", "vector"); SetDocExampleParameterValue("ref", "vector");
SetDocExampleParameterValue("ref.vector.in","VectorData_QB1_bis.shp"); SetDocExampleParameterValue("ref.vector.in","VectorData_QB1_bis.shp");
SetDocExampleParameterValue("ref.vector.field","Class"); SetDocExampleParameterValue("ref.vector.field","Class");
SetDocExampleParameterValue("refnodatalabel","255"); SetDocExampleParameterValue("ref.vector.nodata","255");
} }
void DoUpdateParameters() ITK_OVERRIDE void DoUpdateParameters() ITK_OVERRIDE
...@@ -204,7 +212,7 @@ private: ...@@ -204,7 +212,7 @@ private:
otbAppLogINFO("Contingency table: reference labels (rows) vs. produced labels (cols)\n" << contingencyTable); otbAppLogINFO("Contingency table: reference labels (rows) vs. produced labels (cols)\n" << contingencyTable);
} }
void writeContingencyTable(const ContingencyTableType& contingencyTable) void m_WriteContingencyTable(const ContingencyTableType& contingencyTable)
{ {
std::ofstream outFile; std::ofstream outFile;
outFile.open( this->GetParameterString( "out" ).c_str() ); outFile.open( this->GetParameterString( "out" ).c_str() );
...@@ -289,28 +297,26 @@ private: ...@@ -289,28 +297,26 @@ private:
StreamingInitializationData sid; StreamingInitializationData sid;
input = this->GetParameterInt32Image("in"); m_Input = this->GetParameterInt32Image("in");
std::string field; std::string field;
rasterizeReference = RasterizeFilterType::New(); sid.prodnodata = this->GetParameterInt("nodatalabel");
sid.refnodata = this->GetParameterInt("refnodatalabel"); sid.prodhasnodata = this->IsParameterEnabled("nodatalabel");
sid.refhasnodata = this->IsParameterEnabled("refnodatalabel");
sid.prodnodata = this->GetParameterInt("prodnodatalabel");
sid.prodhasnodata = this->IsParameterEnabled("prodnodatalabel");
if (GetParameterString("ref") == "raster") if (GetParameterString("ref") == "raster")
{ {
reference = this->GetParameterInt32Image("ref.raster.in"); sid.refnodata = this->GetParameterInt("ref.raster.nodata");
sid.refhasnodata = this->IsParameterEnabled("ref.raster.nodata");
m_Reference = this->GetParameterInt32Image("ref.raster.in");
} }
else else
{ {
// Force nodata to true since it will be generated during rasterization // Force nodata to true since it will be generated during rasterization
sid.refhasnodata = true; sid.refhasnodata = true;
sid.refnodata = this->GetParameterInt("ref.vector.nodata");
ogrRef = otb::ogr::DataSource::New(GetParameterString("ref.vector.in"), otb::ogr::DataSource::Modes::Read); m_OgrRef = otb::ogr::DataSource::New(GetParameterString("ref.vector.in"), otb::ogr::DataSource::Modes::Read);
// Get field name // Get field name
std::vector<int> selectedCFieldIdx = GetSelectedItems("ref.vector.field"); std::vector<int> selectedCFieldIdx = GetSelectedItems("ref.vector.field");
...@@ -323,27 +329,28 @@ private: ...@@ -323,27 +329,28 @@ private:
std::vector<std::string> cFieldNames = GetChoiceNames("ref.vector.field"); std::vector<std::string> cFieldNames = GetChoiceNames("ref.vector.field");
field = cFieldNames[selectedCFieldIdx.front()]; field = cFieldNames[selectedCFieldIdx.front()];
rasterizeReference->AddOGRDataSource(ogrRef); m_RasterizeReference = RasterizeFilterType::New();
rasterizeReference->SetOutputParametersFromImage(input); m_RasterizeReference->AddOGRDataSource(m_OgrRef);
rasterizeReference->SetBackgroundValue(sid.refnodata); m_RasterizeReference->SetOutputParametersFromImage(m_Input);
rasterizeReference->SetBurnAttribute(field.c_str()); m_RasterizeReference->SetBackgroundValue(sid.refnodata);
m_RasterizeReference->SetBurnAttribute(field.c_str());
reference = rasterizeReference->GetOutput(); m_Reference = m_RasterizeReference->GetOutput();
reference->UpdateOutputInformation(); m_Reference->UpdateOutputInformation();
} }
// Prepare local streaming // Prepare local streaming
streamingManager = RAMDrivenAdaptativeStreamingManagerType::New(); m_StreamingManager = RAMDrivenAdaptativeStreamingManagerType::New();
int availableRAM = GetParameterInt("ram"); int availableRAM = GetParameterInt("ram");
streamingManager->SetAvailableRAMInMB( static_cast<unsigned int>( availableRAM ) ); m_StreamingManager->SetAvailableRAMInMB( static_cast<unsigned int>( availableRAM ) );
float bias = 2.0; // empiric value; float bias = 2.0; // empiric value;
streamingManager->SetBias(bias); m_StreamingManager->SetBias(bias);
streamingManager->PrepareStreaming(input, input->GetLargestPossibleRegion()); m_StreamingManager->PrepareStreaming(m_Input, m_Input->GetLargestPossibleRegion());
sid.numberOfStreamDivisions = streamingManager->GetNumberOfSplits(); sid.numberOfStreamDivisions = m_StreamingManager->GetNumberOfSplits();
otbAppLogINFO("Number of stream divisions : "<<sid.numberOfStreamDivisions); otbAppLogINFO("Number of stream divisions : "<<sid.numberOfStreamDivisions);
...@@ -371,20 +378,20 @@ private: ...@@ -371,20 +378,20 @@ private:
for (unsigned int index = 0; index < sid.numberOfStreamDivisions; index++) for (unsigned int index = 0; index < sid.numberOfStreamDivisions; index++)
{ {
RegionType streamRegion = streamingManager->GetSplit( index ); RegionType streamRegion = m_StreamingManager->GetSplit( index );
input->SetRequestedRegion( streamRegion ); m_Input->SetRequestedRegion( streamRegion );
input->PropagateRequestedRegion(); m_Input->PropagateRequestedRegion();
input->UpdateOutputData(); m_Input->UpdateOutputData();
reference->SetRequestedRegion( streamRegion ); m_Reference->SetRequestedRegion( streamRegion );
reference->PropagateRequestedRegion(); m_Reference->PropagateRequestedRegion();
reference->UpdateOutputData(); m_Reference->UpdateOutputData();
ImageIteratorType itInput( input, streamRegion ); ImageIteratorType itInput( m_Input, streamRegion );
itInput.GoToBegin(); itInput.GoToBegin();
ImageIteratorType itRef( reference, streamRegion ); ImageIteratorType itRef( m_Reference, streamRegion );
itRef.GoToBegin(); itRef.GoToBegin();
calculator->Compute( itRef, itInput,sid.refhasnodata,sid.refnodata,sid.prodhasnodata,sid.prodnodata); calculator->Compute( itRef, itInput,sid.refhasnodata,sid.refnodata,sid.prodhasnodata,sid.prodnodata);
...@@ -392,7 +399,7 @@ private: ...@@ -392,7 +399,7 @@ private:
ContingencyTableType contingencyTable = calculator->BuildContingencyTable(); ContingencyTableType contingencyTable = calculator->BuildContingencyTable();
LogContingencyTable(contingencyTable); LogContingencyTable(contingencyTable);
writeContingencyTable(contingencyTable); m_WriteContingencyTable(contingencyTable);
} }
void DoExecuteConfusionMatrix(const StreamingInitializationData& sid) void DoExecuteConfusionMatrix(const StreamingInitializationData& sid)
...@@ -406,20 +413,20 @@ private: ...@@ -406,20 +413,20 @@ private:
for (unsigned int index = 0; index < sid.numberOfStreamDivisions; index++) for (unsigned int index = 0; index < sid.numberOfStreamDivisions; index++)
{ {
RegionType streamRegion = streamingManager->GetSplit(index); RegionType streamRegion = m_StreamingManager->GetSplit(index);
input->SetRequestedRegion(streamRegion); m_Input->SetRequestedRegion(streamRegion);
input->PropagateRequestedRegion(); m_Input->PropagateRequestedRegion();
input->UpdateOutputData(); m_Input->UpdateOutputData();
reference->SetRequestedRegion(streamRegion); m_Reference->SetRequestedRegion(streamRegion);
reference->PropagateRequestedRegion(); m_Reference->PropagateRequestedRegion();
reference->UpdateOutputData(); m_Reference->UpdateOutputData();
ImageIteratorType itInput(input, streamRegion); ImageIteratorType itInput(m_Input, streamRegion);
itInput.GoToBegin(); itInput.GoToBegin();
ImageIteratorType itRef(reference, streamRegion); ImageIteratorType itRef(m_Reference, streamRegion);
itRef.GoToBegin(); itRef.GoToBegin();
while (!itRef.IsAtEnd()) while (!itRef.IsAtEnd())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment