8 #include <catch2/catch_all.hpp>
24 #include "tools_for_tests/directories.h"
41 extern std::unique_ptr<std::mt19937_64>
mersenne;
42 std::string
const input =
"cameraman256";
51 Vector const y0 = sampling * Vector::Map(image.data(), image.size());
52 auto constexpr snr = 30.0;
53 auto const sigma = y0.stableNorm() / std::sqrt(y0.size()) * std::pow(10.0, -(snr / 20.0));
54 auto const epsilon = std::sqrt(nmeasure + 2 * std::sqrt(y0.size())) *
sigma;
59 std::shared_ptr<sopt::ONNXDifferentiableFunc<Scalar>> diff_function = std::make_shared<sopt::ONNXDifferentiableFunc<Scalar>>(prior_path, prior_gradient_path,
sigma, mu, lambda, sampling);
61 std::normal_distribution<> gaussian_dist(0,
sigma);
65 Eigen::VectorXd dirty_image = sampling.
adjoint() * y;
66 Eigen::VectorXd init_res = ((sampling * dirty_image) - y);
67 auto init_res_norm = init_res.array().abs().sum();
75 "Convergence function");
76 std::function<bool(
const Vector &,
const Vector &)> convergence = [&scalvar](
const Vector &x,
const Vector &residual)
78 return scalvar(x.array());
85 .regulariser_strength(regulariser_strength)
86 .relative_variation(1e-3)
87 .residual_tolerance(0)
90 .is_converged(convergence);
93 fb.f_function(diff_function);
96 auto non_diff_func = std::make_shared<sopt::algorithm::RealIndicator<Scalar>>();
99 fb.g_function(non_diff_func);
101 auto const diagnostic = fb();
113 Eigen::Map<const Eigen::VectorXd> flat_image(image.data(), image.size());
114 auto mse = (flat_image - diagnostic.x).array().square().sum() / image.size();
An operator that samples a set of measurements.
std::unique_ptr< std::mt19937_64 > mersenne(new std::mt19937_64(0))
#define SOPT_HIGH_LOG(...)
High priority message.
int t_int
Root of the type hierarchy for signed integers.
double t_real
Root of the type hierarchy for real numbers.
size_t t_uint
Root of the type hierarchy for unsigned integers.
Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > Image
A 2-dimensional list of elements of given type.
real_type< T >::type epsilon(sopt::LinearTransform< Vector< T >> const &sampling, sopt::Image< T > const &image)
Eigen::Matrix< T, Eigen::Dynamic, 1 > Vector
A vector of a given type.
real_type< T >::type sigma(sopt::LinearTransform< Vector< T >> const &sampling, sopt::Image< T > const &image)
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > Matrix
A matrix of a given type.
sopt::Vector< Scalar > Vector
sopt::Matrix< Scalar > Matrix
sopt::Image< Scalar > Image