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 139 140 141 142 143 144 145 146
|
/*
* Copyright (C) 2005-2020 Centre National d'Etudes Spatiales (CNES)
*
* This file is part of Orfeo Toolbox
*
* https://www.orfeo-toolbox.org/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef otbSpatialisationFilter_h
#define otbSpatialisationFilter_h
#include "itkLabelObject.h"
#include "otbLabelMapSource.h"
#include "itkSize.h"
#include "itkImageRegionIterator.h"
#include "otbImage.h"
namespace otb
{
/**
* \class SpatialisationFilter
* \brief Create a label map from objects description.
*
* Objects are described by:
* - Vector of area: indicating the spectral type of the object (rock, grass, forest, ..).
* - Vector of paths: indicating the path of files containing associated spectra or "" if spectrum will be simulated.
*
* SpatialisationFilter creates a labelMap containing NumberOfObjects[0]*NumberOfObject[1] objects (number of objects by line, number of objects by column).
* Each object is rectangular of size ObjectSize.
* Two attributes "path" and "area" are added to each object using SetPathVector and SetAreaVector.
* The Label of each object is set using SetLabels.
*
* \sa LabelMapSource
*
* \ingroup OTBSimulation
*/
template <class TLabelMap>
class ITK_EXPORT SpatialisationFilter : public LabelMapSource<TLabelMap>
{
public:
/**
* Standard "Self" & Superclass typedef.
*/
typedef SpatialisationFilter Self;
typedef LabelMapSource<TLabelMap> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Some convenient typedefs. */
typedef TLabelMap OutputLabelMapType;
typedef typename OutputLabelMapType::Pointer OutputLabelMapPointer;
typedef typename OutputLabelMapType::ConstPointer OutputLabelMapConstPointer;
typedef typename OutputLabelMapType::IndexType IndexType;
typedef typename OutputLabelMapType::RegionType RegionType;
typedef typename OutputLabelMapType::LabelObjectType::LabelType LabelType;
typedef typename OutputLabelMapType::LabelObjectType LabelObjectType;
typedef typename LabelObjectType::AttributesValueType AttributesValueType;
typedef itk::Size<2> SizeType;
typedef std::vector<AttributesValueType> VectorType;
typedef std::vector<LabelType> LabelVectorType;
/** Standard Macro*/
itkTypeMacro(SpatialisationFilter, LabelMapSource);
itkNewMacro(Self);
/**Set input vector data*/
itkSetMacro(ObjectSize, SizeType);
itkGetMacro(ObjectSize, SizeType);
itkSetMacro(NumberOfObjects, SizeType);
itkGetMacro(NumberOfObjects, SizeType);
// itkSetMacro(PathVector, VectorType);
// itkGetMacro(PathVector, VectorType);
//
// itkSetMacro(AreaVector, VectorType);
// itkGetMacro(AreaVector, VectorType);
void SetPathVector(VectorType& v)
{
m_PathVector = v;
}
void SetAreaVector(VectorType& v)
{
m_AreaVector = v;
}
void SetLabels(LabelVectorType& v)
{
m_Labels = v;
}
protected:
SpatialisationFilter();
~SpatialisationFilter() override
{
}
void PrintSelf(std::ostream& os, itk::Indent indent) const override;
void GenerateData() override;
virtual void ProcessObject(unsigned int obj);
void GenerateOutputInformation() override;
private:
SpatialisationFilter(const Self&) = delete;
void operator=(const Self&) = delete;
/** Common size for all objects in number of pixels (number of rows, number of columns).*/
SizeType m_ObjectSize;
/** Number of objects contained in the image (number of objects by line, number of objects by column).*/
SizeType m_NumberOfObjects;
/**Vector containing the path for spectra files (if any) for each object. */
/** If no path is given (empty path: "") spectrum is simulated from default parameters.*/
VectorType m_PathVector; // vector containing the spectrum path (if any) for each object
/** Vector containing the spectral type of each object.*/
VectorType m_AreaVector; // vector containing the the type of each object
/** Vector containing the label of each object (ex.: 1, 2, 25, etc.).*/
LabelVectorType m_Labels; // vector containing the label of each object.
};
} // end namespace itk
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbSpatialisationFilter.hxx"
#endif
#endif
|