ITK
4.6.0
Insight Segmentation and Registration Toolkit
|
#include <itkBilateralImageFilter.h>
Blurs an image while preserving edges.
This filter uses bilateral filtering to blur an image using both domain and range "neighborhoods". Pixels that are close to a pixel in the image domain and similar to a pixel in the image range are used to calculate the filtered value. Two gaussian kernels (one in the image domain and one in the image range) are used to smooth the image. The result is an image that is smoothed in homogeneous regions yet has edges preserved. The result is similar to anisotropic diffusion but the implementation in non-iterative. Another benefit to bilateral filtering is that any distance metric can be used for kernel smoothing the image range. Hence, color images can be smoothed as vector images, using the CIE distances between intensity values as the similarity metric (the Gaussian kernel for the image domain is evaluated using CIE distances). A separate version of this filter will be designed for color and vector images.
Bilateral filtering is capable of reducing the noise in an image by an order of magnitude while maintaining edges.
The bilateral operator used here was described by Tomasi and Manduchi (Bilateral Filtering for Gray and ColorImages. IEEE ICCV. 1998.)
Support color images
Support vector images
Definition at line 75 of file itkBilateralImageFilter.h.
Public Member Functions | |
virtual ::itk::LightObject::Pointer | CreateAnother (void) const |
virtual const char * | GetNameOfClass () const |
virtual const SizeType & | GetRadius () const |
void | SetDomainSigma (const double v) |
void | SetRadius (const SizeValueType) |
virtual void | SetRadius (SizeType _arg) |
typedef (Concept::HasNumericTraits< OutputPixelType >) OutputHasNumericTraitsCheck | |
virtual void | SetDomainSigma (ArrayType _arg) |
virtual const ArrayType | GetDomainSigma () const |
virtual void | SetDomainMu (double _arg) |
virtual const double & | GetDomainMu () const |
virtual void | SetRangeSigma (double _arg) |
virtual double | GetRangeSigma () const |
virtual unsigned int | GetFilterDimensionality () const |
virtual void | SetFilterDimensionality (unsigned int _arg) |
virtual void | AutomaticKernelSizeOn () |
virtual void | AutomaticKernelSizeOff () |
virtual bool | GetAutomaticKernelSize () const |
virtual void | SetAutomaticKernelSize (bool _arg) |
virtual void | SetNumberOfRangeGaussianSamples (unsigned long _arg) |
virtual unsigned long | GetNumberOfRangeGaussianSamples () const |
Public Member Functions inherited from itk::ImageToImageFilter< TInputImage, TOutputImage > | |
const InputImageType * | GetInput (void) const |
const InputImageType * | GetInput (unsigned int idx) const |
virtual void | PopBackInput () |
virtual void | PopFrontInput () |
virtual void | PushBackInput (const InputImageType *image) |
virtual void | PushFrontInput (const InputImageType *image) |
virtual void | SetInput (const InputImageType *image) |
virtual void | SetInput (unsigned int, const TInputImage *image) |
virtual void | SetCoordinateTolerance (double _arg) |
virtual double | GetCoordinateTolerance () const |
virtual void | SetDirectionTolerance (double _arg) |
virtual double | GetDirectionTolerance () const |
Public Member Functions inherited from itk::ImageSource< TOutputImage > | |
OutputImageType * | GetOutput (unsigned int idx) |
virtual void | GraftNthOutput (unsigned int idx, DataObject *output) |
virtual void | GraftOutput (DataObject *output) |
virtual void | GraftOutput (const DataObjectIdentifierType &key, DataObject *output) |
OutputImageType * | GetOutput (void) |
const OutputImageType * | GetOutput (void) const |
virtual ProcessObject::DataObjectPointer | MakeOutput (ProcessObject::DataObjectPointerArraySizeType idx) ITK_OVERRIDE |
Public Member Functions inherited from itk::ProcessObject | |
virtual void | AbortGenerateDataOff () |
virtual void | AbortGenerateDataOn () |
virtual void | EnlargeOutputRequestedRegion (DataObject *) |
virtual const bool & | GetAbortGenerateData () const |
NameArray | GetInputNames () const |
MultiThreader * | GetMultiThreader () const |
DataObjectPointerArraySizeType | GetNumberOfIndexedInputs () const |
DataObjectPointerArraySizeType | GetNumberOfInputs () const |
DataObjectPointerArraySizeType | GetNumberOfOutputs () const |
virtual DataObjectPointerArraySizeType | GetNumberOfValidRequiredInputs () const |
NameArray | GetOutputNames () const |
virtual const float & | GetProgress () const |
NameArray | GetRequiredInputNames () const |
bool | HasInput (const DataObjectIdentifierType &key) const |
bool | HasOutput (const DataObjectIdentifierType &key) const |
virtual DataObjectPointer | MakeOutput (const DataObjectIdentifierType &) |
virtual void | PrepareOutputs () |
virtual void | PropagateRequestedRegion (DataObject *output) |
virtual void | ResetPipeline () |
virtual void | SetAbortGenerateData (bool _arg) |
virtual void | Update () |
virtual void | UpdateLargestPossibleRegion () |
virtual void | UpdateOutputData (DataObject *output) |
virtual void | UpdateOutputInformation () |
void | UpdateProgress (float progress) |
DataObjectPointerArray | GetInputs () |
DataObjectPointerArray | GetOutputs () |
DataObjectPointerArray | GetIndexedInputs () |
DataObjectPointerArray | GetIndexedOutputs () |
DataObjectPointerArraySizeType | GetNumberOfIndexedOutputs () const |
void | SetProgress (float progress) |
virtual void | SetReleaseDataFlag (bool flag) |
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 | SetNumberOfThreads (ThreadIdType _arg) |
virtual const ThreadIdType & | GetNumberOfThreads () const |
Public Member Functions inherited from itk::Object | |
unsigned long | AddObserver (const EventObject &event, Command *) |
unsigned long | AddObserver (const EventObject &event, Command *) const |
virtual void | DebugOff () const |
virtual void | DebugOn () const |
Command * | GetCommand (unsigned long tag) |
bool | GetDebug () const |
MetaDataDictionary & | GetMetaDataDictionary (void) |
const MetaDataDictionary & | GetMetaDataDictionary (void) 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 |
virtual void | Register () const ITK_OVERRIDE |
void | RemoveAllObservers () |
void | RemoveObserver (unsigned long tag) |
void | SetDebug (bool debugFlag) const |
void | SetMetaDataDictionary (const MetaDataDictionary &rhs) |
virtual void | SetReferenceCount (int) ITK_OVERRIDE |
virtual void | UnRegister () const ITK_OVERRIDE |
virtual void | SetObjectName (std::string _arg) |
virtual const std::string & | GetObjectName () const |
Public Member Functions inherited from itk::LightObject | |
virtual void | Delete () |
virtual int | GetReferenceCount () const |
itkCloneMacro (Self) | |
void | Print (std::ostream &os, Indent indent=0) const |
Static Public Member Functions | |
static Pointer | New () |
Static Public Member Functions inherited from itk::Object | |
static bool | GetGlobalWarningDisplay () |
static void | GlobalWarningDisplayOff () |
static void | GlobalWarningDisplayOn () |
static Pointer | New () |
static void | SetGlobalWarningDisplay (bool flag) |
Static Public Member Functions inherited from itk::LightObject | |
static void | BreakOnError () |
static Pointer | New () |
Static Public Attributes | |
static const unsigned int | ImageDimension = TOutputImage::ImageDimension |
Static Public Attributes inherited from itk::ImageToImageFilter< TInputImage, TOutputImage > | |
static const unsigned int | InputImageDimension = TInputImage::ImageDimension |
static const unsigned int | OutputImageDimension = TOutputImage::ImageDimension |
Static Public Attributes inherited from itk::ImageSource< TOutputImage > | |
static const unsigned int | OutputImageDimension = TOutputImage::ImageDimension |
Private Member Functions | |
BilateralImageFilter (const Self &) | |
void | operator= (const Self &) |
Private Attributes | |
bool | m_AutomaticKernelSize |
double | m_DomainMu |
ArrayType | m_DomainSigma |
double | m_DynamicRange |
double | m_DynamicRangeUsed |
unsigned int | m_FilterDimensionality |
KernelType | m_GaussianKernel |
unsigned long | m_NumberOfRangeGaussianSamples |
SizeType | m_Radius |
std::vector< double > | m_RangeGaussianTable |
double | m_RangeMu |
double | m_RangeSigma |
typedef FixedArray< double, itkGetStaticConstMacro(ImageDimension) > itk::BilateralImageFilter< TInputImage, TOutputImage >::ArrayType |
Typedef of double containers
Definition at line 112 of file itkBilateralImageFilter.h.
typedef SmartPointer< const Self > itk::BilateralImageFilter< TInputImage, TOutputImage >::ConstPointer |
Definition at line 83 of file itkBilateralImageFilter.h.
typedef Image< double, itkGetStaticConstMacro(ImageDimension) > itk::BilateralImageFilter< TInputImage, TOutputImage >::GaussianImageType |
Gaussian image type
Definition at line 129 of file itkBilateralImageFilter.h.
typedef TInputImage itk::BilateralImageFilter< TInputImage, TOutputImage >::InputImageType |
Image type information.
Definition at line 89 of file itkBilateralImageFilter.h.
typedef TInputImage::InternalPixelType itk::BilateralImageFilter< TInputImage, TOutputImage >::InputInternalPixelType |
Definition at line 104 of file itkBilateralImageFilter.h.
typedef TInputImage::PixelType itk::BilateralImageFilter< TInputImage, TOutputImage >::InputPixelType |
Definition at line 103 of file itkBilateralImageFilter.h.
typedef KernelType::ConstIterator itk::BilateralImageFilter< TInputImage, TOutputImage >::KernelConstIteratorType |
Definition at line 125 of file itkBilateralImageFilter.h.
typedef KernelType::Iterator itk::BilateralImageFilter< TInputImage, TOutputImage >::KernelIteratorType |
Kernel iterator.
Definition at line 124 of file itkBilateralImageFilter.h.
typedef Neighborhood< double, itkGetStaticConstMacro(ImageDimension) > itk::BilateralImageFilter< TInputImage, TOutputImage >::KernelType |
Kernel typedef.
Definition at line 119 of file itkBilateralImageFilter.h.
typedef ConstNeighborhoodIterator< TInputImage > itk::BilateralImageFilter< TInputImage, TOutputImage >::NeighborhoodIteratorType |
Neighborhood iterator types.
Definition at line 115 of file itkBilateralImageFilter.h.
typedef Superclass::OutputImageRegionType itk::BilateralImageFilter< TInputImage, TOutputImage >::OutputImageRegionType |
Superclass typedefs.
Definition at line 96 of file itkBilateralImageFilter.h.
typedef TOutputImage itk::BilateralImageFilter< TInputImage, TOutputImage >::OutputImageType |
Definition at line 93 of file itkBilateralImageFilter.h.
typedef TOutputImage::InternalPixelType itk::BilateralImageFilter< TInputImage, TOutputImage >::OutputInternalPixelType |
Definition at line 101 of file itkBilateralImageFilter.h.
typedef NumericTraits< OutputPixelType >::RealType itk::BilateralImageFilter< TInputImage, TOutputImage >::OutputPixelRealType |
Definition at line 102 of file itkBilateralImageFilter.h.
typedef TOutputImage::PixelType itk::BilateralImageFilter< TInputImage, TOutputImage >::OutputPixelType |
Extract some information from the image types. Dimensionality of the two images is assumed to be the same.
Definition at line 100 of file itkBilateralImageFilter.h.
typedef SmartPointer< Self > itk::BilateralImageFilter< TInputImage, TOutputImage >::Pointer |
Definition at line 82 of file itkBilateralImageFilter.h.
typedef BilateralImageFilter itk::BilateralImageFilter< TInputImage, TOutputImage >::Self |
Standard class typedefs.
Definition at line 80 of file itkBilateralImageFilter.h.
typedef KernelType::SizeType itk::BilateralImageFilter< TInputImage, TOutputImage >::SizeType |
Definition at line 120 of file itkBilateralImageFilter.h.
typedef KernelType::SizeValueType itk::BilateralImageFilter< TInputImage, TOutputImage >::SizeValueType |
Definition at line 121 of file itkBilateralImageFilter.h.
typedef ImageToImageFilter< TInputImage, TOutputImage > itk::BilateralImageFilter< TInputImage, TOutputImage >::Superclass |
Definition at line 81 of file itkBilateralImageFilter.h.
|
protected |
Constructor.
|
inlineprotectedvirtual |
Destructor.
Definition at line 187 of file itkBilateralImageFilter.h.
|
private |
|
virtual |
Control automatic kernel size determination. When automatic is "on", the kernel size is a function of the domain sigma. When automatic is "off", the kernel size is whatever is specified by the user.
|
virtual |
Control automatic kernel size determination. When automatic is "on", the kernel size is a function of the domain sigma. When automatic is "off", the kernel size is whatever is specified by the user.
|
protectedvirtual |
Do some setup before the ThreadedGenerateData
Reimplemented from itk::ImageSource< TOutputImage >.
|
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.
|
protectedvirtual |
BilateralImageFilter needs a larger input requested region than the output requested region (larger by the size of the domain Gaussian kernel). As such, BilateralImageFilter needs to provide an implementation for GenerateInputRequestedRegion() in order to inform the pipeline execution model.
Reimplemented from itk::ImageToImageFilter< TInputImage, TOutputImage >.
|
virtual |
Control automatic kernel size determination. When automatic is "on", the kernel size is a function of the domain sigma. When automatic is "off", the kernel size is whatever is specified by the user.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
virtual |
Run-time type information (and related methods).
Reimplemented from itk::ImageToImageFilter< TInputImage, TOutputImage >.
|
virtual |
Set/Get the number of samples in the approximation to the Gaussian used for the range smoothing. Samples are only generated in the range of [0, 4*m_RangeSigma]. Default is 100.
|
virtual |
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
static |
Method for creation through the object factory.
|
private |
|
protectedvirtual |
PrintSelf.
Reimplemented from itk::ImageToImageFilter< TInputImage, TOutputImage >.
|
virtual |
Control automatic kernel size determination. When automatic is "on", the kernel size is a function of the domain sigma. When automatic is "off", the kernel size is whatever is specified by the user.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
inline |
Convenience get/set methods for setting all domain parameters to the same values.
Definition at line 146 of file itkBilateralImageFilter.h.
References itk::FixedArray< TValue, VLength >::Fill(), and itk::BilateralImageFilter< TInputImage, TOutputImage >::m_DomainSigma.
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
virtual |
Set/Get the number of samples in the approximation to the Gaussian used for the range smoothing. Samples are only generated in the range of [0, 4*m_RangeSigma]. Default is 100.
void itk::BilateralImageFilter< TInputImage, TOutputImage >::SetRadius | ( | const SizeValueType | ) |
Set/Get the kernel radius, specified in pixels. This parameter is used only when AutomaticNeighborhoodSize is "off".
|
virtual |
|
virtual |
Standard get/set macros for filter parameters. DomainSigma is specified in the same units as the Image spacing. RangeSigma is specified in the units of intensity.
|
protectedvirtual |
Standard pipeline method. This filter is implemented as a multi-threaded filter.
Reimplemented from itk::ImageSource< TOutputImage >.
itk::BilateralImageFilter< TInputImage, TOutputImage >::typedef | ( | Concept::HasNumericTraits< OutputPixelType > | ) |
This class requires OutputHasNumericTraitsCheck in the form of ( Concept::HasNumericTraits< OutputPixelType > )
|
static |
Extract some information from the image types. Dimensionality of the two images is assumed to be the same.
Definition at line 109 of file itkBilateralImageFilter.h.
|
private |
Definition at line 231 of file itkBilateralImageFilter.h.
|
private |
Multiplier used to define statistical thresholds. Gaussians are only evaluated to m_DomainMu*m_DomainSigma or m_RangeMu*m_RangeSigma.
Definition at line 222 of file itkBilateralImageFilter.h.
|
private |
The standard deviation of the gaussian blurring kernel in each dimensional direction. Units match image spacing units.
Definition at line 218 of file itkBilateralImageFilter.h.
Referenced by itk::BilateralImageFilter< TInputImage, TOutputImage >::SetDomainSigma().
|
private |
Definition at line 235 of file itkBilateralImageFilter.h.
|
private |
Definition at line 236 of file itkBilateralImageFilter.h.
|
private |
Number of dimensions to process. Default is all dimensions
Definition at line 226 of file itkBilateralImageFilter.h.
|
private |
Gaussian kernel used for smoothing in the spatial domain
Definition at line 229 of file itkBilateralImageFilter.h.
|
private |
Variables for the lookup table of range gaussian values
Definition at line 234 of file itkBilateralImageFilter.h.
|
private |
Definition at line 230 of file itkBilateralImageFilter.h.
|
private |
Definition at line 237 of file itkBilateralImageFilter.h.
|
private |
Definition at line 223 of file itkBilateralImageFilter.h.
|
private |
The standard deviation of the gaussian blurring kernel in the image range. Units are intensity.
Definition at line 214 of file itkBilateralImageFilter.h.