STIR 6.4.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*/
22
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
33START_NAMESPACE_STIR
34
97template <typename elemT, typename potentialT>
98class GibbsPenalty : public GeneralisedPrior<DiscretisedDensity<3, elemT>>
99{
100private:
101 typedef GeneralisedPrior<DiscretisedDensity<3, elemT>> base_type;
102
103public:
106
108 GibbsPenalty(const bool only_2D, float penalization_factor);
109
111 double compute_value(const DiscretisedDensity<3, elemT>& current_image_estimate) override;
112
115 const DiscretisedDensity<3, elemT>& current_image_estimate) override;
116
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
128 const DiscretisedDensity<3, elemT>& current_estimate) const override;
129
132 const DiscretisedDensity<3, elemT>& current_estimate,
133 const DiscretisedDensity<3, elemT>& input) const override;
134
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
161protected:
168
171
174
176
181
183 std::string kappa_filename;
184
186 potentialT potential;
187
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
202END_NAMESPACE_STIR
203
205
206#endif
defines the stir::Array class for multi-dimensional (numeric) arrays
defines the stir::CartesianCoordinate3D<coordT> class
defines the stir::DiscretisedDensity class
Declaration of class stir::GeneralisedPrior.
Implementation of the stir::GibbsPenalty class.
This class defines multi-dimensional (numeric) arrays.
Definition Array.h:78
class BasicCoordinate<int num_dimensions, typename coordT> defines num_dimensions -dimensional coordi...
Definition BasicCoordinate.h:57
a templated class for 3-dimensional coordinates.
Definition CartesianCoordinate3D.h:53
This abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
bool post_processing() override
This will be called at the end of the parsing.
Definition GibbsPenalty.inl:67
CartesianCoordinate3D< int > image_max_indices
Definition GibbsPenalty.h:165
bool is_convex() const override
Return whether the prior is convex or not.
Definition GibbsPenalty.inl:170
CartesianCoordinate3D< int > image_dim
Definition GibbsPenalty.h:164
Succeeded set_up(shared_ptr< const DiscretisedDensity< 3, elemT > > const &target_sptr) override
Set up the prior for a target image. Must be called before use.
Definition GibbsPenalty.inl:120
void check(DiscretisedDensity< 3, elemT > const &current_image_estimate) const override
Check that the prior is ready to be used.
Definition GibbsPenalty.inl:144
PotentialT potential
Definition GibbsPenalty.h:186
GibbsPenalty(const bool only_2D, float penalization_factor)
Explicit Constructor with 2D/3D option and penalization factor.
Definition GibbsPenalty.inl:182
CartesianCoordinate3D< int > image_min_indices
Definition GibbsPenalty.h:166
shared_ptr< const DiscretisedDensity< 3, elemT > > get_kappa_sptr() const
get current kappa image
Definition GibbsPenalty.inl:242
void compute_default_weights(const CartesianCoordinate3D< float > &grid_spacing, bool only_2D)
Compute default weights for the prior.
Definition GibbsPenalty.inl:191
const Array< 3, float > & get_weights() const
Get the current weights array.
Definition GibbsPenalty.inl:222
void compute_Hessian(DiscretisedDensity< 3, elemT > &prior_Hessian_for_single_densel, const BasicCoordinate< 3, int > &coords, const DiscretisedDensity< 3, elemT > &current_image_estimate) const override
Compute the Hessian row of the prior at (coords).
Definition GibbsPenalty.inl:422
std::string kappa_filename
Definition GibbsPenalty.h:183
virtual std::string get_parsing_name() const
Getter method to retrieve the parsing name.
Definition GibbsPenalty.inl:46
virtual void set_kappa_sptr(const shared_ptr< const DiscretisedDensity< 3, elemT > > &)
Set the kappa image (spatially-varying penalty factors).
Definition GibbsPenalty.inl:250
void set_defaults() override
sets value for penalisation factor
Definition GibbsPenalty.inl:158
double compute_gradient_times_input(const DiscretisedDensity< 3, elemT > &input, const DiscretisedDensity< 3, elemT > &current_image_estimate) override
Compute the dot product of the prior gradient and an input image.
Definition GibbsPenalty.inl:365
bool only_2D
Definition GibbsPenalty.h:173
double compute_value(const DiscretisedDensity< 3, elemT > &current_image_estimate) override
Compute the value of the prior for the current image estimate.
Definition GibbsPenalty.inl:257
virtual void set_weights(const Array< 3, float > &)
Set the weights array for the prior.
Definition GibbsPenalty.inl:230
shared_ptr< const DiscretisedDensity< 3, elemT > > kappa_ptr
Definition GibbsPenalty.h:199
Array< 3, float > weights
Definition GibbsPenalty.h:170
std::string gradient_filename_prefix
Definition GibbsPenalty.h:180
void initialise_keymap() override
sets key for penalisation factor
Definition GibbsPenalty.inl:53
void compute_Hessian_diagonal(DiscretisedDensity< 3, elemT > &Hessian_diagonal, const DiscretisedDensity< 3, elemT > &current_estimate) const override
Compute the diagonal of the Hessian matrix.
Definition GibbsPenalty.inl:489
GibbsPenalty()
Default constructor.
Definition GibbsPenalty.inl:176
void accumulate_Hessian_times_input(DiscretisedDensity< 3, elemT > &output, const DiscretisedDensity< 3, elemT > &current_estimate, const DiscretisedDensity< 3, elemT > &input) const override
Accumulate Hessian times input image into output.
Definition GibbsPenalty.inl:544
void compute_gradient(DiscretisedDensity< 3, elemT > &prior_gradient, const DiscretisedDensity< 3, elemT > &current_image_estimate) override
Compute the gradient of the prior for the current image estimate.
Definition GibbsPenalty.inl:310
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...