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
|
/*
* Copyright (C) 2005-2017 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 otbClampImageFilter_h
#define otbClampImageFilter_h
#include "otbConvertTypeFunctor.h"
#include "itkUnaryFunctorImageFilter.h"
namespace otb
{
/** \class ClampImageFilter
* \brief Clamp image values to be below, over, or between threhold values.
*
* ClampImageFilter clamp image values to be between an upper
* and lower value. Values lower than m_Lower values are set to lower,
* and values greater than upper threshold are set to upper threshold
* value.
* This filter can also be used to cast any type of image into any other type
* as long as those types are arithmetics or complex.
*
* By default lower and upper thresholds are set to the maximum and
* minimum bounds of the image internal pixel value.
*
* \ingroup IntensityImageFilters Multithreaded
*
* \ingroup OTBImageManipulation
*/
template <class TInputImage, class TOutputImage=TInputImage>
class ITK_EXPORT ClampImageFilter
: public itk::UnaryFunctorImageFilter< TInputImage , TOutputImage ,
Functor::ConvertTypeFunctor <typename TInputImage::PixelType ,
typename TOutputImage::PixelType> >
{
public:
/** Standard class typedefs. */
typedef ClampImageFilter Self;
typedef itk::UnaryFunctorImageFilter< TInputImage , TOutputImage ,
Functor::ConvertTypeFunctor <typename TInputImage::PixelType ,
typename TOutputImage::PixelType> > Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro( Self );
/** Run-time type information (and related methods). */
itkTypeMacro( ClampImageFilter , itk::UnaryFunctorImageFilter );
/** Some additional typedefs. */
typedef TInputImage InputImageType;
typedef typename InputImageType::RegionType InputImageRegionType;
typedef typename InputImageType::PixelType InputImagePixelType;
/** Some additional typedefs. */
typedef TOutputImage OutputImageType;
typedef typename OutputImageType::RegionType OutputImageRegionType;
typedef typename OutputImageType::PixelType OutputImagePixelType;
typedef typename OutputImageType::InternalPixelType OutputInternalPixelType;
typedef typename itk::NumericTraits< OutputInternalPixelType >::ValueType OutputPixelValueType;
/** The values greater than or equal to the value are set to \p thresh. */
void ClampAbove(const OutputPixelValueType &thresh);
/** The values less than or equal to the value are set to \p thresh. */
void ClampBelow(const OutputPixelValueType &thresh);
/** The values outside the range are set to \p lower or \p upper. */
void ClampOutside(const OutputPixelValueType &lower, const OutputPixelValueType &upper);
/** Set/Get methods to set the lower threshold */
void SetLower(OutputPixelValueType val);
itkGetConstMacro(Lower, OutputPixelValueType);
/** Set/Get methods to set the upper threshold */
void SetUpper(OutputPixelValueType val);
itkGetConstMacro(Upper, OutputPixelValueType);
protected:
ClampImageFilter();
~ClampImageFilter() override {};
void PrintSelf(std::ostream& os, itk::Indent indent) const override;
void GenerateOutputInformation(void) override
{
Superclass::GenerateOutputInformation();
unsigned int sizeIn = this->GetInput()->GetNumberOfComponentsPerPixel();
this->GetFunctor().SetInputComponents( sizeIn );
this->GetOutput()->SetNumberOfComponentsPerPixel(
this->GetFunctor().GetOutputSize () );
}
private:
ClampImageFilter(const Self&) = delete ;
void operator=(const Self&) = delete ;
OutputPixelValueType m_Lower;
OutputPixelValueType m_Upper;
};
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbClampImageFilter.txx"
#endif
#endif
|