8 #include <catch2/catch_all.hpp> 
   23 #include "tools_for_tests/directories.h" 
   34   extern std::unique_ptr<std::mt19937_64> 
mersenne;
 
   35   std::string 
const input = 
"cameraman256";
 
   41   auto const psi = sopt::linear_transform<Scalar>(wavelet, image.rows(), image.cols());
 
   42   size_t nmeasure = 
static_cast<size_t>(image.size() * 0.5);
 
   44   double constexpr snr = 30.0;
 
   45   std::shared_ptr<sopt::LinearTransform<Vector>> Phi =
 
   46       std::make_shared<sopt::LinearTransform<Vector>>(
 
   48   Vector y = (*Phi) * Vector::Map(image.data(), image.size());
 
   50   auto sigma = y.stableNorm() / std::sqrt(y.size()) * std::pow(10.0, -(snr / 20.0));
 
   55   std::unique_ptr<std::mt19937_64> *m = &
mersenne;
 
   56   std::function<std::shared_ptr<sopt::IterationState<Vector>>()> random_updater = [&image, m, 
sigma, nmeasure](){
 
   57     double constexpr snr = 30.0;
 
   58     std::shared_ptr<sopt::LinearTransform<Vector>> Phi =
 
   59       std::make_shared<sopt::LinearTransform<Vector>>(sopt::linear_transform<Scalar>(
sopt::Sampling(image.size(), nmeasure, **m)));
 
   60     Vector y = (*Phi) * Vector::Map(image.data(), image.size());
 
   62     std::normal_distribution<> gaussian_dist(0, 
sigma);
 
   65     return std::make_shared<sopt::IterationState<Vector>>(y, Phi);
 
   72     .regulariser_strength(regulariser_strength)  
 
   73     .relative_variation(1e-3)
 
   74     .residual_tolerance(0)
 
   79   auto gp = std::make_shared<sopt::algorithm::L1GProximal<Scalar>>(
false);
 
   80   gp->l1_proximal_tolerance(1e-4)
 
   82     .l1_proximal_itermax(50)
 
   83     .l1_proximal_positivity_constraint(
true)
 
   84     .l1_proximal_real_constraint(
true)
 
   90   auto const diagnostic = fb();
 
   92   CHECK(diagnostic.good);
 
   93   CHECK(diagnostic.niters < 500);
 
   99   Eigen::Map<const Eigen::VectorXd> flat_image(image.data(), image.size());
 
  100   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))
 
Wavelet factory(const std::string &name, t_uint nlevels)
Creates a wavelet transform object.
 
int t_int
Root of the type hierarchy for signed integers.
 
double t_real
Root of the type hierarchy for real numbers.
 
Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > Image
A 2-dimensional list of elements of given type.
 
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