From f91b964b05cf959f587fe1dd70f06c1cbc97b6e8 Mon Sep 17 00:00:00 2001 From: Arnaud Jaen <arnaud.jaen@c-s.fr> Date: Tue, 12 Jun 2012 16:31:43 +0200 Subject: [PATCH] ENH: rename an move conversion filters from OBIA to Common --- .../otbLabelImageToOGRDataSourceFilter.h | 0 .../otbLabelImageToOGRDataSourceFilter.txx | 0 .../otbLabelImageToVectorDataFilter.h | 0 .../otbLabelImageToVectorDataFilter.txx | 1 - .../otbPersistentImageToOGRDataSourceFilter.h | 149 +++++++++++++ ...tbPersistentImageToOGRDataSourceFilter.txx | 200 ++++++++++++++++++ ...ngImageToOGRDataSourceSegmentationFilter.h | 6 +- .../otbWatershedSegmentationFilter.h | 0 .../otbWatershedSegmentationFilter.txx | 0 Testing/Code/BasicFilters/CMakeLists.txt | 80 ------- .../BasicFilters/otbBasicFiltersTests15.cxx | 7 - Testing/Code/Common/CMakeLists.txt | 112 ++++++++++ Testing/Code/Common/otbCommonTests14.cxx | 38 ++++ .../otbLabelImageToOGRDataSourceFilter.cxx | 0 .../otbLabelImageToVectorDataFilter.cxx | 0 .../otbLabelImageToVectorDataFilterNew.cxx | 0 .../otbOGRDataSourceToLabelImageFilter.cxx | 0 .../otbPolygonizationRasterizationTest.cxx | 0 .../otbVectorDataRasterizeFilter.cxx | 0 .../otbVectorDataToLabelImageFilter.cxx | 0 Testing/Code/OBIA/CMakeLists.txt | 59 ------ Testing/Code/OBIA/otbOBIATests1.cxx | 6 - Testing/Code/Segmentation/CMakeLists.txt | 44 +++- .../otbMeanShiftSegmentationFilter.cxx | 0 .../Segmentation/otbSegmentationTests1.cxx | 2 + .../otbWatershedSegmentationFilter.cxx | 0 26 files changed, 544 insertions(+), 160 deletions(-) rename Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.h (100%) rename Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.txx (100%) rename Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.h (100%) rename Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.txx (99%) create mode 100644 Code/Common/otbPersistentImageToOGRDataSourceFilter.h create mode 100644 Code/Common/otbPersistentImageToOGRDataSourceFilter.txx rename Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.h (100%) rename Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.txx (100%) create mode 100644 Testing/Code/Common/otbCommonTests14.cxx rename Testing/Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.cxx (100%) rename Testing/Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.cxx (100%) rename Testing/Code/{OBIA => Common}/otbLabelImageToVectorDataFilterNew.cxx (100%) rename Testing/Code/{BasicFilters => Common}/otbOGRDataSourceToLabelImageFilter.cxx (100%) rename Testing/Code/{BasicFilters => Common}/otbPolygonizationRasterizationTest.cxx (100%) rename Testing/Code/{BasicFilters => Common}/otbVectorDataRasterizeFilter.cxx (100%) rename Testing/Code/{BasicFilters => Common}/otbVectorDataToLabelImageFilter.cxx (100%) rename Testing/Code/{OBIA => Segmentation}/otbMeanShiftSegmentationFilter.cxx (100%) rename Testing/Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.cxx (100%) diff --git a/Code/OBIA/otbLabelImageToOGRDataSourceFilter.h b/Code/Common/otbLabelImageToOGRDataSourceFilter.h similarity index 100% rename from Code/OBIA/otbLabelImageToOGRDataSourceFilter.h rename to Code/Common/otbLabelImageToOGRDataSourceFilter.h diff --git a/Code/OBIA/otbLabelImageToOGRDataSourceFilter.txx b/Code/Common/otbLabelImageToOGRDataSourceFilter.txx similarity index 100% rename from Code/OBIA/otbLabelImageToOGRDataSourceFilter.txx rename to Code/Common/otbLabelImageToOGRDataSourceFilter.txx diff --git a/Code/OBIA/otbLabelImageToVectorDataFilter.h b/Code/Common/otbLabelImageToVectorDataFilter.h similarity index 100% rename from Code/OBIA/otbLabelImageToVectorDataFilter.h rename to Code/Common/otbLabelImageToVectorDataFilter.h diff --git a/Code/OBIA/otbLabelImageToVectorDataFilter.txx b/Code/Common/otbLabelImageToVectorDataFilter.txx similarity index 99% rename from Code/OBIA/otbLabelImageToVectorDataFilter.txx rename to Code/Common/otbLabelImageToVectorDataFilter.txx index a6a0c26422..9451cc2087 100644 --- a/Code/OBIA/otbLabelImageToVectorDataFilter.txx +++ b/Code/Common/otbLabelImageToVectorDataFilter.txx @@ -29,7 +29,6 @@ #include "cpl_conv.h" #include "gdal_alg.h" -#include <typeinfo> namespace otb { diff --git a/Code/Common/otbPersistentImageToOGRDataSourceFilter.h b/Code/Common/otbPersistentImageToOGRDataSourceFilter.h new file mode 100644 index 0000000000..1197ace819 --- /dev/null +++ b/Code/Common/otbPersistentImageToOGRDataSourceFilter.h @@ -0,0 +1,149 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + Some parts of this code are derived from ITK. See ITKCopyright.txt + for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbPersistentImageToOGRDataSourceFilter_h +#define __otbPersistentImageToOGRDataSourceFilter_h + +#include "otbPersistentImageFilter.h" + +#include "otbLabelImageToOGRDataSourceFilter.h" +#include "otbOGRDataSourceWrapper.h" + +#include "itkMacro.h" +#include <string> + +namespace otb +{ + +/** \class PersistentImageToOGRDataSourceFilter + * \brief Perform vectorization in a persistent way. + * + * This filter is a generic filter. It is the base class of the Large scale segmentation framework. + * The \c Initialize() method is used to create the new layer (LayerName) in the input \c OGRDataSource, + * and the field (FieldName) in the layer. This field will contain the label of the polygon in the input image. + * The \c ProcessTile() method is pure virtual and is implemented in sub class + * (@see \c PersistentStreamingLabelImageToOGRDataFilter). It returns a "memory" DataSource. + * This filter only copy each feature of the layer in the "memory" DataSource into the LayerName layer in the + * input \c OGRDataSource set by \c SetOGRDataSource() method. + * + * \sa PersistentImageFilter + * + */ +template<class TImage> +class ITK_EXPORT PersistentImageToOGRDataSourceFilter : + public PersistentImageFilter<TImage, TImage> +{ +public: + /** Standard Self typedef */ + typedef PersistentImageToOGRDataSourceFilter Self; + typedef PersistentImageFilter<TImage, TImage> Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + /** Runtime information support. */ + itkTypeMacro(PersistentImageToOGRDataSourceFilter, PersistentImageFilter); + + typedef TImage InputImageType; + typedef typename InputImageType::Pointer InputImagePointer; + typedef typename InputImageType::RegionType RegionType; + typedef typename InputImageType::SizeType SizeType; + typedef typename InputImageType::IndexType IndexType; + typedef typename InputImageType::PixelType PixelType; + typedef typename InputImageType::InternalPixelType InternalPixelType; + + typedef ogr::DataSource OGRDataSourceType; + typedef typename OGRDataSourceType::Pointer OGRDataSourcePointerType; + typedef ogr::Layer OGRLayerType; + typedef ogr::Feature OGRFeatureType; + + + void AllocateOutputs(); + virtual void Reset(void); + virtual void Synthetize(void); + + /** This method creates the output layer in the OGRDataSource set by the user. + * The name of the layer is set by \c SetLayerName . + * \note This methode must be called before the call of Update . + */ + virtual void Initialize(void); + + /** Set/Get the name of the output layer to write in the \c ogr::DataSource. */ + itkSetStringMacro(LayerName); + itkGetStringMacro(LayerName); + + /** Set the Field Name in which labels will be written. (default is "DN") + * A field FieldName is created in the output layer LayerName. The Field type is Integer. + */ + itkSetMacro(FieldName, std::string); + + /** + * Return the Field name in which labels have been written. + */ + itkGetMacro(FieldName, std::string); + + /** Get the size of the tile used for streaming. + * This is useful if you use for example the \c OGRFusionTileFilter + * for fusioning streaming tiles. + */ + itkGetMacro(StreamSize, SizeType); + + /** Set the \c ogr::DataSource in which the layer LayerName will be created. */ + void SetOGRDataSource( OGRDataSourcePointerType ogrDS ); + /** Get the \c ogr::DataSource output. */ + OGRDataSourceType * GetOGRDataSource( void ); + + /** Add one option for OGR layer creation */ + void AddOGRLayerCreationOption(const std::string& option); + + /** Clear all OGR layer creation options */ + void ClearOGRLayerCreationOptions(); + + /** Set the OGR layer creation options */ + void SetOGRLayerCreationOptions(const std::vector<std::string> & options); + +protected: + PersistentImageToOGRDataSourceFilter(); + virtual ~PersistentImageToOGRDataSourceFilter(); + + void PrintSelf(std::ostream& os, itk::Indent indent) const; + + virtual void GenerateData(); + + +private: + PersistentImageToOGRDataSourceFilter(const Self &); //purposely not implemented + void operator =(const Self&); //purposely not implemented + + virtual OGRDataSourcePointerType ProcessTile() = 0; + + std::string m_FieldName; + std::string m_LayerName; + OGRwkbGeometryType m_GeometryType; + SizeType m_StreamSize; + std::vector<std::string> m_OGRLayerCreationOptions; + +}; // end of class +} // end namespace otb + +#ifndef OTB_MANUAL_INSTANTIATION +#include "otbPersistentImageToOGRDataSourceFilter.txx" +#endif + +#endif diff --git a/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx b/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx new file mode 100644 index 0000000000..21a9a119bf --- /dev/null +++ b/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx @@ -0,0 +1,200 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + Some parts of this code are derived from ITK. See ITKCopyright.txt + for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbPersistentImageToOGRDataSourceFilter_txx +#define __otbPersistentImageToOGRDataSourceFilter_txx + +#include "otbPersistentImageToOGRDataSourceFilter.h" +#include "itkTimeProbe.h" +#include <boost/foreach.hpp> +#include <stdio.h> +#include "otbMacro.h" +#include "otbOGRHelpers.h" + +namespace otb +{ + +template<class TImage> +PersistentImageToOGRDataSourceFilter<TImage> +::PersistentImageToOGRDataSourceFilter() : m_FieldName("DN"), m_LayerName("Layer"), m_GeometryType(wkbMultiPolygon) +{ + this->SetNumberOfInputs(2); + this->SetNumberOfRequiredInputs(2); + m_StreamSize.Fill(0); +} + +template<class TImage> +PersistentImageToOGRDataSourceFilter<TImage> +::~PersistentImageToOGRDataSourceFilter() +{ +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::SetOGRDataSource( OGRDataSourcePointerType ogrDS ) +{ + this->itk::ProcessObject::SetNthInput(1, ogrDS); +} + +template<class TImage> +typename PersistentImageToOGRDataSourceFilter<TImage>::OGRDataSourceType * +PersistentImageToOGRDataSourceFilter<TImage> +::GetOGRDataSource( void ) +{ + return static_cast<OGRDataSourceType *> (this->itk::ProcessObject::GetInput(1)); +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::AddOGRLayerCreationOption(const std::string& option) +{ + m_OGRLayerCreationOptions.push_back(option); + this->Modified(); +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::ClearOGRLayerCreationOptions() +{ + m_OGRLayerCreationOptions.clear(); + this->Modified(); +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::SetOGRLayerCreationOptions(const std::vector<std::string>& options) +{ + m_OGRLayerCreationOptions = options; + this->Modified(); +} + + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::AllocateOutputs() +{ + // Nothing that needs to be allocated for the outputs : the output is not meant to be used +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::Reset() +{ +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::Synthetize() +{ +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::Initialize() +{ + + std::string projectionRefWkt = this->GetInput()->GetProjectionRef(); + bool projectionInformationAvailable = !projectionRefWkt.empty(); + OGRSpatialReference * oSRS = NULL; + if(projectionInformationAvailable) + { + oSRS = static_cast<OGRSpatialReference *>(OSRNewSpatialReference(projectionRefWkt.c_str())); + } + + + OGRDataSourcePointerType ogrDS = this->GetOGRDataSource(); + + ogrDS->CreateLayer(m_LayerName, oSRS ,m_GeometryType, otb::ogr::StringListConverter(m_OGRLayerCreationOptions).to_ogr()); + OGRFieldDefn field(m_FieldName.c_str(),OFTInteger); + + //Handle the case of shapefile. A shapefile is a layer and not a datasource. + //The layer name in a shapefile is the shapefile's name. + //This is not the case for a database as sqlite or PG. + if (ogrDS->GetLayersCount() == 1) + { + ogrDS->GetLayer(0).CreateField(field, true); + } + else + { + ogrDS->GetLayer(m_LayerName).CreateField(field, true); + } + + //CSLDestroy( options ); + +} + + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::GenerateData() +{ + + if (this->GetStreamSize()[0]==0 && this->GetStreamSize()[1]==0) + { + this->m_StreamSize = this->GetInput()->GetRequestedRegion().GetSize(); + } + + // call the processing function for this tile + OGRDataSourcePointerType currentTileVD = this->ProcessTile(); + OGRLayerType srcLayer = currentTileVD->GetLayerChecked(0); + + OGRDataSourcePointerType ogrDS = this->GetOGRDataSource(); + OGRLayerType dstLayer = ogrDS->GetLayersCount() == 1 + ? ogrDS->GetLayer(0) + : ogrDS->GetLayer(m_LayerName); + + + //Copy features contained in the memory layer (srcLayer) in the output layer + itk::TimeProbe chrono; + chrono.Start(); + dstLayer.ogr().StartTransaction(); + OGRLayerType::const_iterator featIt = srcLayer.begin(); + for(; featIt!=srcLayer.end(); ++featIt) + { + OGRFeatureType dstFeature(dstLayer.GetLayerDefn()); + dstFeature.SetFrom( *featIt, TRUE ); + dstLayer.CreateFeature( dstFeature ); + } + + dstLayer.ogr().CommitTransaction(); + chrono.Stop(); + otbMsgDebugMacro(<< "write ogr tile took " << chrono.GetTotal() << " sec"); + +} + +template<class TImage> +void +PersistentImageToOGRDataSourceFilter<TImage> +::PrintSelf(std::ostream& os, itk::Indent indent) const +{ + Superclass::PrintSelf(os, indent); +} + +} // end namespace otb +#endif diff --git a/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h b/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h index ac2d26ba8b..25592161cd 100644 --- a/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h +++ b/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h @@ -25,7 +25,7 @@ #include "otbPersistentImageFilter.h" #include "otbPersistentFilterStreamingDecorator.h" -#include "otbPersistentImageToOGRDataFilter.h" +#include "otbPersistentImageToOGRDataSourceFilter.h" #include "otbRelabelComponentImageFilter.h" #include "itkMultiplyImageFilter.h" @@ -93,12 +93,12 @@ class LabeledOutputAccessor<MeanShiftSmoothingImageFilter<TInputImage, TOutputIm */ template <class TImageType, class TSegmentationFilter> class PersistentStreamingLabelImageToOGRDataSourceFilter - : public otb::PersistentImageToOGRDataFilter<TImageType> + : public otb::PersistentImageToOGRDataSourceFilter<TImageType> { public: /** Standard Self typedef */ typedef PersistentStreamingLabelImageToOGRDataSourceFilter Self; - typedef PersistentImageToOGRDataFilter<TImageType> Superclass; + typedef PersistentImageToOGRDataSourceFilter<TImageType> Superclass; typedef itk::SmartPointer<Self> Pointer; typedef itk::SmartPointer<const Self> ConstPointer; diff --git a/Code/OBIA/otbWatershedSegmentationFilter.h b/Code/Segmentation/otbWatershedSegmentationFilter.h similarity index 100% rename from Code/OBIA/otbWatershedSegmentationFilter.h rename to Code/Segmentation/otbWatershedSegmentationFilter.h diff --git a/Code/OBIA/otbWatershedSegmentationFilter.txx b/Code/Segmentation/otbWatershedSegmentationFilter.txx similarity index 100% rename from Code/OBIA/otbWatershedSegmentationFilter.txx rename to Code/Segmentation/otbWatershedSegmentationFilter.txx diff --git a/Testing/Code/BasicFilters/CMakeLists.txt b/Testing/Code/BasicFilters/CMakeLists.txt index 1c4d93b341..74247d1550 100644 --- a/Testing/Code/BasicFilters/CMakeLists.txt +++ b/Testing/Code/BasicFilters/CMakeLists.txt @@ -2781,82 +2781,6 @@ ADD_TEST(bfTvClampImageFilterTest ${BASICFILTERS_TESTS15} ) -# --------------------- otbRasterizeVectorDataFilter--------------------- -ADD_TEST(bfTuVectorDataRasterizeFilterNew ${BASICFILTERS_TESTS15} - otbVectorDataRasterizeFilterNew -) - -ADD_TEST(bfTvVectorDataRasterizeFilterSHP ${BASICFILTERS_TESTS15} - --compare-image 0.0001 - ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputSHP.tif - ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif - otbVectorDataRasterizeFilter - ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif - ${INPUTDATA}/Capitole-Shadows.shp - ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif -) - -ADD_TEST(bfTvVectorDataRasterizeFilterKML ${BASICFILTERS_TESTS15} - --compare-image 0.0001 - ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputKML.tif - ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif - otbVectorDataRasterizeFilter - ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif - ${INPUTDATA}/Capitole-Shadows.kml - ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif -) - -# --------------------- otbRasterizeVectorDataFilter--------------------- -ADD_TEST(bfTuVectorDataToLabelImageFilterNew ${BASICFILTERS_TESTS15} - otbVectorDataToLabelImageFilterNew -) - -ADD_TEST(bfTvVectorDataToLabelImageFilterSHP ${BASICFILTERS_TESTS15} - --compare-image 0.0 - ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif - ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif - otbVectorDataToLabelImageFilter - ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif - ${INPUTDATA}/QB_Toulouse_ortho.shp - ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif -) - -# --------------------- otbOGRDataSourceToLabelImageFilter--------------------- -ADD_TEST(bfTuOGRDataSourceToLabelImageFilterNew ${BASICFILTERS_TESTS15} - otbOGRDataSourceToLabelImageFilterNew -) - -ADD_TEST(bfTvOGRDataSourceToLabelImageFilterSHP ${BASICFILTERS_TESTS15} - --compare-image 0.0 - ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif - ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif - otbOGRDataSourceToLabelImageFilter - ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif - ${INPUTDATA}/QB_Toulouse_ortho.shp - ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif -) - -# --------------------- otbPolygonizationRasterizationTest --------------------- -# bijectivity tests -ADD_TEST(bfTvPolygonizationRasterization_UTM ${BASICFILTERS_TESTS15} - otbPolygonizationRasterizationTest - ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif -) - -ADD_TEST(bfTvPolygonizationRasterization_WGS84 ${BASICFILTERS_TESTS15} - otbPolygonizationRasterizationTest - ${INPUTDATA}/QB_Toulouse_ortho_labelImage_WGS84.tif -) -ADD_TEST(bfTvPolygonizationRasterization_SensorModel ${BASICFILTERS_TESTS15} - otbPolygonizationRasterizationTest - ${INPUTDATA}/QB_Toulouse_SensorModel_labelImage.tif -) - -ADD_TEST(bfTvPolygonizationRasterization_Index ${BASICFILTERS_TESTS15} - otbPolygonizationRasterizationTest - ${INPUTDATA}/QB_Toulouse_labelImage_Index.tif -) - #-------- TileImageFilter -------------------------- ADD_TEST(bfTuTileImageFilterNew ${BASICFILTERS_TESTS15} otbTileImageFilterNew @@ -3169,10 +3093,6 @@ otbMaximumAutocorrelationFactorImageFilter.cxx otbThresholdVectorImageFilter.cxx otbClampVectorImageFilter.cxx otbClampImageFilter.cxx -otbVectorDataRasterizeFilter.cxx -otbVectorDataToLabelImageFilter.cxx -otbOGRDataSourceToLabelImageFilter.cxx -otbPolygonizationRasterizationTest.cxx otbTileImageFilter.cxx ) diff --git a/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx b/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx index ef350b3133..5166937e8d 100644 --- a/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx +++ b/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx @@ -43,13 +43,6 @@ void RegisterTests() REGISTER_TEST(otbClampVectorImageFilterTest); REGISTER_TEST(otbClampImageFilterNew); REGISTER_TEST(otbClampImageFilterTest); - REGISTER_TEST(otbVectorDataRasterizeFilterNew); - REGISTER_TEST(otbVectorDataRasterizeFilter); - REGISTER_TEST(otbVectorDataToLabelImageFilterNew); - REGISTER_TEST(otbVectorDataToLabelImageFilter); - REGISTER_TEST(otbOGRDataSourceToLabelImageFilterNew); - REGISTER_TEST(otbOGRDataSourceToLabelImageFilter); - REGISTER_TEST(otbPolygonizationRasterizationTest); REGISTER_TEST(otbTileImageFilterNew); REGISTER_TEST(otbTileImageFilter); } diff --git a/Testing/Code/Common/CMakeLists.txt b/Testing/Code/Common/CMakeLists.txt index 5554ed8f54..d3a2ee6ea2 100644 --- a/Testing/Code/Common/CMakeLists.txt +++ b/Testing/Code/Common/CMakeLists.txt @@ -1135,6 +1135,106 @@ ADD_TEST(coTvImageRegionAdaptativeSplitterStripSmallStream ${COMMON_TESTS13} +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbCommonTests14 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +ADD_TEST(obTuLabelImageToVectorDataFilterNew ${COMMON_TESTS14} + otbLabelImageToVectorDataFilterNew) + +ADD_TEST(obTvLabelImageToVectorDataFilter ${COMMON_TESTS14} + --compare-ogr ${NOTOL} + ${BASELINE_FILES}/obTuLabelImageToVectorDataFilter.shp + ${TEMP}/obTuLabelImageToVectorDataFilter.shp + otbLabelImageToVectorDataFilter + ${INPUTDATA}/labelImage_UnsignedChar.tif + ${TEMP}/obTuLabelImageToVectorDataFilter.shp + ) + +ADD_TEST(obTuLabelImageToOGRDataSourceFilterNew ${COMMON_TESTS14} + otbLabelImageToOGRDataSourceFilterNew) + +ADD_TEST(obTvLabelImageToOGRDataSourceFilter ${COMMON_TESTS14} + otbLabelImageToOGRDataSourceFilter + ${INPUTDATA}/labelImage_UnsignedChar.tif + ) + +# --------------------- otbRasterizeVectorDataFilter--------------------- +ADD_TEST(bfTuVectorDataRasterizeFilterNew ${COMMON_TESTS14} + otbVectorDataRasterizeFilterNew +) + +ADD_TEST(bfTvVectorDataRasterizeFilterSHP ${COMMON_TESTS14} + --compare-image 0.0001 + ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputSHP.tif + ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif + otbVectorDataRasterizeFilter + ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif + ${INPUTDATA}/Capitole-Shadows.shp + ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif +) + +ADD_TEST(bfTvVectorDataRasterizeFilterKML ${COMMON_TESTS14} + --compare-image 0.0001 + ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputKML.tif + ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif + otbVectorDataRasterizeFilter + ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif + ${INPUTDATA}/Capitole-Shadows.kml + ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif +) + +# --------------------- otbRasterizeVectorDataFilter--------------------- +ADD_TEST(bfTuVectorDataToLabelImageFilterNew ${COMMON_TESTS14} + otbVectorDataToLabelImageFilterNew +) + +ADD_TEST(bfTvVectorDataToLabelImageFilterSHP ${COMMON_TESTS14} + --compare-image 0.0 + ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif + ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif + otbVectorDataToLabelImageFilter + ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif + ${INPUTDATA}/QB_Toulouse_ortho.shp + ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif +) + +# --------------------- otbOGRDataSourceToLabelImageFilter--------------------- +ADD_TEST(bfTuOGRDataSourceToLabelImageFilterNew ${COMMON_TESTS14} + otbOGRDataSourceToLabelImageFilterNew +) + +ADD_TEST(bfTvOGRDataSourceToLabelImageFilterSHP ${COMMON_TESTS14} + --compare-image 0.0 + ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif + ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif + otbOGRDataSourceToLabelImageFilter + ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif + ${INPUTDATA}/QB_Toulouse_ortho.shp + ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif +) + +# --------------------- otbPolygonizationRasterizationTest --------------------- +# bijectivity tests +ADD_TEST(bfTvPolygonizationRasterization_UTM ${COMMON_TESTS14} + otbPolygonizationRasterizationTest + ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif +) + +ADD_TEST(bfTvPolygonizationRasterization_WGS84 ${COMMON_TESTS14} + otbPolygonizationRasterizationTest + ${INPUTDATA}/QB_Toulouse_ortho_labelImage_WGS84.tif +) +ADD_TEST(bfTvPolygonizationRasterization_SensorModel ${COMMON_TESTS14} + otbPolygonizationRasterizationTest + ${INPUTDATA}/QB_Toulouse_SensorModel_labelImage.tif +) + +ADD_TEST(bfTvPolygonizationRasterization_Index ${COMMON_TESTS14} + otbPolygonizationRasterizationTest + ${INPUTDATA}/QB_Toulouse_labelImage_Index.tif +) + # ------- Fichiers sources CXX ----------------------------------- SET(BasicCommon_SRCS1 otbCommonTests1.cxx @@ -1301,6 +1401,17 @@ otbStreamingManager.cxx otbImageRegionAdaptativeSplitter.cxx ) +SET(BasicCommon_SRCS14 +otbCommonTests14.cxx +otbLabelImageToVectorDataFilterNew.cxx +otbLabelImageToVectorDataFilter.cxx +otbLabelImageToOGRDataSourceFilter.cxx +otbVectorDataRasterizeFilter.cxx +otbVectorDataToLabelImageFilter.cxx +otbOGRDataSourceToLabelImageFilter.cxx +otbPolygonizationRasterizationTest.cxx +) + OTB_ADD_EXECUTABLE(otbCommonTests1 "${BasicCommon_SRCS1}" "OTBIO;OTBTesting") OTB_ADD_EXECUTABLE(otbCommonTests2 "${BasicCommon_SRCS2}" "OTBIO;OTBTesting") OTB_ADD_EXECUTABLE(otbCommonTests3 "${BasicCommon_SRCS3}" "OTBIO;OTBTesting") @@ -1322,5 +1433,6 @@ TARGET_LINK_LIBRARIES(otbCommonTests11 OTBIO OTBTesting itkvcl) OTB_ADD_EXECUTABLE(otbCommonTests12 "${BasicCommon_SRCS12}" "OTBIO;OTBTesting") OTB_ADD_EXECUTABLE(otbCommonTests13 "${BasicCommon_SRCS13}" "OTBIO;OTBTesting") +OTB_ADD_EXECUTABLE(otbCommonTests14 "${BasicCommon_SRCS14}" "OTBIO;OTBTesting;OTBOGRAdapters") ENDIF( NOT OTB_DISABLE_CXX_TESTING AND BUILD_TESTING ) diff --git a/Testing/Code/Common/otbCommonTests14.cxx b/Testing/Code/Common/otbCommonTests14.cxx new file mode 100644 index 0000000000..2d36a4fe72 --- /dev/null +++ b/Testing/Code/Common/otbCommonTests14.cxx @@ -0,0 +1,38 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +// this file defines the otbCommonTest for the test driver +// and all it expects is that you have a function called RegisterTests + + +#include "otbTestMain.h" + +void RegisterTests() +{ + REGISTER_TEST(otbLabelImageToVectorDataFilterNew); + REGISTER_TEST(otbLabelImageToVectorDataFilter); + REGISTER_TEST(otbLabelImageToOGRDataSourceFilterNew); + REGISTER_TEST(otbLabelImageToOGRDataSourceFilter); + REGISTER_TEST(otbVectorDataRasterizeFilterNew); + REGISTER_TEST(otbVectorDataRasterizeFilter); + REGISTER_TEST(otbVectorDataToLabelImageFilterNew); + REGISTER_TEST(otbVectorDataToLabelImageFilter); + REGISTER_TEST(otbOGRDataSourceToLabelImageFilterNew); + REGISTER_TEST(otbOGRDataSourceToLabelImageFilter); + REGISTER_TEST(otbPolygonizationRasterizationTest); +} diff --git a/Testing/Code/OBIA/otbLabelImageToOGRDataSourceFilter.cxx b/Testing/Code/Common/otbLabelImageToOGRDataSourceFilter.cxx similarity index 100% rename from Testing/Code/OBIA/otbLabelImageToOGRDataSourceFilter.cxx rename to Testing/Code/Common/otbLabelImageToOGRDataSourceFilter.cxx diff --git a/Testing/Code/OBIA/otbLabelImageToVectorDataFilter.cxx b/Testing/Code/Common/otbLabelImageToVectorDataFilter.cxx similarity index 100% rename from Testing/Code/OBIA/otbLabelImageToVectorDataFilter.cxx rename to Testing/Code/Common/otbLabelImageToVectorDataFilter.cxx diff --git a/Testing/Code/OBIA/otbLabelImageToVectorDataFilterNew.cxx b/Testing/Code/Common/otbLabelImageToVectorDataFilterNew.cxx similarity index 100% rename from Testing/Code/OBIA/otbLabelImageToVectorDataFilterNew.cxx rename to Testing/Code/Common/otbLabelImageToVectorDataFilterNew.cxx diff --git a/Testing/Code/BasicFilters/otbOGRDataSourceToLabelImageFilter.cxx b/Testing/Code/Common/otbOGRDataSourceToLabelImageFilter.cxx similarity index 100% rename from Testing/Code/BasicFilters/otbOGRDataSourceToLabelImageFilter.cxx rename to Testing/Code/Common/otbOGRDataSourceToLabelImageFilter.cxx diff --git a/Testing/Code/BasicFilters/otbPolygonizationRasterizationTest.cxx b/Testing/Code/Common/otbPolygonizationRasterizationTest.cxx similarity index 100% rename from Testing/Code/BasicFilters/otbPolygonizationRasterizationTest.cxx rename to Testing/Code/Common/otbPolygonizationRasterizationTest.cxx diff --git a/Testing/Code/BasicFilters/otbVectorDataRasterizeFilter.cxx b/Testing/Code/Common/otbVectorDataRasterizeFilter.cxx similarity index 100% rename from Testing/Code/BasicFilters/otbVectorDataRasterizeFilter.cxx rename to Testing/Code/Common/otbVectorDataRasterizeFilter.cxx diff --git a/Testing/Code/BasicFilters/otbVectorDataToLabelImageFilter.cxx b/Testing/Code/Common/otbVectorDataToLabelImageFilter.cxx similarity index 100% rename from Testing/Code/BasicFilters/otbVectorDataToLabelImageFilter.cxx rename to Testing/Code/Common/otbVectorDataToLabelImageFilter.cxx diff --git a/Testing/Code/OBIA/CMakeLists.txt b/Testing/Code/OBIA/CMakeLists.txt index deecaa3e46..5dbed702f4 100644 --- a/Testing/Code/OBIA/CMakeLists.txt +++ b/Testing/Code/OBIA/CMakeLists.txt @@ -175,40 +175,6 @@ ADD_TEST(obTuMeanShiftConnectedComponentSegmentationFilter ${OBIA_TESTS1} "distance<0.2" 50) -ADD_TEST(obTuMeanShiftSegmentationFilter ${OBIA_TESTS1} - otbMeanShiftSegmentationFilter - ${INPUTDATA}/ROI_QB_MUL_4.tif - ${TEMP}/obTuMeanShiftSegmentationFilterLabelImage.tif - ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImage.tif - 4 - 25 - 100 - 0.1 - ) - -ADD_TEST(obTuMeanShiftSegmentationFilterPruning ${OBIA_TESTS1} - otbMeanShiftSegmentationFilter - ${INPUTDATA}/ROI_QB_MUL_4.tif - ${TEMP}/obTuMeanShiftSegmentationFilterLabelImagePruning.tif - ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImagePruning.tif - 4 - 25 - 100 - 0.1 - 20 - ) - - -ADD_TEST(obTuWatershedSegmentationFilter ${OBIA_TESTS1} - --compare-image ${NOTOL} - ${BASELINE}/obTuWatershedSegmentationFilterLabelImage.tif - ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif - otbWatershedSegmentationFilter - ${EXAMPLEDATA}/ROI_QB_PAN_1.tif - ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif - 0.01 - 0.2 - ) ADD_TEST(obTuLabelImageToLabelMapWithAdjacencyFilterNew ${OBIA_TESTS3} otbLabelImageToLabelMapWithAdjacencyFilterNew) @@ -225,26 +191,6 @@ ADD_TEST(obTvLabelImageToLabelMapWithAdjacencyFilter ${OBIA_TESTS3} ADD_TEST(obTuLabelMapToAttributeImageFilterNew ${OBIA_TESTS1} otbLabelMapToAttributeImageFilterNew) -ADD_TEST(obTuLabelImageToVectorDataFilterNew ${OBIA_TESTS1} - otbLabelImageToVectorDataFilterNew) - -ADD_TEST(obTvLabelImageToVectorDataFilter ${OBIA_TESTS1} - --compare-ogr ${NOTOL} - ${BASELINE_FILES}/obTuLabelImageToVectorDataFilter.shp - ${TEMP}/obTuLabelImageToVectorDataFilter.shp - otbLabelImageToVectorDataFilter - ${INPUTDATA}/labelImage_UnsignedChar.tif - ${TEMP}/obTuLabelImageToVectorDataFilter.shp - ) - -ADD_TEST(obTuLabelImageToOGRDataSourceFilterNew ${OBIA_TESTS1} - otbLabelImageToOGRDataSourceFilterNew) - -ADD_TEST(obTvLabelImageToOGRDataSourceFilter ${OBIA_TESTS1} - otbLabelImageToOGRDataSourceFilter - ${INPUTDATA}/labelImage_UnsignedChar.tif - ) - # OBIATests2 (need PQXX) IF(OTB_USE_PQXX) @@ -301,12 +247,7 @@ otbVectorDataToLabelMapFilterNew.cxx otbStreamingConnectedComponentOBIATest.cxx otbMeanShiftStreamingConnectedComponentOBIATest.cxx otbMeanShiftConnectedComponentSegmentationFilterTest.cxx -otbMeanShiftSegmentationFilter.cxx -otbWatershedSegmentationFilter.cxx otbLabelMapToAttributeImageFilterNew.cxx -otbLabelImageToVectorDataFilterNew.cxx -otbLabelImageToVectorDataFilter.cxx -otbLabelImageToOGRDataSourceFilter.cxx ) diff --git a/Testing/Code/OBIA/otbOBIATests1.cxx b/Testing/Code/OBIA/otbOBIATests1.cxx index 764959e86e..236a2b80f8 100644 --- a/Testing/Code/OBIA/otbOBIATests1.cxx +++ b/Testing/Code/OBIA/otbOBIATests1.cxx @@ -56,11 +56,5 @@ REGISTER_TEST(otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilterNe REGISTER_TEST(otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter); REGISTER_TEST(otbMeanShiftStreamingConnectedComponentSegmentationOBIAToVectorDataFilter); REGISTER_TEST(otbMeanShiftConnectedComponentSegmentationFilter); -REGISTER_TEST(otbMeanShiftSegmentationFilter); -REGISTER_TEST(otbWatershedSegmentationFilter); REGISTER_TEST(otbLabelMapToAttributeImageFilterNew); -REGISTER_TEST(otbLabelImageToVectorDataFilterNew); -REGISTER_TEST(otbLabelImageToVectorDataFilter); -REGISTER_TEST(otbLabelImageToOGRDataSourceFilterNew); -REGISTER_TEST(otbLabelImageToOGRDataSourceFilter); } diff --git a/Testing/Code/Segmentation/CMakeLists.txt b/Testing/Code/Segmentation/CMakeLists.txt index b4133d6e6f..e444307399 100644 --- a/Testing/Code/Segmentation/CMakeLists.txt +++ b/Testing/Code/Segmentation/CMakeLists.txt @@ -8,10 +8,10 @@ ENDIF( NOT OTB_DISABLE_CXX_TESTING AND BUILD_TESTING ) # ------- otb::HooverMatrix & otb::HooverInstance ------------- -ADD_TEST(obTuHooverMatrixFilterNew ${OBIA_TESTS1} +ADD_TEST(obTuHooverMatrixFilterNew ${SEGMENTATION_TESTS1} otbHooverMatrixFilterNew) -ADD_TEST(obTvHooverMatrixFilter ${OBIA_TESTS1} +ADD_TEST(obTvHooverMatrixFilter ${SEGMENTATION_TESTS1} --compare-ascii ${NOTOL} ${BASELINE_FILES}/obTvHooverMatrixFilter.txt ${TEMP}/obTvHooverMatrixFilter.txt @@ -21,10 +21,10 @@ ADD_TEST(obTvHooverMatrixFilter ${OBIA_TESTS1} ${TEMP}/obTvHooverMatrixFilter.txt ) -ADD_TEST(obTuHooverInstanceFilterNew ${OBIA_TESTS1} +ADD_TEST(obTuHooverInstanceFilterNew ${SEGMENTATION_TESTS1} otbHooverInstanceFilterNew) -ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${OBIA_TESTS1} +ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${SEGMENTATION_TESTS1} --compare-image ${EPSILON_9} ${BASELINE}/obTvHooverInstanceFilterToAttributeImage.tif ${TEMP}/obTvHooverInstanceFilterToAttributeImage.tif @@ -34,6 +34,40 @@ ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${OBIA_TESTS1} ${TEMP}/obTvHooverInstanceFilterToAttributeImage.tif ) +ADD_TEST(obTuWatershedSegmentationFilter ${SEGMENTATION_TESTS1} + --compare-image ${NOTOL} + ${BASELINE}/obTuWatershedSegmentationFilterLabelImage.tif + ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif + otbWatershedSegmentationFilter + ${EXAMPLEDATA}/ROI_QB_PAN_1.tif + ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif + 0.01 + 0.2 + ) + +ADD_TEST(obTuMeanShiftSegmentationFilter ${SEGMENTATION_TESTS1} + otbMeanShiftSegmentationFilter + ${INPUTDATA}/ROI_QB_MUL_4.tif + ${TEMP}/obTuMeanShiftSegmentationFilterLabelImage.tif + ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImage.tif + 4 + 25 + 100 + 0.1 + ) + +ADD_TEST(obTuMeanShiftSegmentationFilterPruning ${SEGMENTATION_TESTS1} + otbMeanShiftSegmentationFilter + ${INPUTDATA}/ROI_QB_MUL_4.tif + ${TEMP}/obTuMeanShiftSegmentationFilterLabelImagePruning.tif + ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImagePruning.tif + 4 + 25 + 100 + 0.1 + 20 + ) + # ------- otb::StreamingVectorizedSegmentation ------------- ADD_TEST(obTuStreamingImageToOGRDataSourceSegmentationFilterNew ${SEGMENTATION_TESTS1} otbStreamingImageToOGRDataSourceSegmentationFilterNew) @@ -97,6 +131,8 @@ otbHooverMatrixFilterNew.cxx otbHooverMatrixFilter.cxx otbHooverInstanceFilterNew.cxx otbHooverInstanceFilterToAttributeImage.cxx +otbWatershedSegmentationFilter.cxx +otbMeanShiftSegmentationFilter.cxx otbStreamingImageToOGRDataSourceSegmentationFilter.cxx otbOGRDataSourceStreamStitchingFilter.cxx ) diff --git a/Testing/Code/OBIA/otbMeanShiftSegmentationFilter.cxx b/Testing/Code/Segmentation/otbMeanShiftSegmentationFilter.cxx similarity index 100% rename from Testing/Code/OBIA/otbMeanShiftSegmentationFilter.cxx rename to Testing/Code/Segmentation/otbMeanShiftSegmentationFilter.cxx diff --git a/Testing/Code/Segmentation/otbSegmentationTests1.cxx b/Testing/Code/Segmentation/otbSegmentationTests1.cxx index 2e08643da5..c4d0ba09dc 100644 --- a/Testing/Code/Segmentation/otbSegmentationTests1.cxx +++ b/Testing/Code/Segmentation/otbSegmentationTests1.cxx @@ -32,4 +32,6 @@ REGISTER_TEST(otbHooverMatrixFilterNew); REGISTER_TEST(otbHooverMatrixFilter); REGISTER_TEST(otbHooverInstanceFilterNew); REGISTER_TEST(otbHooverInstanceFilterToAttributeImage); +REGISTER_TEST(otbWatershedSegmentationFilter); +REGISTER_TEST(otbMeanShiftSegmentationFilter); } diff --git a/Testing/Code/OBIA/otbWatershedSegmentationFilter.cxx b/Testing/Code/Segmentation/otbWatershedSegmentationFilter.cxx similarity index 100% rename from Testing/Code/OBIA/otbWatershedSegmentationFilter.cxx rename to Testing/Code/Segmentation/otbWatershedSegmentationFilter.cxx -- GitLab