DGtalTools 2.1.0
Loading...
Searching...
No Matches
imgAddNoise.cpp
1
28#include <DGtal/base/Common.h>
29#include "DGtal/io/readers/GenericReader.h"
30#include "DGtal/io/writers/GenericWriter.h"
31#include "DGtal/images/ImageContainerBySTLVector.h"
32#include "DGtal/images/ImageSelector.h"
33#include <DGtal/geometry/volumes/KanungoNoise.h>
34#include <DGtal/images/IntervalForegroundPredicate.h>
35
36#include "CLI11.hpp"
37
38#include <vector>
39#include <string>
40#include <climits>
41
42
43
44using namespace DGtal;
45
46
86void missingParam ( std::string param )
87{
88 trace.error() <<" Parameter: "<<param<<" is required..";
89 trace.info() <<std::endl;
90 exit ( 1 );
91}
92
93typedef ImageSelector < Z2i::Domain, unsigned char>::Type MyImage;
94
95
96int main( int argc, char** argv )
97{
98// parse command line using CLI ----------------------------------------------
99 CLI::App app;
100 std::string inputFileName;
101 std::string outputFileName {"result.png"};
102 double noise {0.5};
103
104 app.description("Add Kanungo noise to a binary object with 0 values as background points and values >0 for the foreground ones.\n Example: \n imgAddNoise ${DGtal}/examples/samples/klokan.pgm noise.pgm ");
105 app.add_option("-i,--input,1", inputFileName, "input image file name (any 2D image format accepted by DGtal::GenericReader)." )
106 ->required()
107 ->check(CLI::ExistingFile);
108 app.add_option("-o,--output,2", outputFileName, "output image file name (any 2D image format accepted by DGtal::GenericWriter)");
109 app.add_option("-n,--noise", noise, "Kanungo noise level in ]0,1[ (default 0.5)");
110
111 app.get_formatter()->column_width(40);
112 CLI11_PARSE(app, argc, argv);
113 // END parse command line using CLI ----------------------------------------------
114
115
116 typedef functors::IntervalForegroundPredicate<MyImage> Binarizer;
117 MyImage image = GenericReader<MyImage>::import( inputFileName );
118 trace.info() <<"Input image: "<< image<<std::endl;
119 Binarizer predicate(image, 0,255);
120
121 KanungoNoise<Binarizer, Z2i::Domain> kanungo(predicate, image.domain(), noise);
122
123 MyImage result(image.domain());
124 for(Z2i::Domain::ConstIterator it = image.domain().begin(), itend = image.domain().end(); it!= itend; ++it)
125 {
126 if (kanungo(*it))
127 result.setValue(*it, 255);
128 else
129 result .setValue(*it, 0);
130 }
131
132 result >> outputFileName;
133
134 return EXIT_SUCCESS;
135}
136
137
138
Definition ATu0v1.h:57