Ejemplo n.º 1
0
bool testPowerMapFromSites( const Set &aSet, std::array<bool, Set::Space::dimension> const & periodicity )
{
    unsigned int nbok = 0;
    unsigned int nb = 0;

    using SetDomain = DigitalSetDomain< Set >;
    using Image = ImageContainerBySTLMap< SetDomain , DGtal::int64_t>;

    // Weight image.
    Image image( new SetDomain( aSet ) );

    // Setting weights
    typename Image::Value weight = 2;
    for ( auto const & pt : image.domain() )
    {
        image.setValue( pt, weight );
        weight *= 2;
    }

    trace.beginBlock(" Power Map computation l_2");
    typedef ExactPredicateLpPowerSeparableMetric<typename Set::Space, 2> L2PowerMetric;
    typedef PowerMap< Image, L2PowerMetric > Power2;
    L2PowerMetric l2;
    Power2 power2( aSet.domain(), image, l2, periodicity);
    trace.endBlock();

    trace.beginBlock("Validating the Power Map");
    nbok += checkPowerMap( power2 ) ? 1 : 0;
    nb++;
    trace.endBlock();

    trace.beginBlock(" Power Map computation l_3");
    typedef ExactPredicateLpPowerSeparableMetric<typename Set::Space, 3> L3PowerMetric;
    typedef PowerMap< Image, L3PowerMetric > Power3;
    L3PowerMetric l3;
    Power3 power3( aSet.domain(), image, l3, periodicity);
    trace.endBlock();

    trace.beginBlock("Validating the Power Map l_3");
    nbok += checkPowerMap( power3 ) ? 1 : 0;
    nb++;
    trace.endBlock();

    trace.beginBlock("Reverse DT computation");
    typedef ReverseDistanceTransformation<typename Power2::WeightImage, L2PowerMetric> RDT;
    RDT rdt(aSet.domain(), power2.weightImagePtr(), l2, periodicity);
    trace.endBlock();

    return nbok == nb;
}