#include <iostream>
#include <fstream>
#include <algorithm>
#include "DGtal/base/Common.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/images/ImageContainerBySTLVector.h"
#include "DGtal/io/readers/VolReader.h"
#include "DGtal/io/writers/VolWriter.h"
#include "DGtal/images/SimpleThresholdForegroundPredicate.h"
#include "DGtal/geometry/volumes/distance/DistanceTransformation.h"
#include "DGtal/shapes/implicit/ImplicitBall.h"
#include "DGtal/base/BasicFunctors.h"
#include "DGtal/io/viewers/PolyscopeViewer.h"
#include "DGtal/io/colormaps/GradientColorMap.h"
#include <boost/algorithm/minmax_element.hpp>
int main(
int argc,
char ** argv)
{
PolyscopeViewer<> viewer;
for(Image::Domain::ConstIterator it =
image.domain().begin(),
itend =
image.domain().end(); it != itend; ++it)
viewer << *it;
trace.info() <<
"viewer launched..."<<std::endl;
Predicate binaryshape(
image, 0);
DT distancemap(
image.domain(), binaryshape, l2);
PolyscopeViewer<> viewer2;
DT::Value maxDT = (*boost::first_max_element(distancemap.constRange().begin(),
distancemap.constRange().end()));
trace.info() <<
"we display the dt map"<<std::endl;
int cpt=0;
for(DT::Domain::ConstIterator it = distancemap.domain().begin(),
itend = distancemap.domain().end(); it != itend;
++it)
if (distancemap(*it) > 0)
{
cpt++;
}
trace.info() <<
"Got "<<cpt<<
" points."<<std::endl;
trace.info() <<
"viewer2 launched..."<<std::endl;
for(Image::Range::Iterator it = imageGranulo.
range().begin(), itend= imageGranulo.
range().end();
it != itend; ++it)
*it = 0;
trace.info() <<
"Computing the granulometry"<<std::endl;
cpt=0;
for(Image::Domain::ConstIterator it = imageGranulo.
domain().begin(),
itend = imageGranulo.
domain().end(); it != itend; ++it)
{
if (distancemap(*it) > 0)
{
unsigned int radius = (unsigned int)distancemap(*it);
itball != itendball; itball++)
if (imageGranulo.
domain().isInside(*itball) &&
( ball(*itball) > 0) &&
(imageGranulo(*itball) < radius))
cpt++;
}
}
trace.info() <<
"Granulometry ok nbBalls="<<cpt<< std::endl;
trace.info() <<
"Save OK"<< std::endl;
PolyscopeViewer<> viewer3;
Image::Value maxG = (*boost::first_max_element(imageGranulo.
constRange().begin(),
cpt=0;
for(Image::Domain::ConstIterator it = imageGranulo.
domain().begin(),
itend = imageGranulo.
domain().end(); it != itend;
++it)
if (imageGranulo(*it) > 0)
{
cpt++;
}
trace.info() <<
"Got "<<cpt<<
" points."<<std::endl;
trace.info() <<
"viewer3 launched..."<<std::endl;
return 0;
}
const ConstIterator & begin() const
const ConstIterator & end() const
const Domain & domain() const
ConstRange constRange() const
void setValue(const Point &aPoint, const Value &aValue)
Aim: model of CEuclideanOrientedShape and CEuclideanBoundedShape concepts to create a ball in nD....
RealPoint getUpperBound() const
RealPoint getLowerBound() const
static Self diagonal(Component val=1)
void show() override
Starts the event loop and display of elements.
Aim: Define a simple Foreground predicate thresholding image values given a single thresold....
HyperRectDomain< Space > Domain
Space::RealPoint RealPoint
ExactPredicateLpSeparableMetric< Space, 2 > L2Metric
DGtal is the top-level namespace which contains all DGtal functions and types.
static ImageContainer importVol(const std::string &filename, const Functor &aFunctor=Functor())
Aim: Export a 3D Image using the Vol formats.
Attach a property to an element.
Functor that rounds down.
ImageContainerBySTLVector< Domain, Value > Image