template<typename TInputImage, typename TKernelImage = TInputImage, typename TOutputImage = TInputImage, typename TInternalPrecision = double>
class itk::LandweberDeconvolutionImageFilter< TInputImage, TKernelImage, TOutputImage, TInternalPrecision >
Deconvolve an image using the Landweber deconvolution algorithm.
This filter implements the Landweber deconvolution algorithm as defined in Bertero M and Boccacci P, "Introduction to Inverse
Problems in Imaging", 1998. The algorithm assumes that the input image has been formed by a linear shift-invariant system with a known kernel.
The Landweber algorithm converges to a solution that minimizes the sum of squared errors \(||f \otimes h - g||\) where \(f\) is the estimate of the unblurred image, \(\otimes\) is the convolution operator, \(h\) is the blurring kernel, and \(g\) is the blurred input image. As such, it is best suited for images that have zero-mean Gaussian white noise.
This is the base implementation of the Landweber algorithm. It may produce results with negative values. For a version of this algorithm that enforces a positivity constraint on each intermediate solution, see ProjectedLandweberDeconvolutionImageFilter.
This code was adapted from the Insight Journal contribution:
"Deconvolution: infrastructure and reference algorithms" by Gaetan Lehmann https://doi.org/10.54294/tvgfv1
- Author
- Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France
-
Cory Quammen, The University of North Carolina at Chapel Hill
- See also
- IterativeDeconvolutionImageFilter
-
RichardsonLucyDeconvolutionImageFilter
-
ProjectedLandweberDeconvolutionImageFilter
Definition at line 99 of file itkLandweberDeconvolutionImageFilter.h.
|
using | ConstPointer = SmartPointer< const Self > |
|
using | InputImageType = TInputImage |
|
using | KernelImageType = TKernelImage |
|
using | OutputImageType = TOutputImage |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = LandweberDeconvolutionImageFilter |
|
using | Superclass = IterativeDeconvolutionImageFilter< TInputImage, TKernelImage, TOutputImage, TInternalPrecision > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | InputImageType = TInputImage |
|
using | KernelImageType = TKernelImage |
|
using | OutputImageType = TOutputImage |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = IterativeDeconvolutionImageFilter |
|
using | Superclass = FFTConvolutionImageFilter< TInputImage, TKernelImage, TOutputImage, TInternalPrecision > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | InputImageType = TInputImage |
|
using | InputIndexType = typename InputImageType::IndexType |
|
using | InputPixelType = typename InputImageType::PixelType |
|
using | InputRegionType = typename InputImageType::RegionType |
|
using | InputSizeType = typename InputImageType::SizeType |
|
using | InternalComplexImagePointerType = typename InternalComplexImageType::Pointer |
|
using | InternalComplexImageType = Image< InternalComplexType, TInputImage::ImageDimension > |
|
using | InternalComplexType = std::complex< TInternalPrecision > |
|
using | InternalImagePointerType = typename InternalImageType::Pointer |
|
using | InternalImageType = Image< TInternalPrecision, TInputImage::ImageDimension > |
|
using | InternalIndexType = typename InternalImageType::IndexType |
|
using | InternalRegionType = typename InternalImageType::RegionType |
|
using | InternalSizeType = typename InternalImageType::SizeType |
|
using | KernelImageType = TKernelImage |
|
using | KernelIndexType = typename KernelImageType::IndexType |
|
using | KernelPixelType = typename KernelImageType::PixelType |
|
using | KernelRegionType = typename KernelImageType::RegionType |
|
using | KernelSizeType = typename KernelImageType::SizeType |
|
using | OutputImageType = TOutputImage |
|
using | OutputIndexType = typename OutputImageType::IndexType |
|
using | OutputPixelType = typename OutputImageType::PixelType |
|
using | OutputRegionType = typename OutputImageType::RegionType |
|
using | OutputSizeType = typename OutputImageType::SizeType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = FFTConvolutionImageFilter |
|
using | SizeValueType = typename InputSizeType::SizeValueType |
|
using | Superclass = ConvolutionImageFilterBase< TInputImage, TKernelImage, TOutputImage > |
|
using | BoundaryConditionType = ImageBoundaryCondition< TInputImage > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DefaultBoundaryConditionType = ZeroFluxNeumannBoundaryCondition< TInputImage > |
|
using | InputImageType = TInputImage |
|
using | InputIndexType = typename InputImageType::IndexType |
|
using | InputPixelType = typename InputImageType::PixelType |
|
using | InputRegionType = typename InputImageType::RegionType |
|
using | InputSizeType = typename InputImageType::SizeType |
|
using | KernelImageType = TKernelImage |
|
using | KernelIndexType = typename KernelImageType::IndexType |
|
using | KernelPixelType = typename KernelImageType::PixelType |
|
using | KernelRegionType = typename KernelImageType::RegionType |
|
using | KernelSizeType = typename KernelImageType::SizeType |
|
using | OutputImageType = TOutputImage |
|
using | OutputIndexType = typename OutputImageType::IndexType |
|
using | OutputPixelType = typename OutputImageType::PixelType |
|
using | OutputRegionModeEnum = ConvolutionImageFilterBaseEnums::ConvolutionImageFilterOutputRegion |
|
using | OutputRegionType = typename OutputImageType::RegionType |
|
using | OutputSizeType = typename OutputImageType::SizeType |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ConvolutionImageFilterBase |
|
using | SizeValueType = typename InputSizeType::SizeValueType |
|
using | Superclass = ImageToImageFilter< TInputImage, TOutputImage > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | InputImageConstPointer = typename InputImageType::ConstPointer |
|
using | InputImagePixelType = typename InputImageType::PixelType |
|
using | InputImagePointer = typename InputImageType::Pointer |
|
using | InputImageRegionType = typename InputImageType::RegionType |
|
using | InputImageType = TInputImage |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ImageToImageFilter |
|
using | Superclass = ImageSource< TOutputImage > |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DataObjectIdentifierType = Superclass::DataObjectIdentifierType |
|
using | DataObjectPointer = DataObject::Pointer |
|
using | DataObjectPointerArraySizeType = Superclass::DataObjectPointerArraySizeType |
|
using | OutputImagePixelType = typename OutputImageType::PixelType |
|
using | OutputImagePointer = typename OutputImageType::Pointer |
|
using | OutputImageRegionType = typename OutputImageType::RegionType |
|
using | OutputImageType = TOutputImage |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ImageSource |
|
using | Superclass = ProcessObject |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | DataObjectIdentifierType = DataObject::DataObjectIdentifierType |
|
using | DataObjectPointer = DataObject::Pointer |
|
using | DataObjectPointerArray = std::vector< DataObjectPointer > |
|
using | DataObjectPointerArraySizeType = DataObjectPointerArray::size_type |
|
using | MultiThreaderType = MultiThreaderBase |
|
using | NameArray = std::vector< DataObjectIdentifierType > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = ProcessObject |
|
using | Superclass = Object |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = Object |
|
using | Superclass = LightObject |
|
using | ConstPointer = SmartPointer< const Self > |
|
using | Pointer = SmartPointer< Self > |
|
using | Self = LightObject |
|
|
void | Finish (ProgressAccumulator *progress, float progressWeight) override |
|
void | Initialize (ProgressAccumulator *progress, float progressWeight, float iterationProgressWeight) override |
|
void | Iteration (ProgressAccumulator *progress, float iterationProgressWeight) override |
|
| LandweberDeconvolutionImageFilter () |
|
void | PrintSelf (std::ostream &os, Indent indent) const override |
|
| ~LandweberDeconvolutionImageFilter () override |
|
void | GenerateData () override |
|
void | GenerateInputRequestedRegion () override |
|
| IterativeDeconvolutionImageFilter () |
|
| ~IterativeDeconvolutionImageFilter () override |
|
void | CropOutput (InternalImageType *paddedOutput, ProgressAccumulator *progress, float progressWeight) |
|
| FFTConvolutionImageFilter () |
|
InternalSizeType | GetFFTPadSize () const |
|
KernelSizeType | GetKernelRadius () const |
|
bool | GetXDimensionIsOdd () const |
|
void | PadInput (const InputImageType *input, InternalImagePointerType &paddedInput, ProgressAccumulator *progress, float progressWeight) |
|
void | PrepareInput (const InputImageType *input, InternalComplexImagePointerType &preparedInput, ProgressAccumulator *progress, float progressWeight) |
|
void | PrepareInputs (const InputImageType *input, const KernelImageType *kernel, InternalComplexImagePointerType &preparedInput, InternalComplexImagePointerType &preparedKernel, ProgressAccumulator *progress, float progressWeight) |
|
void | PrepareKernel (const KernelImageType *kernel, InternalComplexImagePointerType &preparedKernel, ProgressAccumulator *progress, float progressWeight) |
|
void | ProduceOutput (InternalComplexImageType *paddedOutput, ProgressAccumulator *progress, float progressWeight) |
|
void | TransformPaddedInput (const InternalImageType *paddedInput, InternalComplexImagePointerType &transformedInput, ProgressAccumulator *progress, float progressWeight) |
|
| ~FFTConvolutionImageFilter () override=default |
|
| ConvolutionImageFilterBase () |
|
void | GenerateOutputInformation () override |
|
OutputRegionType | GetValidRegion () const |
|
void | VerifyInputInformation () const override |
|
| ~ConvolutionImageFilterBase () override=default |
|
virtual void | CallCopyInputRegionToOutputRegion (OutputImageRegionType &destRegion, const InputImageRegionType &srcRegion) |
|
virtual void | CallCopyOutputRegionToInputRegion (InputImageRegionType &destRegion, const OutputImageRegionType &srcRegion) |
|
| ImageToImageFilter () |
|
| ~ImageToImageFilter () override=default |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | AfterThreadedGenerateData () |
|
virtual void | AllocateOutputs () |
|
virtual void | BeforeThreadedGenerateData () |
|
void | ClassicMultiThread (ThreadFunctionType callbackFunction) |
|
virtual const ImageRegionSplitterBase * | GetImageRegionSplitter () const |
|
| ImageSource () |
|
virtual unsigned int | SplitRequestedRegion (unsigned int i, unsigned int pieces, OutputImageRegionType &splitRegion) |
|
| ~ImageSource () override=default |
|
virtual void | ThreadedGenerateData (const OutputImageRegionType ®ion, ThreadIdType threadId) |
|
virtual void | DynamicThreadedGenerateData (const OutputImageRegionType &outputRegionForThread) |
|
virtual bool | GetDynamicMultiThreading () const |
|
virtual void | SetDynamicMultiThreading (bool _arg) |
|
virtual void | DynamicMultiThreadingOn () |
|
virtual void | AddInput (DataObject *input) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &) |
|
void | AddOptionalInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | AddOutput (DataObject *output) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &) |
|
bool | AddRequiredInputName (const DataObjectIdentifierType &, DataObjectPointerArraySizeType idx) |
|
virtual void | CacheInputReleaseDataFlags () |
|
virtual void | GenerateOutputRequestedRegion (DataObject *output) |
|
DataObject * | GetInput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetInput (const DataObjectIdentifierType &key) const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredInputs () const |
|
virtual const DataObjectPointerArraySizeType & | GetNumberOfRequiredOutputs () const |
|
bool | IsIndexedInputName (const DataObjectIdentifierType &) const |
|
bool | IsIndexedOutputName (const DataObjectIdentifierType &) const |
|
bool | IsRequiredInputName (const DataObjectIdentifierType &) const |
|
DataObjectPointerArraySizeType | MakeIndexFromInputName (const DataObjectIdentifierType &name) const |
|
DataObjectPointerArraySizeType | MakeIndexFromOutputName (const DataObjectIdentifierType &name) const |
|
DataObjectIdentifierType | MakeNameFromInputIndex (DataObjectPointerArraySizeType idx) const |
|
DataObjectIdentifierType | MakeNameFromOutputIndex (DataObjectPointerArraySizeType idx) const |
|
| ProcessObject () |
|
virtual void | PropagateResetPipeline () |
|
virtual void | PushBackInput (const DataObject *input) |
|
virtual void | PushFrontInput (const DataObject *input) |
|
virtual void | ReleaseInputs () |
|
virtual void | RemoveInput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveInput (DataObjectPointerArraySizeType) |
|
virtual void | RemoveOutput (const DataObjectIdentifierType &key) |
|
virtual void | RemoveOutput (DataObjectPointerArraySizeType idx) |
|
bool | RemoveRequiredInputName (const DataObjectIdentifierType &) |
|
virtual void | RestoreInputReleaseDataFlags () |
|
virtual void | SetInput (const DataObjectIdentifierType &key, DataObject *input) |
|
virtual void | SetNthInput (DataObjectPointerArraySizeType idx, DataObject *input) |
|
virtual void | SetNthOutput (DataObjectPointerArraySizeType idx, DataObject *output) |
|
void | SetNumberOfIndexedInputs (DataObjectPointerArraySizeType num) |
|
void | SetNumberOfIndexedOutputs (DataObjectPointerArraySizeType num) |
|
virtual void | SetNumberOfRequiredInputs (DataObjectPointerArraySizeType) |
|
virtual void | SetNumberOfRequiredOutputs (DataObjectPointerArraySizeType _arg) |
|
virtual void | SetOutput (const DataObjectIdentifierType &name, DataObject *output) |
|
virtual void | SetPrimaryInput (DataObject *object) |
|
virtual void | SetPrimaryOutput (DataObject *object) |
|
void | SetRequiredInputNames (const NameArray &) |
|
virtual void | VerifyPreconditions () const |
|
| ~ProcessObject () override |
|
DataObject * | GetInput (DataObjectPointerArraySizeType idx) |
|
const DataObject * | GetInput (DataObjectPointerArraySizeType idx) const |
|
DataObject * | GetPrimaryInput () |
|
const DataObject * | GetPrimaryInput () const |
|
virtual void | SetPrimaryInputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryInputName () const |
|
DataObject * | GetOutput (const DataObjectIdentifierType &key) |
|
const DataObject * | GetOutput (const DataObjectIdentifierType &key) const |
|
virtual void | SetPrimaryOutputName (const DataObjectIdentifierType &key) |
|
virtual const char * | GetPrimaryOutputName () const |
|
DataObject * | GetOutput (DataObjectPointerArraySizeType i) |
|
const DataObject * | GetOutput (DataObjectPointerArraySizeType i) const |
|
DataObject * | GetPrimaryOutput () |
|
const DataObject * | GetPrimaryOutput () const |
|
virtual bool | GetThreaderUpdateProgress () const |
|
virtual void | ThreaderUpdateProgressOn () |
|
virtual void | SetThreaderUpdateProgress (bool arg) |
|
| Object () |
|
bool | PrintObservers (std::ostream &os, Indent indent) const |
|
virtual void | SetTimeStamp (const TimeStamp &timeStamp) |
|
| ~Object () override |
|
virtual LightObject::Pointer | InternalClone () const |
|
| LightObject () |
|
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
|
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
|
virtual | ~LightObject () |
|