34 #include "DGtal/base/Common.h"
36 #include "DGtal/shapes/ShapeFactory.h"
37 #include "DGtal/shapes/Shapes.h"
38 #include "DGtal/helpers/StdDefs.h"
39 #include "DGtal/topology/helpers/Surfaces.h"
42 #include "DGtal/geometry/curves/FreemanChain.h"
45 #include "DGtal/geometry/curves/BinomialConvolver.h"
49 #include "DGtal/images/ImageContainerBySTLVector.h"
50 #include "DGtal/io/writers/GenericWriter.h"
51 #include "DGtal/io/colormaps/GradientColorMap.h"
52 #include "DGtal/io/writers/PPMWriter.h"
55 #include <boost/program_options/options_description.hpp>
56 #include <boost/program_options/parsers.hpp>
57 #include <boost/program_options/variables_map.hpp>
64 using namespace DGtal;
110 std::vector<Z2i::Point> vectPoints;
116 BCCurvatureEstimator.
init( h, vectPoints.begin(), vectPoints.end(), isClosed );
117 resCurvature.clear();
118 resCurvature.resize(vectPoints.size());
119 BCCurvatureEstimator.
eval( vectPoints.begin(), vectPoints.end(), resCurvature.begin() );
125 namespace po = boost::program_options;
127 int main(
int argc,
char** argv )
131 po::options_description general_opt(
"Allowed options are: ");
132 general_opt.add_options()
133 (
"help,h",
"display this message")
134 (
"input,i", po::value<std::string>(),
"Input FreemanChain file name")
135 (
"gridStepInit", po::value<double>()->default_value(1.0),
"Grid step initial")
136 (
"gridStepIncrement", po::value<double>()->default_value(1.0),
"Grid step increment ")
137 (
"output,o ", po::value<std::string>(),
"set the output name ")
138 (
"gridStepFinal", po::value<double>()->default_value(1.0),
"Grid step final")
139 (
"curvatureCutOff,c", po::value<double>()->default_value(10.0),
"set the curvature limits to better display");
146 po::variables_map vm;
148 po::store(po::parse_command_line(argc, argv, general_opt), vm);
149 }
catch(
const std::exception& ex){
151 trace.
info()<<
"Error checking program options: "<< ex.what()<< std::endl;
154 if(!parseOK || vm.count(
"help")||argc<=1 || (!(vm.count(
"input"))) )
156 trace.
info()<<
"Generate the Curvature Scale Space image using a binomial convolver based estimator." <<std::endl
157 <<
"The x axis is associated to the contour point and the y axis to the scale. The colors represent the curvature values included between the cutoff values (set to 10 by default)."
158 <<std::endl <<
"Basic usage: "<<std::endl
159 <<
"\t curvatureScaleSpaceBCC --input <filename> --output <filename> "<<std::endl
160 << general_opt <<
"\n"
161 <<
"Example: "<<std::endl
162 <<
"\t curvatureScaleSpaceBCC -i ${DGtal}/examples/samples/contourS.fc --gridStepInit 0.001 --gridStepIncrement 0.0005 --gridStepFinal 0.05 -o cssResu.ppm"<< std::endl;
166 double h_initial = vm[
"gridStepInit"].as<
double>();
167 double h_increment = vm[
"gridStepIncrement"].as<
double>();
168 double h_final = vm[
"gridStepFinal"].as<
double>();
169 double curvatureCutOff = vm[
"curvatureCutOff"].as<
double>();
172 if(vm.count(
"input")){
173 std::string fileName = vm[
"input"].as<std::string>();
174 std::vector< DGtal::FreemanChain<Z2i::Integer> > vectFcs =
PointListReader< Z2i::Point >:: getFreemanChainsFromFile<Z2i::Integer> (fileName);
175 bool isClosed = vectFcs.at(0).isClosed();
179 unsigned int height = (int)((h_final-h_initial)/h_increment);
182 Image2D cssImage(domain);
187 for(
double l= 0; l < height; l++ ){
190 std::vector<double> curvaturesBCC;
191 computeCurvatureBCC(h, vectFcs.at(0), curvaturesBCC, isClosed);
194 for ( std::vector<double>::const_iterator it = curvaturesBCC.begin(), it_end = curvaturesBCC.end();
195 it != it_end; ++it, ++j ) {
197 c = c<-curvatureCutOff? -curvatureCutOff: c;
198 c = c>curvatureCutOff? curvatureCutOff: c;
void progressBar(const double currentValue, const double maximalValue)
void init(const double h, const ConstIterator &itb, const ConstIterator &ite, const bool isClosed=true)
Trace trace(traceWriterTerm)
Quantity eval(const ConstIterator &it)
static void getContourPoints(const FreemanChain &fc, std::vector< Point > &aVContour)