本文整理汇总了C++中Estimator::attach方法的典型用法代码示例。如果您正苦于以下问题:C++ Estimator::attach方法的具体用法?C++ Estimator::attach怎么用?C++ Estimator::attach使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Estimator
的用法示例。
在下文中一共展示了Estimator::attach方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void chooseEstimator
( const po::variables_map& vm, //< command-line parameters
const KSpace& K, //< cellular grid space
const ImplicitShape& shape, //< implicit shape "ground truth"
const Surface& surface, //< digital surface approximating shape
const KernelFunction& chi, //< the kernel function
const PointPredicate& ptPred ) //< analysed implicit digital shape as a PointPredicate
{
using namespace DGtal::functors;
string nameEstimator = vm[ "estimator" ].as<string>();
double h = vm["gridstep"].as<double>();
typedef ShapeGeometricFunctors::ShapeNormalVectorFunctor<ImplicitShape> NormalFunctor;
typedef TrueDigitalSurfaceLocalEstimator<KSpace, ImplicitShape, NormalFunctor> TrueEstimator;
TrueEstimator true_estimator;
true_estimator.attach( shape );
true_estimator.setParams( K, NormalFunctor(), 20, 0.1, 0.01 );
true_estimator.init( h, surface.begin(), surface.end() );
if ( nameEstimator == "True" )
{
trace.beginBlock( "Chosen estimator is: True." );
typedef TrueDigitalSurfaceLocalEstimator<KSpace, ImplicitShape, NormalFunctor> Estimator;
int maxIter = vm["maxiter"].as<int>();
double accuracy = vm["accuracy"].as<double>();
double gamma = vm["gamma"].as<double>();
Estimator estimator;
estimator.attach( shape );
estimator.setParams( K, NormalFunctor(), maxIter, accuracy, gamma );
estimator.init( h, surface.begin(), surface.end() );
trace.endBlock();
computeEstimation( vm, K, shape, surface, estimator );
}
else if ( nameEstimator == "VCM" )
{
trace.beginBlock( "Chosen estimator is: VCM." );
typedef typename KSpace::Space Space;
typedef typename Surface::DigitalSurfaceContainer SurfaceContainer;
typedef ExactPredicateLpSeparableMetric<Space,2> Metric;
typedef VoronoiCovarianceMeasureOnDigitalSurface<SurfaceContainer,Metric,
KernelFunction> VCMOnSurface;
typedef VCMNormalVectorFunctor<VCMOnSurface> NormalFunctor;
typedef VCMDigitalSurfaceLocalEstimator<SurfaceContainer,Metric,
KernelFunction, NormalFunctor> VCMNormalEstimator;
int embedding = vm["embedding"].as<int>();
Surfel2PointEmbedding embType = embedding == 0 ? Pointels :
embedding == 1 ? InnerSpel : OuterSpel;
double R = vm["R-radius"].as<double>();
double r = vm["r-radius"].as<double>();
double t = vm["trivial-radius"].as<double>();
double alpha = vm["alpha"].as<double>();
if ( alpha != 0.0 ) R *= pow( h, alpha-1.0 );
if ( alpha != 0.0 ) r *= pow( h, alpha-1.0 );
trace.info() << "- R=" << R << " r=" << r << " t=" << t << std::endl;
VCMNormalEstimator estimator;
estimator.attach( surface );
estimator.setParams( embType, R, r, chi, t, Metric(), true );
estimator.init( h, surface.begin(), surface.end() );
trace.endBlock();
computeEstimation( vm, K, shape, surface, estimator );
}
else if ( nameEstimator == "II" )
{
trace.beginBlock( "Chosen estimator is: II." );
typedef typename KSpace::Space Space;
typedef HyperRectDomain<Space> Domain;
typedef ImageContainerBySTLVector< Domain, bool> Image;
typedef typename Domain::ConstIterator DomainConstIterator;
typedef SimpleThresholdForegroundPredicate<Image> ThresholdedImage;
typedef IINormalDirectionFunctor<Space> IINormalFunctor;
typedef IntegralInvariantCovarianceEstimator<KSpace, ThresholdedImage, IINormalFunctor> IINormalEstimator;
double r = vm["r-radius"].as<double>();
double alpha = vm["alpha"].as<double>();
if ( alpha != 0.0 ) r *= pow( h, alpha-1.0 );
trace.info() << " r=" << r << std::endl;
trace.beginBlock( "Preparing characteristic set." );
Domain domain( K.lowerBound(), K.upperBound() );
Image image( domain );
for ( DomainConstIterator it = domain.begin(), itE = domain.end(); it != itE; ++it )
{
image.setValue( *it, ptPred( *it ) );
}
trace.endBlock();
trace.beginBlock( "Initialize II estimator." );
ThresholdedImage thresholdedImage( image, false );
IINormalEstimator ii_estimator( K, thresholdedImage );
ii_estimator.setParams( r );
ii_estimator.init( h, surface.begin(), surface.end() );
trace.endBlock();
trace.endBlock();
computeEstimation( vm, K, shape, surface, ii_estimator );
}
else if ( nameEstimator == "Trivial" )
{
trace.beginBlock( "Chosen estimator is: Trivial." );
typedef HatFunction<double> Functor;
typedef typename KSpace::Space Space;
typedef typename KSpace::Surfel Surfel;
typedef typename Surface::DigitalSurfaceContainer SurfaceContainer;
typedef ExactPredicateLpSeparableMetric<Space,2> Metric;
typedef ElementaryConvolutionNormalVectorEstimator< Surfel, CanonicSCellEmbedder<KSpace> >
SurfelFunctor;
//.........这里部分代码省略.........