SimpleITK
|
The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum. More...
#include <sitkWienerDeconvolutionImageFilter.h>
The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum.
The Wiener filter aims to minimize noise enhancement induced by frequencies with low signal-to-noise ratio. The Wiener filter kernel is defined in the frequency domain as \(W(\omega) = H^*(\omega) / (|H(\omega)|^2 + (1 / SNR(\omega)))\) where \(H(\omega)\) is the Fourier transform of the blurring kernel with which the original image was convolved and the signal-to-noise ratio \(SNR(\omega)\) . \(SNR(\omega)\) is defined by \(P_f(\omega) / P_n(\omega)\) where \(P_f(\omega)\) is the power spectral density of the uncorrupted signal and \(P_n(\omega)\) is the power spectral density of the noise. When applied to the input blurred image, this filter produces an estimate \(\hat{f}(x)\) of the true underlying signal \(f(x)\) that minimizes the expected error between \(\hat{f}(x)\) and \(f(x)\) .
This filter requires two inputs, the image to be deconvolved and the blurring kernel. These two inputs can be set using the methods SetInput() and SetKernelImage(), respectively.
The power spectral densities of the signal and noise are typically unavailable for a given problem. In particular, \(P_f(\omega)\) cannot be computed from \(f(x)\) because this unknown signal is precisely the signal that this filter aims to recover. Nevertheless, it is common for the noise to have a power spectral density that is flat or decreasing significantly more slowly than the power spectral density of a typical image as the frequency \(\omega\) increases. Hence, \(P_n(\omega)\) can typically be approximated with a constant, and this filter makes this assumption (see the NoiseVariance member variable). \(P_f(\omega)\) , on the other hand, will vary with input. This filter computes the power spectral density of the input blurred image, subtracts the power spectral density of the noise, and uses the result as the estimate of \(P_f(\omega)\) .
For further information on the Wiener deconvolution filter, please see "Digital Signal Processing" by Kenneth R. Castleman, Prentice Hall, 1995
Definition at line 55 of file sitkWienerDeconvolutionImageFilter.h.
Public Types | |
enum | BoundaryConditionType { ZERO_PAD, ZERO_FLUX_NEUMANN_PAD, PERIODIC_PAD } |
enum | OutputRegionModeType { SAME, VALID } |
using | PixelIDTypeList = BasicPixelIDTypeList |
using | Self = WienerDeconvolutionImageFilter |
Public Types inherited from itk::simple::ImageFilter | |
using | Self = ImageFilter |
Public Types inherited from itk::simple::ProcessObject | |
using | Self = ProcessObject |
Public Member Functions | |
Image | Execute (const Image &image1, const Image &image2) |
BoundaryConditionType | GetBoundaryCondition () const |
std::string | GetName () const |
double | GetNoiseVariance () const |
bool | GetNormalize () const |
OutputRegionModeType | GetOutputRegionMode () const |
Self & | NormalizeOff () |
Self & | NormalizeOn () |
Self & | SetBoundaryCondition (BoundaryConditionType BoundaryCondition) |
Self & | SetNoiseVariance (double NoiseVariance) |
Self & | SetNormalize (bool Normalize) |
Self & | SetOutputRegionMode (OutputRegionModeType OutputRegionMode) |
std::string | ToString () const |
WienerDeconvolutionImageFilter () | |
virtual | ~WienerDeconvolutionImageFilter () |
Public Member Functions inherited from itk::simple::ImageFilter | |
ImageFilter () | |
virtual | ~ImageFilter ()=0 |
Public Member Functions inherited from itk::simple::ProcessObject | |
virtual void | Abort () |
virtual int | AddCommand (itk::simple::EventEnum event, const std::function< void()> &func) |
Directly add a callback to observe an event. More... | |
virtual int | AddCommand (itk::simple::EventEnum event, itk::simple::Command &cmd) |
Add a Command Object to observer the event. More... | |
virtual float | GetProgress () const |
An Active Measurement of the progress of execution. More... | |
virtual bool | HasCommand (itk::simple::EventEnum event) const |
Query of this object has any registered commands for event. More... | |
ProcessObject () | |
virtual void | RemoveAllCommands () |
Remove all registered commands. More... | |
virtual | ~ProcessObject () |
virtual void | DebugOn () |
virtual void | DebugOff () |
virtual bool | GetDebug () const |
virtual void | SetDebug (bool debugFlag) |
virtual void | SetNumberOfThreads (unsigned int n) |
virtual unsigned int | GetNumberOfThreads () const |
virtual void | SetNumberOfWorkUnits (unsigned int n) |
virtual unsigned int | GetNumberOfWorkUnits () const |
Private Types | |
using | MemberFunctionType = Image(Self::*)(const Image &image1, const Image &image2) |
Private Member Functions | |
template<class TImageType > | |
Image | ExecuteInternal (const Image &image1, const Image &image2) |
Private Attributes | |
BoundaryConditionType | m_BoundaryCondition {itk::simple::WienerDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD} |
std::unique_ptr< detail::MemberFunctionFactory< MemberFunctionType > > | m_MemberFactory |
double | m_NoiseVariance {0.0} |
bool | m_Normalize {false} |
OutputRegionModeType | m_OutputRegionMode {itk::simple::WienerDeconvolutionImageFilter::SAME} |
Friends | |
struct | detail::MemberFunctionAddressor< MemberFunctionType > |
Additional Inherited Members | |
Static Public Member Functions inherited from itk::simple::ProcessObject | |
static bool | GetGlobalDefaultDebug () |
static void | GlobalDefaultDebugOff () |
static void | GlobalDefaultDebugOn () |
static void | SetGlobalDefaultDebug (bool debugFlag) |
static void | GlobalWarningDisplayOn () |
static void | GlobalWarningDisplayOff () |
static void | SetGlobalWarningDisplay (bool flag) |
static bool | GetGlobalWarningDisplay () |
static double | GetGlobalDefaultCoordinateTolerance () |
Access the global tolerance to determine congruent spaces. More... | |
static void | SetGlobalDefaultCoordinateTolerance (double) |
Access the global tolerance to determine congruent spaces. More... | |
static double | GetGlobalDefaultDirectionTolerance () |
Access the global tolerance to determine congruent spaces. More... | |
static void | SetGlobalDefaultDirectionTolerance (double) |
Access the global tolerance to determine congruent spaces. More... | |
static bool | SetGlobalDefaultThreader (const std::string &threader) |
Set/Get the default threader used for process objects. More... | |
static std::string | GetGlobalDefaultThreader () |
Set/Get the default threader used for process objects. More... | |
static void | SetGlobalDefaultNumberOfThreads (unsigned int n) |
static unsigned int | GetGlobalDefaultNumberOfThreads () |
Set/Get the default threader used for process objects. More... | |
Protected Member Functions inherited from itk::simple::ImageFilter | |
void | CheckImageMatchingDimension (const Image &image1, const Image &image2, const std::string &image2Name) |
void | CheckImageMatchingPixelType (const Image &image1, const Image &image2, const std::string &image2Name) |
void | CheckImageMatchingSize (const Image &image1, const Image &image2, const std::string &image2Name) |
Protected Member Functions inherited from itk::simple::ProcessObject | |
virtual unsigned long | AddITKObserver (const itk::EventObject &, itk::Command *) |
virtual itk::ProcessObject * | GetActiveProcess () |
virtual void | OnActiveProcessDelete () |
virtual void | onCommandDelete (const itk::simple::Command *cmd) noexcept |
virtual void | PreUpdate (itk::ProcessObject *p) |
virtual void | RemoveITKObserver (EventCommand &e) |
Protected Member Functions inherited from itk::simple::NonCopyable | |
NonCopyable ()=default | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
Static Protected Member Functions inherited from itk::simple::ImageFilter | |
template<class TImageType > | |
static void | FixNonZeroIndex (TImageType *img) |
Static Protected Member Functions inherited from itk::simple::ProcessObject | |
template<class TImageType > | |
static TImageType::ConstPointer | CastImageToITK (const Image &img) |
template<class TPixelType , unsigned int VImageDimension, unsigned int VLength, template< typename, unsigned int > class TVector> | |
static Image | CastITKToImage (itk::Image< TVector< TPixelType, VLength >, VImageDimension > *img) |
template<unsigned int VImageDimension, unsigned int VLength, template< unsigned int > class TVector> | |
static Image | CastITKToImage (itk::Image< TVector< VLength >, VImageDimension > *img) |
template<class TImageType > | |
static Image | CastITKToImage (TImageType *img) |
static const itk::EventObject & | GetITKEventObject (EventEnum e) |
template<typename T > | |
static std::ostream & | ToStringHelper (std::ostream &os, const T &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const char &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const signed char &v) |
static std::ostream & | ToStringHelper (std::ostream &os, const unsigned char &v) |
|
private |
Setup for member function dispatching
Definition at line 129 of file sitkWienerDeconvolutionImageFilter.h.
Define the pixels types supported by this filter
Definition at line 67 of file sitkWienerDeconvolutionImageFilter.h.
Definition at line 57 of file sitkWienerDeconvolutionImageFilter.h.
Enumerator | |
---|---|
ZERO_PAD | |
ZERO_FLUX_NEUMANN_PAD | |
PERIODIC_PAD |
Definition at line 94 of file sitkWienerDeconvolutionImageFilter.h.
Enumerator | |
---|---|
SAME | |
VALID |
Definition at line 104 of file sitkWienerDeconvolutionImageFilter.h.
|
virtual |
Destructor
itk::simple::WienerDeconvolutionImageFilter::WienerDeconvolutionImageFilter | ( | ) |
Default Constructor that takes no arguments and initializes default parameters
Image itk::simple::WienerDeconvolutionImageFilter::Execute | ( | const Image & | image1, |
const Image & | image2 | ||
) |
Execute the filter on the input images
|
private |
|
inline |
Definition at line 102 of file sitkWienerDeconvolutionImageFilter.h.
|
inlinevirtual |
Name of this class
Implements itk::simple::ProcessObject.
Definition at line 115 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Set/get the variance of the zero-mean Gaussian white noise assumed to be added to the input.
Definition at line 78 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Definition at line 92 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Definition at line 112 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Definition at line 88 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Set the value of Normalize to true or false respectfully.
Definition at line 87 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Definition at line 98 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Set/get the variance of the zero-mean Gaussian white noise assumed to be added to the input.
Definition at line 73 of file sitkWienerDeconvolutionImageFilter.h.
|
inline |
Normalize the output image by the sum of the kernel components
Definition at line 84 of file sitkWienerDeconvolutionImageFilter.h.
References itk::simple::Normalize().
|
inline |
Definition at line 108 of file sitkWienerDeconvolutionImageFilter.h.
|
virtual |
Print ourselves out
Reimplemented from itk::simple::ProcessObject.
|
friend |
Definition at line 133 of file sitkWienerDeconvolutionImageFilter.h.
|
private |
Definition at line 143 of file sitkWienerDeconvolutionImageFilter.h.
|
private |
Definition at line 135 of file sitkWienerDeconvolutionImageFilter.h.
|
private |
Definition at line 138 of file sitkWienerDeconvolutionImageFilter.h.
|
private |
Definition at line 141 of file sitkWienerDeconvolutionImageFilter.h.
|
private |
Definition at line 145 of file sitkWienerDeconvolutionImageFilter.h.