diff --git a/include/otbSARDEMPolygonsAnalysisImageFilter.h b/include/otbSARDEMPolygonsAnalysisImageFilter.h index 481cb96cce324b0df4e4a822c8f25d671772012e..a784fb8abeaffe18baec6c41a68c4aa492b9f6ce 100644 --- a/include/otbSARDEMPolygonsAnalysisImageFilter.h +++ b/include/otbSARDEMPolygonsAnalysisImageFilter.h @@ -159,16 +159,6 @@ public: // Initialize margin and GenericRSTransform void initializeMarginAndRSTransform(); - - /** Returns the const image */ - const TImageOut * GetOutput() const; - /** Returns the image */ - TImageOut * GetOutput(); - /** Returns the const optionnal output image */ - //const ImageOptionnalType * GetImageOptionnalTypeOutput() const; - /** Returns the optionnal output image */ - ImageOptionnalType * GetOptionnalOutput(); - protected: // Constructor @@ -201,20 +191,7 @@ protected: * OutputRegionToInputRegion returns the input region. This input region corresponds to the outputRegion. */ ImageInRegionType OutputRegionToInputRegion(const ImageOutRegionType& outputRegion) const; - - /** - * SARDEMPolygonsAnalysisImageFilter can produce an optionnal image according to the functor. The requested - * region for this optionnal output is set to the largest possible region. - */ - void EnlargeOutputRequestedRegion( itk::DataObject *output ) ITK_OVERRIDE; - - /** - * SARDEMPolygonsAnalysisImageFilter can produce an optionnal image according to the functor. An allocation of - * this optionnal output is made into BeforeThreadedGenerateData. - */ - void BeforeThreadedGenerateData() ITK_OVERRIDE; - - + /** * SARDEMPolygonsAnalysisImageFilter can be implemented as a multithreaded filter. * Therefore, this implementation provides a ThreadedGenerateData() routine @@ -295,10 +272,7 @@ protected: // Store optionnalImage ImageOutPixelType * m_OptionnalResults; - int m_OutputCounter; - // Mutex for optionnalImage - MutexType * m_Mutex; // RSTransform (for inverse localisation) RSTransformType2D::Pointer m_RSTransform; diff --git a/include/otbSARDEMPolygonsAnalysisImageFilter.txx b/include/otbSARDEMPolygonsAnalysisImageFilter.txx index 34229bed64a14ead442d4401d8db7476cecbcf27..38eeccba4d6d7d793ccdc2cdcecf7ea672a4377e 100644 --- a/include/otbSARDEMPolygonsAnalysisImageFilter.txx +++ b/include/otbSARDEMPolygonsAnalysisImageFilter.txx @@ -43,54 +43,8 @@ namespace otb SARDEMPolygonsAnalysisImageFilter< TImageIn ,TImageOut, TImageDEM, TImageSAR, TFunction >::SARDEMPolygonsAnalysisImageFilter() : m_SarSensorModelAdapter(ITK_NULLPTR), m_Gain(100.), m_Margin(0), m_NoData(-32768), m_MLRan(1), m_MLAzi(1) { - // Outputs required and/or needed (one required and one optionnal) - this->SetNumberOfRequiredOutputs(1); - this->SetNumberOfIndexedOutputs(2); - - this->SetNthOutput(0, ImageOutType::New()); - this->SetNthOutput(1, ImageOptionnalType::New()); - - m_OutputCounter = 0; - - m_Mutex = new MutexType(); - } - - template <class TImageIn, class TImageOut, class TImageDEM, class TImageSAR, class TFunction> - TImageOut * - SARDEMPolygonsAnalysisImageFilter< TImageIn ,TImageOut, TImageDEM, TImageSAR, TFunction > - ::GetOutput() -{ - if (this->GetNumberOfOutputs() < 1) - { - return ITK_NULLPTR; - } - return static_cast<ImageOutType *>(this->itk::ProcessObject::GetOutput(0)); -} - - template <class TImageIn, class TImageOut, class TImageDEM, class TImageSAR, class TFunction> - const TImageOut * - SARDEMPolygonsAnalysisImageFilter< TImageIn ,TImageOut, TImageDEM, TImageSAR, TFunction > - ::GetOutput() const -{ - if (this->GetNumberOfOutputs() < 1) - { - return 0; - } - return static_cast<ImageOutType *>(this->itk::ProcessObject::GetOutput(0)); } - - template <class TImageIn, class TImageOut, class TImageDEM, class TImageSAR, class TFunction> - typename SARDEMPolygonsAnalysisImageFilter< TImageIn ,TImageOut, TImageDEM, TImageSAR, TFunction >::ImageOptionnalType * - SARDEMPolygonsAnalysisImageFilter< TImageIn ,TImageOut, TImageDEM, TImageSAR, TFunction > - ::GetOptionnalOutput() -{ - if (this->GetNumberOfOutputs() < 2) - { - return ITK_NULLPTR; - } - return static_cast<ImageOptionnalType *>(this->itk::ProcessObject::GetOutput(1)); -} - + /** * Set Sar Image keyWordList */ @@ -369,70 +323,6 @@ namespace otb outputKwl.AddKey(key, std::to_string(i)); } outputPtr->SetImageKeywordList(outputKwl); - - - ////////// Check if the optionnal output is required ////////// - if (m_FunctionOnPolygon->GetWithOptionnalOutput()) - { - // This output is just a vector with 1xNbLine_MainOutput pixels. - // Pixels are the same nature than Main Output - ImageOptionnalPointer outputOptionnalPtr = this->GetOptionnalOutput(); - if (numberOfEstimatedComponents > 1) - { - // Set the number of Components - outputOptionnalPtr->SetNumberOfComponentsPerPixel(numberOfEstimatedComponents); - } - - ImageOptionnalRegionType region = outputPtr->GetLargestPossibleRegion(); - ImageOptionnalSizeType sizeRegion; - - - sizeRegion[0] = 1; - sizeRegion[1] = outputPtr->GetLargestPossibleRegion().GetSize()[1]; - - region.SetSize(sizeRegion); - outputOptionnalPtr->SetLargestPossibleRegion(region); - outputOptionnalPtr->SetOrigin(outputPtr->GetOrigin()); - outputOptionnalPtr->SetSpacing(outputPtr->GetSpacing()); - - // Complete Optionnal Output KeyWordList - ImageKeywordlist outputOptionnalKwl; - for (unsigned int i = 0; i < vecEstimatedComponents.size(); i++) - { - std::string key = BandKey + vecEstimatedComponents.at(i); - outputOptionnalKwl.AddKey(key, std::to_string(i)); - } - outputOptionnalPtr->SetImageKeywordList(outputOptionnalKwl); - - if (m_OutputCounter == 0) - { - // Allocate optionnal Results (Vector) - int nbLineOptionnal = this->GetOptionnalOutput()->GetLargestPossibleRegion().GetSize()[1]; - m_OptionnalResults = new ImageOutPixelType[nbLineOptionnal]; - } - } - - // Increment Output Counter - ++m_OutputCounter; - } - -/** - * Method EnlargeOutputRequestedRegion - */ - template<class TImageIn, class TImageOut, class TImageDEM, class TImageSAR, class TFunction> - void - SARDEMPolygonsAnalysisImageFilter< TImageIn, TImageOut, TImageDEM, TImageSAR, TFunction > - ::EnlargeOutputRequestedRegion( itk::DataObject *itkNotUsed(output) ) - { - // This filter requires all of the optionnal output image (Nth Output = 1). The output is - // vector with 1xNbLines_Main_Output as size - if (m_FunctionOnPolygon->GetWithOptionnalOutput()) - { - if ( this->itk::ProcessObject::GetOutput(1) ) - { - this->itk::ProcessObject::GetOutput(1)->SetRequestedRegionToLargestPossibleRegion(); - } - } } /** @@ -603,26 +493,6 @@ namespace otb ///////////// Set Output Requestion Region (Strips) /////////////// ImageOutRegionType outputRequestedRegion = this->GetOutput()->GetRequestedRegion(); - // if (m_FunctionOnPolygon->GetWithOptionnalOutput()) - // { - // if (outputRequestedRegion.GetIndex()[0] != 0 && - // outputRequestedRegion.GetSize()[0] != this->GetOutput()->GetLargestPossibleRegion().GetSize()[0]) - // { - // ImageOutIndexType outputIndex; - // outputIndex[0] = 0; - // outputIndex[1] = outputRequestedRegion.GetIndex()[1]; - - // ImageOutSizeType outputSize; - // outputSize[0] = this->GetOutput()->GetLargestPossibleRegion().GetSize()[0]; - // outputSize[1] = outputRequestedRegion.GetSize()[1]; - - // // Region affectation (with Crop to respect image dimension) - // outputRequestedRegion.SetSize(outputSize); - // outputRequestedRegion.SetIndex(outputIndex); - // //outputRequestedRegion.Crop(this->GetOutput()->GetLargestPossibleRegion()); - // this->GetOutput()->SetRequestedRegion(outputRequestedRegion); - // } - // } ///////////// With the new output requested region, find the region into Projeted DEM ///////////// ImageInRegionType inputRequestedRegion = OutputRegionToInputRegion(outputRequestedRegion); ImageInPointer inputPtr = const_cast< ImageInType * >( this->GetInput() ); @@ -964,25 +834,6 @@ namespace otb } } - /** - * Method ThreadedGenerateData - */ - template<class TImageIn, class TImageOut, class TImageDEM, class TImageSAR, class TFunction> - void - SARDEMPolygonsAnalysisImageFilter< TImageIn, TImageOut, TImageDEM, TImageSAR, TFunction > - ::BeforeThreadedGenerateData() - { - // Allocation for the optionnal image (if needed) - if (m_FunctionOnPolygon->GetWithOptionnalOutput()) - { - // Allocate optionnal output - ImageOptionnalPointer outputOptionnalPtr = this->GetOptionnalOutput(); - outputOptionnalPtr->SetBufferedRegion(outputOptionnalPtr->GetRequestedRegion() ); - outputOptionnalPtr->Allocate(); - } - } - - /** * Method ThreadedGenerateData */ @@ -1216,30 +1067,6 @@ namespace otb // Next Line OutIt.NextLine(); - - /// Optionnal Output //// - if (m_FunctionOnPolygon->GetWithOptionnalOutput()) - { - // Assignate the optionnal image - ImageOutIndexType indexOptionnalImage; - indexOptionnalImage[0] = 0; // Always 0 since optionnal image is a vector - indexOptionnalImage[1] = ind_Line; - - // Estimate the value for the current ind_Line and store it into m_OptionnalResults - // If first output => Estimate ans store results if second => copy and write into optionnal image - // m_OptionnalResults is threadSafe because of mutex lock and unlock - m_Mutex->Lock(); - if (m_OutputCounter == 1) - { - m_FunctionOnPolygon->estimateOptionnalImage(&m_OptionnalResults[ind_Line], threadId); - } - else - { - this->GetOptionnalOutput()->SetPixel(indexOptionnalImage, m_OptionnalResults[ind_Line]); - } - m_Mutex->Unlock(); - } - } // End lines (Main output) delete [] Polygon_SideInUp_VecLine;