#include <itkRecursiveGaussianImageFilter.h>
Base class for computing IIR convolution with an approximation of a Gaussian kernel.
\[ \frac{ 1 }{ \sigma \sqrt{ 2 \pi } } \exp{ \left( - \frac{x^2}{ 2 \sigma^2 } \right) } \]
RecursiveGaussianImageFilter is the base class for recursive filters that approximate convolution with the Gaussian kernel. This class implements the recursive filtering method proposed by R.Deriche in [33].
Details of the implementation are described in the technical report: R. Deriche, "Recursively Implementing The Gaussian and Its Derivatives", INRIA, 1993, ftp://ftp.inria.fr/INRIA/tech-reports/RR/RR-1893.ps.gz
Further improvements of the algorithm are described in [35].
As compared to itk::DiscreteGaussianImageFilter, this filter tends to be faster for large kernels, and it can take the derivative of the blurred image in one step. Also, note that we have itk::RecursiveGaussianImageFilter::SetSigma(), but itk::DiscreteGaussianImageFilter::SetVariance().
Definition at line 95 of file itkRecursiveGaussianImageFilter.h.
Public Member Functions | |
virtual::itk::LightObject::Pointer | CreateAnother () const |
const char * | GetNameOfClass () const override |
virtual bool | GetNormalizeAcrossScale () const |
virtual void | NormalizeAcrossScaleOff () |
virtual void | NormalizeAcrossScaleOn () |
void | SetFirstOrder () |
virtual void | SetNormalizeAcrossScale (bool _arg) |
void | SetSecondOrder () |
void | SetZeroOrder () |
virtual ScalarRealType | GetSigma () const |
virtual void | SetSigma (ScalarRealType _arg) |
virtual void | SetOrder (GaussianOrderEnum _arg) |
virtual GaussianOrderEnum | GetOrder () const |
![]() | |
virtual unsigned int | GetDirection () const |
const TInputImage * | GetInputImage () |
const char * | GetNameOfClass () const override |
virtual void | SetDirection (unsigned int _arg) |
void | SetInputImage (const TInputImage *) |
![]() | |
virtual bool | CanRunInPlace () const |
virtual void | SetInPlace (bool _arg) |
virtual bool | GetInPlace () const |
virtual void | InPlaceOn () |
virtual void | InPlaceOff () |
![]() | |
const InputImageType * | GetInput () const |
const InputImageType * | GetInput () const |
const InputImageType * | GetInput (unsigned int idx) const |
const InputImageType * | GetInput (unsigned int idx) const |
void | PopBackInput () override |
void | PopBackInput () override |
void | PopFrontInput () override |
void | PopFrontInput () override |
virtual void | PushBackInput (const InputImageType *input) |
virtual void | PushBackInput (const InputImageType *input) |
virtual void | PushFrontInput (const InputImageType *input) |
virtual void | PushFrontInput (const InputImageType *input) |
virtual void | SetInput (const InputImageType *input) |
virtual void | SetInput (const InputImageType *input) |
virtual void | SetInput (unsigned int, const TInputImage *image) |
virtual void | SetInput (unsigned int, const TInputImage *image) |
virtual void | SetCoordinateTolerance (double _arg) |
virtual double | GetCoordinateTolerance () const |
virtual void | SetCoordinateTolerance (double _arg) |
virtual double | GetCoordinateTolerance () const |
virtual void | SetDirectionTolerance (double _arg) |
virtual double | GetDirectionTolerance () const |
virtual void | SetDirectionTolerance (double _arg) |
virtual double | GetDirectionTolerance () const |
![]() | |
OutputImageType * | GetOutput (unsigned int idx) |
OutputImageType * | GetOutput () |
const OutputImageType * | GetOutput () const |
virtual void | GraftOutput (DataObject *graft) |
virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *graft) |
virtual void | GraftNthOutput (unsigned int idx, DataObject *graft) |
ProcessObject::DataObjectPointer | MakeOutput (ProcessObject::DataObjectPointerArraySizeType idx) override |
ProcessObject::DataObjectPointer | MakeOutput (const ProcessObject::DataObjectIdentifierType &) override |
![]() | |
virtual void | AbortGenerateDataOff () |
virtual void | AbortGenerateDataOn () |
virtual const bool & | GetAbortGenerateData () const |
DataObjectPointerArray | GetIndexedInputs () |
DataObjectPointerArray | GetIndexedOutputs () |
NameArray | GetInputNames () const |
DataObjectPointerArray | GetInputs () |
MultiThreaderType * | GetMultiThreader () const |
DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
DataObjectPointerArraySizeType | GetNumberOfInputs () const |
DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
virtual DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
NameArray | GetOutputNames () const |
DataObjectPointerArray | GetOutputs () |
virtual float | GetProgress () const |
NameArray | GetRequiredInputNames () const |
bool | HasInput (const DataObjectIdentifierType &key) const |
bool | HasOutput (const DataObjectIdentifierType &key) const |
void | IncrementProgress (float increment) |
virtual void | PrepareOutputs () |
virtual void | PropagateRequestedRegion (DataObject *output) |
virtual void | ResetPipeline () |
virtual void | SetAbortGenerateData (bool _arg) |
void | SetMultiThreader (MultiThreaderType *threader) |
virtual void | Update () |
virtual void | UpdateLargestPossibleRegion () |
virtual void | UpdateOutputData (DataObject *output) |
virtual void | UpdateOutputInformation () |
void | UpdateProgress (float progress) |
virtual void | SetReleaseDataFlag (bool val) |
virtual bool | GetReleaseDataFlag () const |
void | ReleaseDataFlagOn () |
void | ReleaseDataFlagOff () |
virtual void | SetReleaseDataBeforeUpdateFlag (bool _arg) |
virtual const bool & | GetReleaseDataBeforeUpdateFlag () const |
virtual void | ReleaseDataBeforeUpdateFlagOn () |
virtual void | ReleaseDataBeforeUpdateFlagOff () |
virtual void | SetNumberOfWorkUnits (ThreadIdType _arg) |
virtual const ThreadIdType & | GetNumberOfWorkUnits () const |
![]() | |
unsigned long | AddObserver (const EventObject &event, Command *cmd) const |
unsigned long | AddObserver (const EventObject &event, std::function< void(const EventObject &)> function) const |
virtual void | DebugOff () const |
virtual void | DebugOn () const |
Command * | GetCommand (unsigned long tag) |
bool | GetDebug () const |
MetaDataDictionary & | GetMetaDataDictionary () |
const MetaDataDictionary & | GetMetaDataDictionary () const |
virtual ModifiedTimeType | GetMTime () const |
virtual const TimeStamp & | GetTimeStamp () const |
bool | HasObserver (const EventObject &event) const |
void | InvokeEvent (const EventObject &) |
void | InvokeEvent (const EventObject &) const |
virtual void | Modified () const |
void | Register () const override |
void | RemoveAllObservers () |
void | RemoveObserver (unsigned long tag) const |
void | SetDebug (bool debugFlag) const |
void | SetReferenceCount (int) override |
void | UnRegister () const noexcept override |
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
void | SetMetaDataDictionary (MetaDataDictionary &&rrhs) |
virtual void | SetObjectName (std::string _arg) |
virtual const std::string & | GetObjectName () const |
![]() | |
Pointer | Clone () const |
virtual void | Delete () |
virtual int | GetReferenceCount () const |
void | Print (std::ostream &os, Indent indent=0) const |
Static Public Member Functions | |
static Pointer | New () |
![]() | |
static double | GetGlobalDefaultCoordinateTolerance () |
static double | GetGlobalDefaultCoordinateTolerance () |
static double | GetGlobalDefaultDirectionTolerance () |
static double | GetGlobalDefaultDirectionTolerance () |
static void | SetGlobalDefaultCoordinateTolerance (double) |
static void | SetGlobalDefaultCoordinateTolerance (double) |
static void | SetGlobalDefaultDirectionTolerance (double) |
static void | SetGlobalDefaultDirectionTolerance (double) |
![]() | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool val) |
![]() | |
static void | BreakOnError () |
static Pointer | New () |
Private Member Functions | |
void | ComputeDCoefficients (ScalarRealType sigmad, ScalarRealType W1, ScalarRealType L1, ScalarRealType W2, ScalarRealType L2, ScalarRealType &SD, ScalarRealType &DD, ScalarRealType &ED) |
void | ComputeNCoefficients (ScalarRealType sigmad, ScalarRealType A1, ScalarRealType B1, ScalarRealType W1, ScalarRealType L1, ScalarRealType A2, ScalarRealType B2, ScalarRealType W2, ScalarRealType L2, ScalarRealType &N0, ScalarRealType &N1, ScalarRealType &N2, ScalarRealType &N3, ScalarRealType &SN, ScalarRealType &DN, ScalarRealType &EN) |
void | ComputeRemainingCoefficients (bool symmetric) |
Private Attributes | |
bool | m_NormalizeAcrossScale {} |
GaussianOrderEnum | m_Order {} |
ScalarRealType | m_Sigma {} |
Additional Inherited Members | |
![]() | |
static constexpr unsigned int | InputImageDimension |
static constexpr unsigned int | OutputImageDimension |
![]() | |
static constexpr unsigned int | InputImageDimension |
static constexpr unsigned int | InputImageDimension |
static constexpr unsigned int | OutputImageDimension |
static constexpr unsigned int | OutputImageDimension |
![]() | |
static constexpr unsigned int | OutputImageDimension |
![]() | |
using | InputToOutputRegionCopierType |
using | OutputToInputRegionCopierType |
![]() | |
static void | MathEMAMAMAM (T1 &out, const T1 &a1, const T2 &b1, const T1 &a2, const T2 &b2, const T1 &a3, const T2 &b3, const T1 &a4, const T2 &b4) |
static void | MathEMAMAMAM (VariableLengthVector< T1 > &out, const VariableLengthVector< T1 > &a1, const T2 &b1, const VariableLengthVector< T1 > &a2, const T2 &b2, const VariableLengthVector< T1 > &a3, const T2 &b3, const VariableLengthVector< T1 > &a4, const T2 &b4) |
static void | MathSMAMAMAM (T1 &out, const T1 &a1, const T2 &b1, const T1 &a2, const T2 &b2, const T1 &a3, const T2 &b3, const T1 &a4, const T2 &b4) |
static void | MathSMAMAMAM (VariableLengthVector< T1 > &out, const VariableLengthVector< T1 > &a1, const T2 &b1, const VariableLengthVector< T1 > &a2, const T2 &b2, const VariableLengthVector< T1 > &a3, const T2 &b3, const VariableLengthVector< T1 > &a4, const T2 &b4) |
![]() | |
static const ImageRegionSplitterBase * | GetGlobalDefaultSplitter () |
static ITK_THREAD_RETURN_FUNCTION_CALL_CONVENTION | ThreaderCallback (void *arg) |
![]() | |
template<typename TSourceObject> | |
static void | MakeRequiredOutputs (TSourceObject &sourceObject, const DataObjectPointerArraySizeType numberOfRequiredOutputs) |
static constexpr float | progressFixedToFloat (uint32_t fixed) |
static uint32_t | progressFloatToFixed (float f) |
![]() | |
ScalarRealType | m_BM1 |
ScalarRealType | m_BM2 |
ScalarRealType | m_BM3 |
ScalarRealType | m_BM4 |
ScalarRealType | m_BN1 |
ScalarRealType | m_BN2 |
ScalarRealType | m_BN3 |
ScalarRealType | m_BN4 |
ScalarRealType | m_D1 |
ScalarRealType | m_D2 |
ScalarRealType | m_D3 |
ScalarRealType | m_D4 |
ScalarRealType | m_M1 |
ScalarRealType | m_M2 |
ScalarRealType | m_M3 |
ScalarRealType | m_M4 |
ScalarRealType | m_N0 |
ScalarRealType | m_N1 |
ScalarRealType | m_N2 |
ScalarRealType | m_N3 |
![]() | |
bool | m_DynamicMultiThreading |
![]() | |
TimeStamp | m_OutputInformationMTime {} |
bool | m_Updating {} |
![]() | |
std::atomic< int > | m_ReferenceCount {} |
using itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::ConstPointer = SmartPointer<const Self> |
Definition at line 105 of file itkRecursiveGaussianImageFilter.h.
using itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::OutputImageType = TOutputImage |
Type of the output image
Definition at line 125 of file itkRecursiveGaussianImageFilter.h.
using itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::Pointer = SmartPointer<Self> |
Definition at line 104 of file itkRecursiveGaussianImageFilter.h.
using itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::Self = RecursiveGaussianImageFilter |
Standard class type aliases.
Definition at line 102 of file itkRecursiveGaussianImageFilter.h.
using itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::Superclass = RecursiveSeparableImageFilter<TInputImage, TOutputImage> |
Definition at line 103 of file itkRecursiveGaussianImageFilter.h.
|
protected |
|
overrideprotecteddefault |
|
private |
Compute the D coefficients in the recursive filter.
|
private |
Compute the N coefficients in the recursive filter.
|
private |
Compute the M coefficients and the boundary coefficients in the recursive filter.
|
virtual |
Create an object from an instance, potentially deferring to a factory. This method allows you to create an instance of an object that is exactly the same type as the referring object. This is useful in cases where an object has been cast back to a base class.
Reimplemented from itk::Object.
|
overridevirtual |
Reimplemented from itk::InPlaceImageFilter< TInputImage, TInputImage >.
|
virtual |
|
virtual |
Set/Get the Order of the Gaussian to convolve with.
|
virtual |
Set/Get the Sigma, measured in world coordinates, of the Gaussian kernel. The default is 1.0. An exception will be generated if the Sigma value is less than or equal to zero.
|
static |
Method for creation through the object factory.
|
virtual |
|
virtual |
|
overrideprotectedvirtual |
Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from itk::InPlaceImageFilter< TInputImage, TInputImage >.
void itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::SetFirstOrder | ( | ) |
Explicitly set a first order derivative.
|
virtual |
Set/Get the flag for normalizing the gaussian over scale-space.
This flag enables the analysis of the differential shape of features independent of their size ( both pixels and physical size ). Following the notation of Tony Lindeberg:
Let
\[ L(x; t) = g(x; t) \ast f(x) \]
be the scale-space representation of image
\[ f(x) \]
where
\[ g(x; t) = \frac{1}{ \sqrt{ 2 \pi t} } \exp{ \left( -\frac{x^2}{ 2 t } \right) } \]
is the Gaussian function and
\[\ast\]
denotes convolution. This is a change from above with
\[ t = \sigma^2 \]
.
Then the normalized derivative operator for normalized coordinates across scale is:
\[ \partial_\xi = \sqrt{t} \partial_x \]
The resulting scaling factor is
\[ \sigma^N \]
where N is the order of the derivative.
When this flag is ON the filter will be normalized in such a way that the values of derivatives are not biased by the size of the object. That is to say the maximum value a feature reaches across scale is independent of the scale of the object.
For analyzing an image across scale-space you want to enable this flag. It is disabled by default.
|
virtual |
Set/Get the Order of the Gaussian to convolve with.
void itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::SetSecondOrder | ( | ) |
Explicitly set a second order derivative.
|
virtual |
Set/Get the Sigma, measured in world coordinates, of the Gaussian kernel. The default is 1.0. An exception will be generated if the Sigma value is less than or equal to zero.
|
overrideprotectedvirtual |
Set up the coefficients of the filter to approximate a specific kernel. Here it is used to approximate a Gaussian or one of its derivatives. Parameter is the spacing along the dimension to filter.
Implements itk::RecursiveSeparableImageFilter< TInputImage, TInputImage >.
void itk::RecursiveGaussianImageFilter< TInputImage, TOutputImage >::SetZeroOrder | ( | ) |
Explicitly set a zeroth order derivative.
|
overrideprotectedvirtual |
Verifies that the process object has been configured correctly, that all required inputs are set, and needed parameters are set appropriately. If not valid an exceptions will be thrown.
This method is called before UpdateOutputInformation() is propagated to the inputs.
The ProcessObject's implementation verifies that the m_NumberOfRequiredInputs are set and not null.
Reimplemented from itk::ProcessObject.
|
private |
Normalize the image across scale space
Definition at line 261 of file itkRecursiveGaussianImageFilter.h.
|
private |
Definition at line 263 of file itkRecursiveGaussianImageFilter.h.
|
private |
Sigma of the gaussian kernel.
Definition at line 258 of file itkRecursiveGaussianImageFilter.h.