DGtal 2.1.1
Loading...
Searching...
No Matches
testIntegralInvariantShortcuts.cpp
Go to the documentation of this file.
1
31#include <iostream>
32#include <vector>
33
34#include "DGtal/base/Common.h"
35#include "ConfigTest.h"
36#include "DGtalCatch.h"
37#include "DGtal/helpers/StdDefs.h"
38#include "DGtal/helpers/Shortcuts.h"
39#include "DGtal/helpers/ShortcutsGeometry.h"
40
42
43using namespace std;
44using namespace DGtal;
45
48
50// Functions for testing class IntegralInvariantShortcuts.
52
53TEST_CASE( "Testing IntegralInvariant Shortcuts API" )
54{
55 auto params = SH3::defaultParameters() | SHG3::defaultParameters() | SHG3::parametersGeometryEstimation();
56 params( "polynomial", "goursat" )( "gridstep", 1. );
57 auto implicit_shape = SH3::makeImplicitShape3D ( params );
58 auto digitized_shape = SH3::makeDigitizedImplicitShape3D( implicit_shape, params );
59 auto binary_image = SH3::makeBinaryImage( digitized_shape, params );
60 auto K = SH3::getKSpace( params );
61 auto embedder = SH3::getCellEmbedder( K );
62 auto surface = SH3::makeLightDigitalSurface( binary_image, K, params );
63 auto surfels = SH3::getSurfelRange( surface, params );
64
65 trace.info() << "Nb surfels= " << surfels.size() << std::endl;
66
67 //Computing some differential quantities
68 params("r-radius", 3.0);
69
70 //We compute the curvature tensor, the mean and the Gaussian curvature
71 auto Tcurv = SHG3::getIIPrincipalCurvaturesAndDirections(binary_image, surfels, params);
72 auto Kcurv = SHG3::getIIGaussianCurvatures( binary_image, surfels, params);
73
74 std::vector<double> k1,k2,G;
75 for(auto &result: Tcurv)
76 {
77 k1.push_back( std::get<0>(result) );
78 k2.push_back( std::get<1>(result) );
79 G.push_back( ( std::get<0>(result) * std::get<1>(result)) );
80 }
81
82 SECTION("Testing that mean/Gaussian/tensor curvature shortucut values match")
83 {
84 for(std::size_t i = 0; i < G.size(); ++i)
85 REQUIRE( Kcurv[i] == Approx( G[i] ) );
86 }
87
88 SECTION("Testing on shifted domains")
89 {
90 auto SHIFT=512;
91 auto domain = binary_image->domain();
93
94 SH3::KSpace Ks;
95 Ks.init( shifted.lowerBound(), shifted.upperBound(), true );
96
97 CountedPtr<SH3::BinaryImage> binary_image_shifted(new SH3::BinaryImage(shifted));
98 for(auto p : binary_image->domain())
99 binary_image_shifted->setValue(p+Z3i::Point::diagonal(SHIFT), binary_image->operator()(p));
100
101 auto surfaceShifted = SH3::makeLightDigitalSurface( binary_image_shifted, Ks, params );
102 auto surfelsShifted = SH3::getSurfelRange( surfaceShifted, params );
103 trace.info() << "Nb surfels= " << surfels.size() << " "<<shifted<<" "<<Ks<<std::endl;
104
105 //Computing some differential quantities
106 auto KcurvShifted = SHG3::getIIGaussianCurvatures( binary_image_shifted, surfelsShifted, params);
107
108
109 }
110}
111
Aim: Smart pointer based on reference counts.
Definition CountedPtr.h:80
const Point & lowerBound() const
const Point & upperBound() const
static Self diagonal(Component val=1)
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Definition Shortcuts.h:102
std::ostream & info()
CountedPtr< SH3::DigitalSurface > surface
CountedPtr< SH3::BinaryImage > binary_image
DGtal is the top-level namespace which contains all DGtal functions and types.
Trace trace
STL namespace.
KSpace K
TEST_CASE("Testing IntegralInvariant Shortcuts API")
Shortcuts< Z3i::KSpace > SH3
ShortcutsGeometry< Z3i::KSpace > SHG3
Domain domain
SECTION("Testing constant forward iterators")
REQUIRE(domain.isInside(aPoint))