29 #include <DGtal/base/Common.h>
30 #include <DGtal/io/readers/GenericReader.h>
31 #include <DGtal/io/writers/GenericWriter.h>
32 #include <DGtal/helpers/StdDefs.h>
33 #include <DGtal/images/Image.h>
34 #include <DGtal/images/ImageSelector.h>
35 #include <DGtal/images/ConstImageAdapter.h>
36 #include <DGtal/images/RigidTransformation2D.h>
41 using namespace DGtal;
43 using namespace functors;
77 int main(
int argc,
char**argv)
82 std::string outputFileName;
90 app.description(
"Apply rigid transformation on a given image.\n Typical use example:\n \t rigidTrans2D --input <RawFileName> --output <OutputFileName> --ox 1.0 --oy 1.0 -a 1.2 --tx 1 --ty 0 --m <forward|backward>\n");
91 app.add_option(
"-i,--input,1",filename,
"Input file.")->required()->check(CLI::ExistingFile);
92 app.add_option(
"-o,--output,2",outputFileName,
"Output file.")->required();
93 app.add_option(
"-m,--model",model,
"Transformation model: backward, forward.")->required();
94 app.add_option(
"-a,--angle",angle,
"Rotation angle in radians (default 0)",
true);
95 app.add_option(
"--ox",ox,
"X coordinate of origin (default 0)",
true);
96 app.add_option(
"--oy",oy,
"Y coordinate of origin (default 0)",
true);
97 app.add_option(
"--tx",tx,
"X component of translation vector (default 0)",
true);
98 app.add_option(
"--ty",ty,
"Y component of translation vector (default 0)",
true);
100 app.get_formatter()->column_width(40);
101 CLI11_PARSE(app, argc, argv);
104 typedef ImageSelector<Domain, unsigned char >::Type Image;
105 typedef ForwardRigidTransformation2D < Space > ForwardTrans;
106 typedef BackwardRigidTransformation2D < Space > BackwardTrans;
107 typedef ConstImageAdapter<Image, Domain, BackwardTrans, Image::Value, Identity > MyImageBackwardAdapter;
108 typedef DomainRigidTransformation2D < Domain, ForwardTrans > MyTransformedDomain;
109 typedef MyTransformedDomain::Bounds Bounds;
111 Image image = GenericReader <Image, 2>::import(filename);
112 ForwardTrans forwardTrans( RealPoint ( ox, oy ), angle, RealVector( tx, ty ) );
113 BackwardTrans backwardTrans( RealPoint ( ox, oy ), angle, RealVector( tx, ty ) );
114 MyTransformedDomain domainForwardTrans ( forwardTrans );
115 Bounds bounds = domainForwardTrans ( image.domain() );
116 Domain transformedDomain ( bounds.first, bounds.second );
119 if ( model ==
"forward" )
121 Image forwardTransformedImage ( transformedDomain );
122 for ( Domain::ConstIterator it = image.domain().begin(); it != image.domain().end(); ++it )
124 forwardTransformedImage.setValue ( forwardTrans ( *it ), image ( *it ) );
126 GenericWriter<Image, 2, unsigned char, Identity>::exportFile(outputFileName, forwardTransformedImage, idD);
130 MyImageBackwardAdapter backwardImageAdapter ( image, transformedDomain , backwardTrans, idD );
131 GenericWriter<MyImageBackwardAdapter, 2, unsigned char, Identity>::exportFile(outputFileName, backwardImageAdapter, idD);