diff --git a/app/cbDimensionalityReductionVector.cxx b/app/cbDimensionalityReductionVector.cxx index f71f45609085fa2f7441ec787de2eef4aeda5837..485f248b64e04fffb177ee5bf92a8faf7b9b299f 100644 --- a/app/cbDimensionalityReductionVector.cxx +++ b/app/cbDimensionalityReductionVector.cxx @@ -106,6 +106,11 @@ class CbDimensionalityReductionVector : public Application SetParameterDescription("out","Output vector data file storing sample values (OGR format)." "If not given, the input vector data file is updated."); MandatoryOff("out"); + + AddParameter(ParameterType_Int, "indim", "Dimension of the input vector"); + SetParameterDescription("indim","Dimension of the whole input vector, this value is required if only a part of the bands contained in the vector are used." + "If not given, the dimension is deduced from the length of the 'feat' parameter"); + MandatoryOff("indim"); AddParameter(ParameterType_Int, "pcadim", "Principal component"); // SetParameterDescription("pcadim","This optional parameter can be set to reduce the number of eignevectors used in the PCA model file."); // @@ -167,7 +172,8 @@ class CbDimensionalityReductionVector : public Application otb::ogr::DataSource::Pointer source = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Read); otb::ogr::Layer layer = source->GetLayer(0); ListSampleType::Pointer input = ListSampleType::New(); - const int nbFeatures = GetSelectedItems("feat").size(); + int nbFeatures = GetSelectedItems("feat").size(); + input->SetMeasurementVectorSize(nbFeatures); otb::ogr::Layer::const_iterator it = layer.cbegin(); otb::ogr::Layer::const_iterator itEnd = layer.cend(); @@ -247,6 +253,10 @@ class CbDimensionalityReductionVector : public Application ogr::DataSource::Pointer output; ogr::DataSource::Pointer buffer = ogr::DataSource::New(); bool updateMode = false; + + int nbBands = nbFeatures; + if (HasValue("indim") && IsParameterEnabled("indim")) + {nbBands = GetParameterInt("indim");} if (IsParameterEnabled("out") && HasValue("out")) @@ -258,7 +268,7 @@ class CbDimensionalityReductionVector : public Application layer.GetGeomType()); // Copy existing fields OGRFeatureDefn &inLayerDefn = layer.GetLayerDefn(); - for (int k=0 ; k<inLayerDefn.GetFieldCount()-nbFeatures ; k++) // we don't copy the original bands + for (int k=0 ; k<inLayerDefn.GetFieldCount()-nbBands ; k++) // we don't copy the original bands { OGRFieldDefn fieldDefn(inLayerDefn.GetFieldDefn(k)); newLayer.CreateField(fieldDefn); @@ -279,8 +289,7 @@ class CbDimensionalityReductionVector : public Application // Re-open input data source in update mode output = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Update_LayerUpdate); }*/ - - + otb::ogr::Layer outLayer = output->GetLayer(0); OGRErr errStart = outLayer.ogr().StartTransaction(); @@ -310,12 +319,18 @@ class CbDimensionalityReductionVector : public Application } } + // Add an ID field. (The ID already contained in the layer refers to the polygon) + OGRFieldDefn IDField("ID_point", OFTInteger); + ogr::FieldDefn IDFieldDef(IDField); + outLayer.CreateField(IDFieldDef); + // Fill output layer unsigned int count=0; auto classfieldname = GetParameterStringList("featout"); it = layer.cbegin(); itEnd = layer.cend(); + int id=0; for( ; it!=itEnd ; ++it, ++count) { ogr::Feature dstFeature(outLayer.GetLayerDefn()); @@ -324,6 +339,7 @@ class CbDimensionalityReductionVector : public Application for (std::size_t i=0; i<classfieldname.size(); ++i){ dstFeature[classfieldname[i]].SetValue<ValueType>(target->GetMeasurementVector(count)[i]); } + dstFeature["ID_point"].SetValue<int>(id); if (updateMode) { outLayer.SetFeature(dstFeature); @@ -332,6 +348,7 @@ class CbDimensionalityReductionVector : public Application { outLayer.CreateFeature(dstFeature); } + id++; } if(outLayer.ogr().TestCapability("Transactions")) diff --git a/include/AutoencoderModel.h b/include/AutoencoderModel.h index c6038427d26f1f776e675af9e673f1dc8d256673..edbe4ae0524e1e18befdd512b7639f53cff5041b 100644 --- a/include/AutoencoderModel.h +++ b/include/AutoencoderModel.h @@ -86,8 +86,7 @@ private: /** Network attributes */ std::vector<AutoencoderType> m_net; - typename InputListSampleType::Pointer m_ValidationListSample; // This list can optionnaly be used during training to prevent overfitting. - + itk::Array<unsigned int> m_NumberOfHiddenNeurons; /** Training parameters */ @@ -97,6 +96,9 @@ private: itk::Array<double> m_Noise; // probability for an input to be set to 0 (denosing autoencoder) itk::Array<double> m_Rho; // Sparsity parameter itk::Array<double> m_Beta; // Sparsity regularization parameter + + bool m_WriteLearningCurve; // Flag for writting the learning curve into a txt file + }; } // end namespace otb