diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 6c1ca95ce89fb5ca967714b66d0869f6a7f5b2fb..e817a32b9c966e2fdb3e7b3446ee936ea7cbe4b1 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1,9 +1,5 @@ cmake_minimum_required (VERSION 2.8) -OTB_CREATE_APPLICATION(NAME ExtractBand - SOURCES otbExtractBand.cxx - LINK_LIBRARIES OTBCommon) - OTB_CREATE_APPLICATION(NAME ExtractGeom SOURCES otbExtractGeom.cxx LINK_LIBRARIES OTBCommon) @@ -11,8 +7,3 @@ OTB_CREATE_APPLICATION(NAME ExtractGeom OTB_CREATE_APPLICATION(NAME MeanResample SOURCES otbMeanResample.cxx LINK_LIBRARIES OTBCommon) - -OTB_CREATE_APPLICATION(NAME ZonalStatistics - SOURCES otbZonalStatistics.cxx - LINK_LIBRARIES OTBCommon) - diff --git a/app/otbExtractBand.cxx b/app/otbExtractBand.cxx deleted file mode 100644 index 7ec84391b9349219506c5f439c2095b03fced481..0000000000000000000000000000000000000000 --- a/app/otbExtractBand.cxx +++ /dev/null @@ -1,110 +0,0 @@ -/*========================================================================= - - Copyright (c) Remi Cresson (IRSTEA). All rights reserved. - - - 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. - -=========================================================================*/ -#include "itkFixedArray.h" -#include "itkObjectFactory.h" - -// Elevation handler -#include "otbWrapperElevationParametersHandler.h" -#include "otbWrapperApplicationFactory.h" - -// Application engine -#include "otbStandardFilterWatcher.h" -#include "itkFixedArray.h" - -// Filter -#include "otbMultiChannelExtractROI.h" - -using namespace std; - -namespace otb -{ - -namespace Wrapper -{ - -class ExtractBand : public Application -{ -public: - /** Standard class typedefs. */ - typedef ExtractBand Self; - typedef Application Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - typedef otb::MultiChannelExtractROI<FloatVectorImageType::InternalPixelType, - FloatVectorImageType::InternalPixelType> ExtractFilterType; - - /** Standard macro */ - itkNewMacro(Self); - itkTypeMacro(ExtractBand, Application); - - void DoInit() - { - - SetName("ExtractBand"); - SetDescription("Perform single band extraction"); - - // Documentation - SetDocName("ExtractBand"); - SetDocLongDescription("This application performs single band extraction"); - SetDocLimitations("None"); - SetDocAuthors("Remi Cresson"); - SetDocSeeAlso(" "); - - AddDocTag(Tags::Manip); - - AddParameter(ParameterType_InputImage, "inxs", "Input XS Image"); - SetParameterDescription("inxs"," Input XS image."); - - AddParameter(ParameterType_Int, "band", "band index" ); - SetParameterDescription("band","Set the band index to extract" ); - SetMinimumParameterIntValue("band", 1); - - AddParameter(ParameterType_OutputImage, "out", "Output image"); - SetParameterDescription("out"," Output image."); - - AddRAMParameter(); - - // Doc example parameter settings - SetDocExampleParameterValue("band", "2"); - SetDocExampleParameterValue("inxs", "QB_Toulouse_Ortho_XS.tif"); - SetDocExampleParameterValue("out", "Pansharpening.tif uint16"); - - - } - - void DoUpdateParameters() - { - // Nothing to do here : all parameters are independent - } - - void DoExecute() - { - - FloatVectorImageType* xs = GetParameterImage("inxs"); - - unsigned int band = GetParameterInt("band"); - m_Filter = ExtractFilterType::New(); - m_Filter->SetFirstChannel(band); - m_Filter->SetLastChannel(band); - m_Filter->SetInput(xs); - - SetParameterOutputImage("out", m_Filter->GetOutput()); - - } - - ExtractFilterType::Pointer m_Filter; - -}; -} -} - -OTB_APPLICATION_EXPORT( otb::Wrapper::ExtractBand ) diff --git a/app/otbZonalStatistics.cxx b/app/otbZonalStatistics.cxx deleted file mode 100644 index 4630be3dfd56847f03bc94fa3579004678bc7514..0000000000000000000000000000000000000000 --- a/app/otbZonalStatistics.cxx +++ /dev/null @@ -1,243 +0,0 @@ -/*========================================================================= - - Copyright (c) Remi Cresson (IRSTEA). All rights reserved. - - - 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. - -=========================================================================*/ -#include "itkFixedArray.h" -#include "itkObjectFactory.h" - -// Elevation handler -#include "otbWrapperElevationParametersHandler.h" -#include "otbWrapperApplicationFactory.h" - -// Application engine -#include "otbStandardFilterWatcher.h" - -// Filters -#include "otbVectorDataToLabelImageFilter.h" -#include "otbVectorDataIntoImageProjectionFilter.h" -#include "otbStreamingStatisticsMapFromLabelImageFilter.h" - -namespace otb -{ - -namespace Wrapper -{ - -class ZonalStatistics : public Application -{ -public: - /** Standard class typedefs. */ - typedef ZonalStatistics Self; - typedef Application Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - - /* vector data filters */ - typedef UInt32ImageType LabelImageType; - typedef LabelImageType::ValueType LabelValueType; - typedef otb::VectorData<double, 2> VectorDataType; - typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, - FloatVectorImageType> VectorDataReprojFilterType; - typedef otb::VectorDataToLabelImageFilter<VectorDataType, - LabelImageType> RasterizeFilterType; - typedef VectorDataType::DataTreeType DataTreeType; - typedef itk::PreOrderTreeIterator<DataTreeType> TreeIteratorType; - typedef VectorDataType::DataNodeType DataNodeType; - typedef DataNodeType::PolygonListPointerType PolygonListPointerType; - - /** Statistics */ - typedef otb::StreamingStatisticsMapFromLabelImageFilter<FloatVectorImageType, - LabelImageType> StatsFilterType; - - /** Standard macro */ - itkNewMacro(Self); - itkTypeMacro(ZonalStatistics, Application); - - void DoInit() - { - - SetName("ZonalStatistics"); - SetDescription("Computes zonal statistics"); - - // Documentation - SetDocName("ZonalStatistics"); - SetDocLongDescription("This application zonal statistics"); - SetDocLimitations("None"); - SetDocAuthors("Remi Cresson"); - - AddDocTag(Tags::Manip); - - // Inputs - AddParameter(ParameterType_InputImage, "in", "Input Image"); - AddParameter(ParameterType_InputVectorData, "vec", "Input vector data"); - - // No data value - AddParameter(ParameterType_Float, "nodata", "No-data value"); - MandatoryOff("nodata"); - - // reprojection - AddParameter(ParameterType_Bool, "reproject", "Reproject the input vector"); - - // Output - AddParameter(ParameterType_OutputVectorData, "out", "Output vector data"); - - AddRAMParameter(); - - // Doc example parameter settings - SetDocExampleParameterValue("in", "input.tif"); - SetDocExampleParameterValue("vec", "terrain.shp"); - SetDocExampleParameterValue("out", "terain_with_stats.shp"); - - - } - - void DoUpdateParameters() - { - // Nothing to do here : all parameters are independent - } - - // Create a string of the kind "prefix_i" - std::string CreateFieldName(std::string prefix, unsigned int i) - { - std::stringstream ss; - ss << prefix << "_" << i; - return ss.str(); - } - - FloatVectorImageType::PixelType NullPixel(FloatVectorImageType::Pointer & img) - { - const unsigned int nBands = img->GetNumberOfComponentsPerPixel(); - FloatVectorImageType::PixelType pix; - pix.SetSize(nBands); - pix.Fill(0); - return pix; - } - - void DoExecute() - { - - // Get inputs - FloatVectorImageType::Pointer img = GetParameterImage("in"); - VectorDataType* shp = GetParameterVectorData("vec"); - const bool has_nodata = HasValue("nodata"); - FloatVectorImageType::InternalPixelType m_InputNoData = 0; - if (has_nodata) - { - m_InputNoData = GetParameterFloat("nodata"); - otbAppLogINFO("Using user no-data value: " << m_InputNoData); - } - - // Reproject vector data - if (GetParameterInt("reproject") != 0) - { - otbAppLogINFO("Reproject vector data"); - m_VectorDataReprojectionFilter = VectorDataReprojFilterType::New(); - m_VectorDataReprojectionFilter->SetInputVectorData(shp); - m_VectorDataReprojectionFilter->SetInputImage(img); - AddProcess(m_VectorDataReprojectionFilter, "Reproject vector data"); - m_VectorDataReprojectionFilter->Update(); - m_VectorDataSrc = m_VectorDataReprojectionFilter->GetOutput(); - } - else - { - m_VectorDataSrc = shp; - } - - // Internal no-data value - const LabelValueType intNoData = itk::NumericTraits<LabelValueType>::max(); - - // Rasterize vector data - m_RasterizeFilter = RasterizeFilterType::New(); - m_RasterizeFilter->AddVectorData(m_VectorDataSrc); - m_RasterizeFilter->SetOutputOrigin(img->GetOrigin()); - m_RasterizeFilter->SetOutputSpacing(img->GetSignedSpacing()); - m_RasterizeFilter->SetOutputSize(img->GetLargestPossibleRegion().GetSize()); - m_RasterizeFilter->SetOutputProjectionRef(img->GetProjectionRef()); - m_RasterizeFilter->SetBurnAttribute("________"); - m_RasterizeFilter->SetDefaultBurnValue(0); - m_RasterizeFilter->SetGlobalWarningDisplay(false); - m_RasterizeFilter->SetBackgroundValue(intNoData); - - // Computing stats - m_StatsFilter = StatsFilterType::New(); - m_StatsFilter->SetInput(img); - m_StatsFilter->SetInputLabelImage(m_RasterizeFilter->GetOutput()); - m_StatsFilter->GetStreamer()->SetAutomaticAdaptativeStreaming(GetParameterInt("ram")); - AddProcess(m_StatsFilter->GetStreamer(), "Computing statistics"); - m_StatsFilter->Update(); - - // Remove the no-data entry - StatsFilterType::LabelPopulationMapType countMap = m_StatsFilter->GetLabelPopulationMap(); - StatsFilterType::PixelValueMapType meanMap = m_StatsFilter->GetMeanValueMap(); - StatsFilterType::PixelValueMapType stdMap = m_StatsFilter->GetStandardDeviationValueMap(); - StatsFilterType::PixelValueMapType minMap = m_StatsFilter->GetMinValueMap(); - StatsFilterType::PixelValueMapType maxMap = m_StatsFilter->GetMaxValueMap(); - countMap.erase(intNoData); - meanMap.erase(intNoData); - stdMap.erase(intNoData); - minMap.erase(intNoData); - maxMap.erase(intNoData); - - // Add a statistics fields - otbAppLogINFO("Writing output vector data"); - LabelValueType internalFID = 0; - m_NewVectorData = VectorDataType::New(); - DataNodeType::Pointer root = m_NewVectorData->GetDataTree()->GetRoot()->Get(); - DataNodeType::Pointer document = DataNodeType::New(); - document->SetNodeType(otb::DOCUMENT); - m_NewVectorData->GetDataTree()->Add(document, root); - DataNodeType::Pointer folder = DataNodeType::New(); - folder->SetNodeType(otb::FOLDER); - m_NewVectorData->GetDataTree()->Add(folder, document); - m_NewVectorData->SetProjectionRef(m_VectorDataSrc->GetProjectionRef()); - TreeIteratorType itVector(m_VectorDataSrc->GetDataTree()); - itVector.GoToBegin(); - - while (!itVector.IsAtEnd()) - { - if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder()) - { - - DataNodeType::Pointer currentGeometry = itVector.Get(); - - // Add the geometry with the new fields - if (countMap.count(internalFID) > 0) - { - currentGeometry->SetFieldAsDouble("count", countMap[internalFID] ); - for (unsigned int band = 0 ; band < img->GetNumberOfComponentsPerPixel() ; band++) - { - currentGeometry->SetFieldAsDouble(CreateFieldName("mean", band), meanMap[internalFID][band] ); - currentGeometry->SetFieldAsDouble(CreateFieldName("stdev", band), stdMap [internalFID][band] ); - currentGeometry->SetFieldAsDouble(CreateFieldName("min", band), minMap [internalFID][band] ); - currentGeometry->SetFieldAsDouble(CreateFieldName("max", band), maxMap [internalFID][band] ); - } - m_NewVectorData->GetDataTree()->Add(currentGeometry, folder); - } - - internalFID++; - } - ++itVector; - } // next feature - - SetParameterOutputVectorData("out", m_NewVectorData); - - } - - VectorDataType::Pointer m_VectorDataSrc; - VectorDataType::Pointer m_NewVectorData; - VectorDataReprojFilterType::Pointer m_VectorDataReprojectionFilter; - RasterizeFilterType::Pointer m_RasterizeFilter; - StatsFilterType::Pointer m_StatsFilter; - -}; -} -} - -OTB_APPLICATION_EXPORT( otb::Wrapper::ZonalStatistics )