Displays fully convex collapsible points in the given image. All these points can be safely flipped without changing the topology of the image.
#include <vector>
#include "DGtal/shapes/Shapes.h"
#include "DGtal/io/boards/Board2D.h"
#include "DGtal/io/Color.h"
#include "DGtal/geometry/volumes/DigitalConvexity.h"
#include "DGtal/geometry/volumes/NeighborhoodConvexityAnalyzer.h"
#include "DGtal/helpers/Shortcuts.h"
#include "ConfigExamples.h"
using namespace std;
using namespace Z2i;
typedef Shortcuts<KSpace>
SH2;
typedef NeighborhoodConvexityAnalyzer<KSpace,1>
NCA1;
int main(
int argc,
char** argv )
{
double noise = argc > 1 ? atof( argv[ 1 ] ) : 0.1;
auto params = SH2::defaultParameters();
params( "noise", noise )( "thresholdMin", 128 );
auto g_image = SH2::makeGrayScaleImage( examplesPath + "samples/contourS.pgm" );
auto b_image = SH2::makeBinaryImage ( g_image, params );
Board2D board;
Domain image_domain = b_image->domain();
NCA1 nca1( image_domain.lowerBound(), image_domain.upperBound() );
for ( auto p : image_domain )
{
nca1.setCenter( p, (*b_image) );
bool simple = nca1.isFullyConvexCollapsible();
if ( (*b_image)( p ) )
board << CustomStyle( p.className(),
simple
? new CustomColors( Color( 0, 0, 0 ),
Color( 10, 255, 10 ) )
: new CustomColors( Color( 0, 0, 0 ),
Color( 255, 10, 10 ) ) );
else
board << CustomStyle( p.className(),
simple
? new CustomColors( Color( 0, 0, 0 ),
Color( 180, 255, 180 ) )
: new CustomColors( Color( 0, 0, 0 ),
Color( 255, 180, 180 ) ) );
board << p;
}
board.saveEPS( "contour-fcvx-collapsible.eps" );
return 0;
}
NeighborhoodConvexityAnalyzer< KSpace, 1 > NCA1
DigitalConvexity< KSpace > DConv
DGtal is the top-level namespace which contains all DGtal functions and types.
int main(int argc, char **argv)
HyperRectDomain< Space > Domain