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
|
/*
* 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 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.hxx"
#endif
#endif
|