STIR  6.3.0
GibbsPenalty.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2025, University College London
3  Copyright (C) 2025, University of Milano-Bicocca
4  Copyright (C) 2000- 2011, Hammersmith Imanet Ltd
5 
6  This file is part of STIR.
7 
8  SPDX-License-Identifier: Apache-2.0
9 
10  See STIR/LICENSE.txt for details.
11 */
23 #ifndef __stir_recon_buildblock_GibbsPenalty_H__
24 #define __stir_recon_buildblock_GibbsPenalty_H__
25 
28 #include "stir/Array.h"
30 #include "stir/shared_ptr.h"
31 #include <string>
32 
33 START_NAMESPACE_STIR
34 
97 template <typename elemT, typename potentialT>
98 class GibbsPenalty : public GeneralisedPrior<DiscretisedDensity<3, elemT>>
99 {
100 private:
102 
103 public:
105  GibbsPenalty();
106 
108  GibbsPenalty(const bool only_2D, float penalization_factor);
109 
111  double compute_value(const DiscretisedDensity<3, elemT>& current_image_estimate) override;
112 
114  void compute_gradient(DiscretisedDensity<3, elemT>& prior_gradient,
115  const DiscretisedDensity<3, elemT>& current_image_estimate) override;
116 
118  double compute_gradient_times_input(const DiscretisedDensity<3, elemT>& input,
119  const DiscretisedDensity<3, elemT>& current_image_estimate) override;
120 
122  void compute_Hessian(DiscretisedDensity<3, elemT>& prior_Hessian_for_single_densel,
123  const BasicCoordinate<3, int>& coords,
124  const DiscretisedDensity<3, elemT>& current_image_estimate) const override;
125 
127  void compute_Hessian_diagonal(DiscretisedDensity<3, elemT>& Hessian_diagonal,
128  const DiscretisedDensity<3, elemT>& current_estimate) const override;
129 
131  void accumulate_Hessian_times_input(DiscretisedDensity<3, elemT>& output,
132  const DiscretisedDensity<3, elemT>& current_estimate,
133  const DiscretisedDensity<3, elemT>& input) const override;
134 
136  const Array<3, float>& get_weights() const;
137 
139  virtual void set_weights(const Array<3, float>&);
140 
142 
146  shared_ptr<const DiscretisedDensity<3, elemT>> get_kappa_sptr() const;
147 
149  virtual void set_kappa_sptr(const shared_ptr<const DiscretisedDensity<3, elemT>>&);
150 
152  Succeeded set_up(shared_ptr<const DiscretisedDensity<3, elemT>> const& target_sptr) override;
153 
155 
156  virtual std::string get_parsing_name() const;
157 
159  bool is_convex() const override;
160 
161 protected:
167 
171 
173  bool only_2D;
174 
176 
181 
183  std::string kappa_filename;
184 
186  potentialT potential;
187 
189  void compute_default_weights(const CartesianCoordinate3D<float>& grid_spacing, bool only_2D);
190 
192  void check(DiscretisedDensity<3, elemT> const& current_image_estimate) const override;
193 
194  void set_defaults() override;
195  void initialise_keymap() override;
196  bool post_processing() override;
197 
199  shared_ptr<const DiscretisedDensity<3, elemT>> kappa_ptr;
200 };
201 
202 END_NAMESPACE_STIR
203 
205 
206 #endif
std::string kappa_filename
Filename for the image that will be read by post_processing()
Definition: GibbsPenalty.h:183
Array< 3, float > weights
The weights for the neighbourhood.
Definition: GibbsPenalty.h:170
shared_ptr< const DiscretisedDensity< 3, elemT > > kappa_ptr
The kappa image (spatially-varying penalty factors).
Definition: GibbsPenalty.h:199
Implementation of the stir::GibbsPenalty class.
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...
std::string gradient_filename_prefix
filename prefix for outputing the gradient whenever compute_gradient() is called. ...
Definition: GibbsPenalty.h:180
defines the stir::DiscretisedDensity class
defines the stir::Array class for multi-dimensional (numeric) arrays
A base class for &#39;generalised&#39; priors, i.e. priors for which at least a &#39;gradient&#39; is defined...
Definition: GeneralisedPrior.h:42
CartesianCoordinate3D< int > image_max_indices
Maximum image indices.
Definition: GibbsPenalty.h:165
bool only_2D
can be set during parsing to restrict the weights to the 2D case
Definition: GibbsPenalty.h:173
A base class for Gibbs type penalties in the GeneralisedPrior hierarchy.
Definition: GibbsPenalty.h:98
CartesianCoordinate3D< int > image_dim
Image dimensions.
Definition: GibbsPenalty.h:164
CartesianCoordinate3D< int > image_min_indices
Minimum image indices.
Definition: GibbsPenalty.h:166
Declaration of class stir::GeneralisedPrior.
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition: Succeeded.h:43
defines the stir::CartesianCoordinate3D<coordT> class
potentialT potential
Gibbs Potential Function.
Definition: GibbsPenalty.h:186
This abstract class is the basis for all image representations.
Definition: DDSR2DReconstruction.h:44