DGtal 1.3.0
Loading...
Searching...
No Matches
testShroudsRegularization.cpp
Go to the documentation of this file.
1
30#include <iostream>
31#include "DGtal/base/Common.h"
32#include "ConfigTest.h"
33#include "DGtalCatch.h"
34#include "DGtal/helpers/StdDefs.h"
35#include "DGtal/helpers/Shortcuts.h"
36#include "DGtal/geometry/surfaces/ShroudsRegularization.h"
38
39using namespace std;
40using namespace DGtal;
41
43// Functions for testing class ShroudsRegularization
45
46TEST_CASE( "Testing ShroudsRegularization" )
47{
50 typedef SH3::ExplicitSurfaceContainer Container;
52
53 auto params = SH3::defaultParameters();
54 params( "polynomial", "goursat" )( "gridstep", 1)("verbose", 0);
55 auto implicit_shape = SH3::makeImplicitShape3D ( params );
56 auto digitized_shape = SH3::makeDigitizedImplicitShape3D( implicit_shape, params );
57 auto K = SH3::getKSpace( params );
58 auto surface = SH3::makeDigitalSurface( digitized_shape, K, params );
60
62 auto idxsurface = SH3::makeIdxDigitalSurface( surface, params );
63 ShroudsRegularization< Container > shrouds_reg( idxsurface );
64 auto originalPos = shrouds_reg.positions();
66 {
67 auto polySurf = SH3::makeDualPolygonalSurface( idxsurface );
68 SH3::saveOBJ( polySurf, "goursat-shrouds-init.obj" );
69 }
70
72 double loo = 0.0;
73 double l2 = 0.0;
74 double energyInitK2 = shrouds_reg.energy ( RegType::SQUARED_CURVATURE );
75 std::tie( loo, l2 ) = shrouds_reg.regularize( RegType::SQUARED_CURVATURE,
76 0.5, 0.0001, 100 );
77 double energyRegK2 = shrouds_reg.energy ( RegType::SQUARED_CURVATURE );
79
80 REQUIRE( loo < 0.1 );
81 REQUIRE( l2 <= loo );
82 REQUIRE( energyRegK2 < energyInitK2 );
83
84 {
86 auto regularizedPos = shrouds_reg.positions();
87 auto polySurf = SH3::makeDualPolygonalSurface( idxsurface );
88 auto polySurfPos = polySurf->positions();
89 for ( auto i = 0; i < regularizedPos.size(); i++ )
90 polySurfPos[ i ] = regularizedPos[ i ];
91 SH3::saveOBJ( polySurf, "goursat-shrouds-reg-k2.obj" );
93 }
94
96 shrouds_reg.init();
97 double energyInitArea= shrouds_reg.energy ( RegType::AREA );
98 std::tie( loo, l2 ) = shrouds_reg.regularize( RegType::AREA,
99 0.5, 0.0001, 100 );
100 double energyRegArea = shrouds_reg.energy ( RegType::AREA );
102
103 REQUIRE( energyRegArea < energyInitArea );
104
106 shrouds_reg.init();
107 double energyInitSnk= shrouds_reg.energy ( RegType::SNAKE );
108 std::tie( loo, l2 ) = shrouds_reg.regularize( RegType::SNAKE,
109 0.5, 0.0001, 100 );
110 double energyRegSnk = shrouds_reg.energy ( RegType::SNAKE );
112
113 REQUIRE( energyRegSnk < energyInitSnk );
114}
Aim: A model of CDigitalSurfaceContainer which defines the digital surface as connected surfels....
Definition: SetOfSurfels.h:74
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Definition: Shortcuts.h:105
static KSpace getKSpace(const Point &low, const Point &up, Parameters params=parametersKSpace())
Definition: Shortcuts.h:332
static CountedPtr< DigitizedImplicitShape3D > makeDigitizedImplicitShape3D(CountedPtr< ImplicitShape3D > shape, Parameters params=parametersDigitizedImplicitShape3D())
Definition: Shortcuts.h:523
static CountedPtr< DigitalSurface > makeDigitalSurface(CountedPtr< TPointPredicate > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
Definition: Shortcuts.h:1209
static CountedPtr< PolygonalSurface > makeDualPolygonalSurface(Surfel2Index &s2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
Definition: Shortcuts.h:2268
static Parameters defaultParameters()
Definition: Shortcuts.h:203
static CountedPtr< IdxDigitalSurface > makeIdxDigitalSurface(CountedPtr< BinaryImage > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
Definition: Shortcuts.h:1275
static bool saveOBJ(CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, const TCellEmbedder &embedder, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
Definition: Shortcuts.h:1739
static CountedPtr< ImplicitShape3D > makeImplicitShape3D(const Parameters &params=parametersImplicitShape3D())
Definition: Shortcuts.h:282
Aim: Implements the Shrouds Regularization algorithm of Nielson et al .
Regularization
The enum class specifying the possible shrouds regularization.
std::pair< double, double > regularize(const Regularization reg=Regularization::SQUARED_CURVATURE, const double randomization=0.0, const double max_loo=0.0001, const int maxNb=100)
double energy(const Regularization reg=Regularization::SQUARED_CURVATURE)
DGtal is the top-level namespace which contains all DGtal functions and types.
STL namespace.
Shortcuts< KSpace > SH3
KSpace K
TEST_CASE("Testing ShroudsRegularization")
REQUIRE(domain.isInside(aPoint))