21 #ifndef otbMarkovRandomFieldFilter_h
22 #define otbMarkovRandomFieldFilter_h
26 #include "vnl/vnl_vector.h"
27 #include "vnl/vnl_matrix.h"
28 #include "itkMersenneTwisterRandomVariateGenerator.h"
30 #include "itkImageToImageFilter.h"
31 #include "itkImageRegionIterator.h"
33 #include "itkNeighborhoodAlgorithm.h"
34 #include "itkNeighborhood.h"
85 template <
class TInputImage,
class TClassifiedImage>
91 typedef itk::ImageToImageFilter<TInputImage, TClassifiedImage>
Superclass;
118 itkStaticConstMacro(InputImageDimension,
unsigned int, TInputImage::ImageDimension);
153 itkStaticConstMacro(ClassifiedImageDimension,
unsigned int, TClassifiedImage::ImageDimension);
216 itkSetMacro(NumberOfClasses,
unsigned int);
217 itkGetMacro(NumberOfClasses,
unsigned int);
222 itkSetMacro(MaximumNumberOfIterations,
unsigned int);
223 itkGetMacro(MaximumNumberOfIterations,
unsigned int);
228 itkSetMacro(ErrorTolerance,
double);
229 itkGetMacro(ErrorTolerance,
double);
234 itkSetMacro(SmoothingFactor,
double);
235 itkGetMacro(SmoothingFactor,
double);
240 itkSetMacro(Lambda,
double);
241 itkGetMacro(Lambda,
double);
250 void SetNeighborhoodRadius(
const unsigned long);
251 void SetNeighborhoodRadius(
const unsigned long* radiusArray);
258 for (
int i = 0; i < InputImageDimension; ++i)
259 neighborhoodRadius[i] = m_InputImageNeighborhoodRadius[i];
261 return neighborhoodRadius;
271 virtual void SetTrainingInput(
const TrainingImageType* trainingImage);
272 const TrainingImageType* GetTrainingInput(
void);
276 typedef enum { MaximumNumberOfIterations = 1, ErrorTolerance } StopConditionType;
283 itkGetConstReferenceMacro(NumberOfIterations,
unsigned int);
285 #ifdef ITK_USE_CONCEPT_CHECKING
287 itkConceptMacro(UnsignedIntConvertibleToClassifiedCheck, (itk::Concept::Convertible<unsigned int, LabelledImagePixelType>));
288 itkConceptMacro(ClassifiedConvertibleToUnsignedIntCheck, (itk::Concept::Convertible<LabelledImagePixelType, unsigned int>));
289 itkConceptMacro(ClassifiedConvertibleToIntCheck, (itk::Concept::Convertible<LabelledImagePixelType, int>));
290 itkConceptMacro(IntConvertibleToClassifiedCheck, (itk::Concept::Convertible<int, LabelledImagePixelType>));
291 itkConceptMacro(SameDimensionCheck, (itk::Concept::SameDimension<InputImageDimension, ClassifiedImageDimension>));
299 m_Generator->SetSeed(seed);
303 m_Generator->SetSeed();
312 void PrintSelf(std::ostream& os, itk::Indent indent)
const override;
324 virtual void ApplyMarkovRandomFieldFilter();
326 void GenerateData()
override;
327 void GenerateInputRequestedRegion()
override;
328 void EnlargeOutputRequestedRegion(itk::DataObject*)
override;
329 void GenerateOutputInformation()
override;
372 virtual void MinimizeOnce();
379 #ifndef OTB_MANUAL_INSTANTIATION
This is the base class for energy function used in the MRF framework.
itk::SmartPointer< Self > Pointer
This is the base class for optimizer used in the MRF framework.
itk::SmartPointer< Self > Pointer
This is the base class for sampler methods used in the MRF framework.
itk::SmartPointer< Self > Pointer
This is the class to use the Markov Random Field framework in OTB.
TrainingImagePointer m_TrainingImage
StopConditionType m_StopCondition
LabelledImageNeighborhoodIterator::RadiusType LabelledImageNeighborhoodRadiusType
std::vector< double > m_MRFNeighborhoodWeight
EnergyRegularizationPointer m_EnergyRegularization
itkGetObjectMacro(EnergyFidelity, EnergyFidelityType)
InputImageFaceListType::iterator InputImageFaceListIterator
TInputImage::RegionType InputImageRegionType
TInputImage::Pointer InputImagePointer
LabelledImageNeighborhoodRadiusType m_LabelledImageNeighborhoodRadius
EnergyFidelityPointer m_EnergyFidelity
LabelledImageIndexType::IndexValueType IndexValueType
TInputImage::PixelType InputImagePixelType
itkGetObjectMacro(Sampler, SamplerType)
itk::ConstNeighborhoodIterator< TInputImage > InputImageNeighborhoodIterator
itk::ImageRegionIterator< TInputImage > InputImageRegionIterator
itkGetObjectMacro(Optimizer, OptimizerType)
LabelledImageFaceListType::iterator LabelledImageFaceListIterator
itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType
itkGetObjectMacro(EnergyRegularization, EnergyRegularizationType)
MRFSampler< TInputImage, TClassifiedImage > SamplerType
OptimizerPointer m_Optimizer
std::vector< double > m_DummyVector
double m_ImageDeltaEnergy
TClassifiedImage::Pointer TrainingImagePointer
EnergyRegularizationType::Pointer EnergyRegularizationPointer
TClassifiedImage::PixelType TrainingImagePixelType
TInputImage::ConstPointer InputImageConstPointer
TClassifiedImage TrainingImageType
itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator< TInputImage > InputImageFacesCalculator
TInputImage InputImageType
InputImageNeighborhoodRadiusType m_InputImageNeighborhoodRadius
int m_TotalNumberOfPixelsInInputImage
void InitializeSeed(int seed)
EnergyFidelityType::Pointer EnergyFidelityPointer
MRFEnergy< TClassifiedImage, TClassifiedImage > EnergyRegularizationType
MarkovRandomFieldFilter Self
RandomGeneratorType::Pointer m_Generator
itk::ImageToImageFilter< TInputImage, TClassifiedImage > Superclass
TInputImage::SizeType SizeType
~MarkovRandomFieldFilter() override
TClassifiedImage::PixelType LabelledImagePixelType
TInputImage::SizeType InputImageSizeType
SamplerType::Pointer SamplerPointer
TClassifiedImage::Pointer LabelledImagePointer
unsigned int m_MaximumNumberOfIterations
LabelledImageFacesCalculator::FaceListType LabelledImageFaceListType
const NeighborhoodRadiusType GetNeighborhoodRadius() const
MRFEnergy< TInputImage, TClassifiedImage > EnergyFidelityType
int m_TotalNumberOfValidPixelsInOutputImage
std::vector< double > m_NeighborInfluence
unsigned int m_NumberOfIterations
Superclass::OutputImagePointer OutputImagePointer
TClassifiedImage LabelledImageType
void operator=(const Self &)=delete
TClassifiedImage::IndexType LabelledImageIndexType
itk::SmartPointer< const Self > ConstPointer
InputImageFacesCalculator::FaceListType InputImageFaceListType
TInputImage::SizeType NeighborhoodRadiusType
itk::SmartPointer< Self > Pointer
TClassifiedImage::RegionType LabelledImageRegionType
itk::ImageRegionConstIterator< TInputImage > InputImageRegionConstIterator
TClassifiedImage::OffsetType LabelledImageOffsetType
bool m_ExternalClassificationSet
itk::NeighborhoodIterator< TClassifiedImage > LabelledImageNeighborhoodIterator
OptimizerType::Pointer OptimizerPointer
MarkovRandomFieldFilter(const Self &)=delete
InputImageNeighborhoodIterator::RadiusType InputImageNeighborhoodRadiusType
itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator< TClassifiedImage > LabelledImageFacesCalculator
unsigned int m_NumberOfClasses
itk::ImageRegionIterator< TClassifiedImage > LabelledImageRegionIterator
itk::ImageRegionConstIterator< TClassifiedImage > LabelledImageRegionConstIterator
MRFOptimizer OptimizerType
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.