1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*=========================================================================
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.
=========================================================================*/
#ifndef otbLabelizeImageFilterBase_h
#define otbLabelizeImageFilterBase_h
#include "itkImageToImageFilter.h"
#include "itkAddImageFilter.h"
#include "otbThresholdImageToPointSetFilter.h"
#include "otbMultiplyByScalarImageFilter.h"
namespace otb
{
/** \class LabelizeImageFilterBase
* \brief Base class for filter labelizing image region based on segmentation.
*
*
* \ingroup OTBLabelling
*/
template <class TInputImage, class TOutputImage, class TFilter>
class ITK_EXPORT LabelizeImageFilterBase
: public itk::ImageToImageFilter<TInputImage, TOutputImage>
{
public:
/** typedef for standard classes. */
typedef LabelizeImageFilterBase Self;
typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** typedef to simplify variables definition and declaration. */
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
typedef typename TInputImage::PixelType InputPixelType;
typedef typename TOutputImage::PixelType OutputPixelType;
typedef typename TInputImage::IndexType IndexType;
typedef itk::PointSet<InputPixelType, 2> PointSetType;
typedef typename PointSetType::Pointer PointSetPointerType;
typedef TFilter RegionGrowingFilterType;
typedef typename TFilter::Pointer RegionGrowingFilterPointerType;
/** "object factory" management method. */
itkNewMacro(Self);
/** Return the class name. */
itkTypeMacro(LabelizeImageFilterBase, ImageToImageFilter);
/** Get lower threshold */
itkGetMacro(LowerThreshold, InputPixelType);
/** Set lower threshold */
itkSetMacro(LowerThreshold, InputPixelType);
/** Get upper threshold */
itkGetMacro(UpperThreshold, InputPixelType);
/** Set upper threshold */
itkSetMacro(UpperThreshold, InputPixelType);
/** Get Object count*/
// only set after completion
// itkGetConstReferenceMacro(ObjectCount, unsigned long);
itkGetMacro(ObjectCount, unsigned long);
/** Internal */
typedef otb::ThresholdImageToPointSetFilter<InputImageType, PointSetType> ThresholdFilterType;
typedef typename ThresholdFilterType::Pointer ThresholdFilterPointerType;
typedef otb::MultiplyByScalarImageFilter<InputImageType, OutputImageType> MultiplyFilterType;
typedef typename MultiplyFilterType::Pointer MultiplyFilterPointerType;
typedef itk::AddImageFilter<OutputImageType, OutputImageType, OutputImageType> AddImageFilterType;
typedef typename AddImageFilterType::Pointer AddImageFilterPointerType;
protected:
LabelizeImageFilterBase();
~LabelizeImageFilterBase() ITK_OVERRIDE {}
void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
/** Main computation method */
void GenerateData() ITK_OVERRIDE;
/** Region growing */
virtual void RegionGrowing(const IndexType itkNotUsed(indexSeed)) {}
/** Instance region growing filter*/
RegionGrowingFilterPointerType m_RegionGrowingFilter;
/** Lower threshold */
InputPixelType m_LowerThreshold;
/** Upper threshold */
InputPixelType m_UpperThreshold;
/** Point set to store thresold results */
PointSetPointerType m_PointSet;
/** Multiply filter*/
MultiplyFilterPointerType m_MultiplyFilter;
/** Threshold point set filter */
ThresholdFilterPointerType m_ThresholdPointSetFilter;
/** Object counting */
unsigned long m_ObjectCount;
private:
LabelizeImageFilterBase(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
}; // end class LabelizeImageFilterBase
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbLabelizeImageFilterBase.txx"
#endif
#endif
|