Example of 2D rigid transformation using forward and backward model.
#include <iostream>
#include <cmath>
#include "DGtal/images/ImageSelector.h"
#include "DGtal/images/ImageContainerBySTLVector.h"
#include "DGtal/images/ConstImageAdapter.h"
#include "ConfigExamples.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/base/Common.h"
#include "DGtal/io/readers/PGMReader.h"
#include "DGtal/io/writers/GenericWriter.h"
#include "DGtal/images/RigidTransformation2D.h"
{
typedef ForwardRigidTransformation2D < Space > ForwardTrans;
typedef BackwardRigidTransformation2D < Space > BackwardTrans;
typedef DomainRigidTransformation2D < Domain, ForwardTrans > MyDomainTransformer;
typedef MyDomainTransformer::Bounds Bounds;
trace.beginBlock (
"Example rigidtransformation2d" );
ForwardTrans forwardTrans(
RealPoint ( 5, 5 ), M_PI_4, RealVector( 3, -3 ) );
BackwardTrans backwardTrans(
RealPoint ( 5, 5 ), M_PI_4, RealVector( 3, -3 ) );
MyDomainTransformer domainTransformer ( forwardTrans );
Identity idD;
Bounds bounds = domainTransformer (
image.domain() );
Domain transformedDomain ( bounds.first, bounds.second );
trace.beginBlock (
"Backward - Eulerian model" );
MyImageBackwardAdapter backwardImageAdapter (
image, transformedDomain , backwardTrans, idD );
backwardImageAdapter >> "backward_transform.pgm";
trace.beginBlock(
"Forward - Lagrangian model" );
Image forwardTransformedImage ( transformedDomain );
for ( Domain::ConstIterator it =
image.domain().begin(); it !=
image.domain().end(); ++it )
{
forwardTransformedImage.
setValue ( forwardTrans ( *it ),
image ( *it ) );
}
forwardTransformedImage >> "forward_transform.pgm";
return 0;
}
Aim: implements a const image adapter with a given domain (i.e. a subdomain) and 2 functors : g for d...
void setValue(const Point &aPoint, const Value &aValue)
Z2i this namespace gathers the standard of types for 2D imagery.
functors namespace gathers all DGtal functors.
DGtal is the top-level namespace which contains all DGtal functions and types.
ImageContainerBySTLVector< Domain, Value > Type
static ImageContainer importPGM(const std::string &aFilename, const Functor &aFunctor=Functor(), bool topbotomOrder=true)
ImageContainerBySTLVector< Domain, Value > Image
HyperRectDomain< Space > Domain
PointVector< 3, double > RealPoint