From e78335ce95e094028c96553f8d9220e3389ef311 Mon Sep 17 00:00:00 2001 From: ngophuc Date: Fri, 14 May 2021 08:18:24 +0200 Subject: [PATCH 1/6] add Affine Transformation --- examples/images/CMakeLists.txt | 1 + .../images/exampleAffinetransformation2d.cpp | 109 +++++++++ src/DGtal/images/AffineTransformation2D.h | 199 ++++++++++++++++ src/DGtal/images/GeometricTransformation2D.h | 214 ++++++++++++++++++ .../doc/images/church_AffineBackward.png | Bin 0 -> 47891 bytes .../doc/images/church_AffineForward.png | Bin 0 -> 34395 bytes .../doc/moduleGeometricalTransformation.dox | 75 +++++- 7 files changed, 597 insertions(+), 1 deletion(-) create mode 100644 examples/images/exampleAffinetransformation2d.cpp create mode 100755 src/DGtal/images/AffineTransformation2D.h create mode 100755 src/DGtal/images/GeometricTransformation2D.h create mode 100644 src/DGtal/images/doc/images/church_AffineBackward.png create mode 100644 src/DGtal/images/doc/images/church_AffineForward.png diff --git a/examples/images/CMakeLists.txt b/examples/images/CMakeLists.txt index 9ac6debb56..b72f433b03 100644 --- a/examples/images/CMakeLists.txt +++ b/examples/images/CMakeLists.txt @@ -19,6 +19,7 @@ set(DGTAL_EXAMPLES_SRC exampleRigidtransformation3d exampleArrayImageAdapter exampleConstImageFunctorHolder + exampleAffinetransformation2d ) if( WITH_HDF5 ) diff --git a/examples/images/exampleAffinetransformation2d.cpp b/examples/images/exampleAffinetransformation2d.cpp new file mode 100644 index 0000000000..05ec9c66f3 --- /dev/null +++ b/examples/images/exampleAffinetransformation2d.cpp @@ -0,0 +1,109 @@ +/** + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + **/ + +/** + * @file images/exampleAffinetransformation2d.cpp + * @ingroup Examples + * @author Phuc Ngo (\c hoai-diem-phuc.ngo@loria.fr ) + * Laboratoire Lorrain de Recherche en Informatique et ses Applications (LORIA), France + * + * @date 12/05/2021 + * + * An example file named affinetransformation2d. + * + * This file is part of the DGtal library. + */ + +/** +* Example of 2D affine transformation using forward and backward models. + @see @ref moduleGeometricTransform + \image html church_AffineBackward.png "Result for backward model" +* \example images/exampleAffinetransformation2d.cpp +**/ + +/////////////////////////////////////////////////////////////////////////////// +#include +#include +#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] +#include "DGtal/images/AffineTransformation2D.h" +//! [include] +/////////////////////////////////////////////////////////////////////////////// + +using namespace std; +using namespace DGtal; +using namespace functors; +using namespace Z2i; + +int main( int , char** ) +{ + typedef ImageSelector::Type Image; + //! [def] + typedef ForwardAffineTransformation2D < Space > ForwardTrans; + typedef BackwardAffineTransformation2D < Space > BackwardTrans; + typedef DomainGeometricTransformation2D < Domain, ForwardTrans > MyDomainTransformer; + typedef MyDomainTransformer::Bounds Bounds; + //! [def] + trace.beginBlock ( "Example AffineTransformation2d" ); + //! [trans] + ForwardTrans forwardTrans(1.2, -1, 1.6, 2, RealPoint ( 5, 5 )); + BackwardTrans backwardTrans(1.2, -1, 1.6, 2, RealPoint ( 5, 5 )); + //! [trans] + //![init_domain_helper] + MyDomainTransformer domainTransformer ( forwardTrans ); + + Image image = PGMReader::importPGM ( "../church-small.pgm" ); + //! [domain] + Bounds bounds = domainTransformer ( image.domain() ); + Domain transformedDomain ( bounds.first, bounds.second ); + //! [domain] + + trace.beginBlock ( "Backward - Eulerian model" ); + //! [backward] + //![init_domain_helper] + Image backwardTransformedImage ( transformedDomain ); + for ( Domain::ConstIterator it = backwardTransformedImage.domain().begin(); it != backwardTransformedImage.domain().end(); ++it ) + { + Point p = backwardTrans ( *it ); + if(image.domain().isInside(p)) + backwardTransformedImage.setValue ( *it, image(backwardTrans ( *it )) ); + } + backwardTransformedImage >> "backward_transform.pgm"; + //! [backward] + trace.endBlock(); + + trace.beginBlock( "Forward - Lagrangian model" ); + Image forwardTransformedImage ( transformedDomain ); + //! [forward] + for ( Domain::ConstIterator it = image.domain().begin(); it != image.domain().end(); ++it ) + { + forwardTransformedImage.setValue ( forwardTrans ( *it ), image (*it)) ; + } + forwardTransformedImage >> "forward_transform.pgm"; + //! [forward] + trace.endBlock(); + trace.endBlock(); + return 0; +} +// // +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/DGtal/images/AffineTransformation2D.h b/src/DGtal/images/AffineTransformation2D.h new file mode 100755 index 0000000000..ae3e0ce9d2 --- /dev/null +++ b/src/DGtal/images/AffineTransformation2D.h @@ -0,0 +1,199 @@ +/** + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + **/ + +#pragma once + +/** + * @file AffineTransformation2D.h + * @author Phuc Ngo (\c hoai-diem-phuc.ngo@loria.fr ) + * Laboratoire Lorrain de Recherche en Informatique et ses Applications (LORIA), France + * + * @date 01/05/2021 + * + * This file is part of the DGtal library. + */ + +#if defined(AffineTransformation2D_RECURSES) +#error Recursive header files inclusion detected in AffineTransformation2D.h +#else // defined(AffineTransformation2D_RECURSES) +/** Prevents recursive inclusion of headers. */ +#define AffineTransformation2D_RECURSES + +#if !defined AffineTransformation2D_h +/** Prevents repeated inclusion of headers. */ +#define AffineTransformation2D_h + +////////////////////////////////////////////////////////////////////////////// +// Inclusions +#include +#include +#include +#include +#include "DGtal/base/Common.h" +#include "DGtal/kernel/BasicPointFunctors.h" +#include +#include +#include +#include "DGtal/images/ImageSelector.h" +#include "DGtal/images/GeometricTransformation2D.h" +////////////////////////////////////////////////////////////////////////////// + +namespace DGtal +{ +namespace functors +{ +///////////////////////////////////////////////////////////////////////////// +// Template class ForwardAffineTransformation2D +/** + * Description of template functor like class 'ForwardAffineTransformation2D'

+ * \brief Aim: implements forward rigid transformation of point in the 2D integer space. + * Warring: This version uses closest neighbor interpolation. + * + * @tparam TSpace a 2 dimensional space. + * @tparam TInputValue type of the input point e.g., TSpace::RealPoint + * @tparam TOutputValue type of the output point e.g., TSpace::Point + * @tparam TFunctor a functor operating on the output e.g., a rounding function. + * + * @see exampleAffineTransformation3d.cpp + */ +template < typename TSpace, typename TInputValue = typename TSpace::RealPoint, typename TOutputValue = typename TSpace::Point, + typename TFunctor = VectorRounding < TInputValue, TOutputValue > > +class ForwardAffineTransformation2D : public GeometricTransformation2D +{ + ///Checking concepts + BOOST_CONCEPT_ASSERT(( concepts::CSpace )); + BOOST_STATIC_ASSERT(( TSpace::dimension == 2 )); + BOOST_STATIC_ASSERT(( TOutputValue::dimension == 2 )); + BOOST_STATIC_ASSERT(( TInputValue::dimension == 2 )); + + // ----------------------- Types ------------------------------ +public: + typedef typename TSpace::RealPoint RealPoint; + typedef typename TSpace::RealVector RealVector; + typedef Eigen::Matrix RealMatrix; + + // ----------------------- Interface -------------------------------------- +public: + /** + * Constructor. + * @param aOrigin the center of rotation. + * @param angle the angle given in radians. + * @param aTranslate the 2D dimensional vector which represents translation. + */ + ForwardAffineTransformation2D ( const RealPoint & aOrigin, const RealMatrix & aMatrix, const RealVector & aTranslate ) + { + this->origin = aOrigin; + BOOST_ASSERT((aMatrix(0,0)*aMatrix(1,1)!=aMatrix(1,0)*aMatrix(0,1))); + this->transform_matrix = aMatrix; + this->translation = aTranslate; + } + ForwardAffineTransformation2D ( const double a11, const double a12, const double a21, const double a22, const RealVector & aTranslate ) + { + BOOST_ASSERT((a11*a22!=a12*a21)); + this->origin = RealPoint(0,0); + RealMatrix aMatrix; + aMatrix(0,0) = a11; + aMatrix(0,1) = a12; + aMatrix(1,0) = a21; + aMatrix(1,1) = a22; + this->transform_matrix = aMatrix; + this->translation = aTranslate; + } +}; //end of class ForwardAffineTransformation2D + +///////////////////////////////////////////////////////////////////////////// +// Template class BackwardAffineTransformation2D +/** + * Description of template functor like class 'BackwardAffineTransformation2D'

+ * \brief Aim: implements backward rigid transformation of point in the 2D integer space. + * Warring: This version uses closest neighbor interpolation. + * + * @tparam TSpace a 2 dimensional space. + * @tparam TInputValue type of the input point e.g., TSpace::RealPoint + * @tparam TOutputValue type of the output point e.g., TSpace::Point + * @tparam TFunctor a functor operating on the output e.g., a rounding function. + * + * @see exampleAffineTransformation3d.cpp + */ +template < typename TSpace, typename TInputValue = typename TSpace::RealPoint, typename TOutputValue = typename TSpace::Point, + typename TFunctor = VectorRounding < TInputValue, TOutputValue > > +class BackwardAffineTransformation2D : public GeometricTransformation2D +{ + ///Checking concepts + BOOST_CONCEPT_ASSERT(( concepts::CSpace )); + BOOST_STATIC_ASSERT(( TSpace::dimension == 2 )); + BOOST_STATIC_ASSERT(( TOutputValue::dimension == 2 )); + //BOOST_STATIC_ASSERT(( TInputValue::dimension == 2 )); + + // ----------------------- Types ------------------------------ +public: + typedef typename TSpace::RealPoint RealPoint; + typedef typename TSpace::RealVector RealVector; + typedef Eigen::Matrix RealMatrix; + + // ----------------------- Interface -------------------------------------- +public: + /** + * Constructor. + * @param aOrigin the center of rotation. + * @param angle the angle given in radians. + * @param aTranslate the 2D dimensional vector which represents translation. + */ + BackwardAffineTransformation2D ( const RealPoint& aOrigin, const RealMatrix & aMatrix, const RealVector & aTranslate ) + { + this->origin = aOrigin; + BOOST_ASSERT((aMatrix(0,0)*aMatrix(1,1)!=aMatrix(1,0)*aMatrix(0,1))); + this->transform_matrix = aMatrix; + this->translation = aTranslate; + } + BackwardAffineTransformation2D ( const double a11, const double a12, const double a21, const double a22, const RealVector & aTranslate ) + { + BOOST_ASSERT((a11*a22!=a12*a21)); + this->origin = RealPoint(0,0); + RealMatrix aMatrix; + double det = a11*a22-a21*a12; + aMatrix(0,0) = a22/det; + aMatrix(0,1) = -a12/det; + aMatrix(1,0) = -a21/det; + aMatrix(1,1) = a11/det; + this->transform_matrix = aMatrix; + this->translation = aTranslate; + } + + TOutputValue operator()( const TInputValue & aInput ) const override + { + RealPoint p; + double a = this->transform_matrix(0,0);//transform_matrix.at(0).at(0); + double b = this->transform_matrix(0,1);//transform_matrix.at(0).at(1); + double c = this->transform_matrix(1,0);//transform_matrix.at(1).at(0); + double d = this->transform_matrix(1,1);//transform_matrix.at(1).at(1); + p[0] = ( a * ( aInput[0] - this->origin[0] - this->translation[0] ) + + b * ( aInput[1] - this->origin[1] - this->translation[1] ) ) + this->origin[0]; + + p[1] = ( c * ( aInput[0] - this->origin[0] - this->translation[0] ) + + d * ( aInput[1] - this->origin[1] - this->translation[1] ) ) + this->origin[1]; + return this->functor ( p ); + } +}; + +}// namespace DGtal::functors +}// namespace DGtal + +#endif // !defined AffineTransformation2D_h + +#undef AffineTransformation2D_RECURSES +#endif // else defined(AffineTransformation2D_RECURSES) + diff --git a/src/DGtal/images/GeometricTransformation2D.h b/src/DGtal/images/GeometricTransformation2D.h new file mode 100755 index 0000000000..b5b48ad8ea --- /dev/null +++ b/src/DGtal/images/GeometricTransformation2D.h @@ -0,0 +1,214 @@ +/** + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + **/ + +#pragma once + +/** + * @file GeometricTransformation2D.h + * @author Phuc Ngo (\c hoai-diem-phuc.ngo@loria.fr ) + * Laboratoire Lorrain de Recherche en Informatique et ses Applications (LORIA), France + * + * @date 08/01/2021 + * + * This file is part of the DGtal library. + */ + +#if defined(GeometricTransformation2D_RECURSES) +#error Recursive header files inclusion detected in GeometricTransformation2D.h +#else // defined(GeometricTransformation2D_RECURSES) +/** Prevents recursive inclusion of headers. */ +#define GeometricTransformation2D_RECURSES + +#if !defined GeometricTransformation2D_h +/** Prevents repeated inclusion of headers. */ +#define GeometricTransformation2D_h + +////////////////////////////////////////////////////////////////////////////// +// Inclusions +#include +#include +#include +#include +#include "DGtal/base/Common.h" +#include "DGtal/kernel/BasicPointFunctors.h" +#include +#include +#include +#include +////////////////////////////////////////////////////////////////////////////// + +namespace DGtal +{ +namespace functors +{ +///////////////////////////////////////////////////////////////////////////// +// Template class GeometricTransformation2D +/** + * Description of template functor like class 'GeometricTransformation2D'

+ * \brief Aim: implements geometric transformation of point in the 2D integer space. + * This version uses closest neighbor interpolation. + * + * @tparam TSpace a 2 dimensional space. + * @tparam TInputValue type of the input point e.g., TSpace::RealPoint + * @tparam TOutputValue type of the output point e.g., TSpace::Point + * @tparam TFunctor a functor operating on the output e.g., a rounding function. + * + * @see exampleAffinetransformation2d.cpp + */ +template < typename TSpace, typename TInputValue = typename TSpace::RealPoint, typename TOutputValue = typename TSpace::Point, + typename TFunctor = VectorRounding < TInputValue, TOutputValue > > +class GeometricTransformation2D +{ + ///Checking concepts + BOOST_CONCEPT_ASSERT(( concepts::CSpace )); + BOOST_STATIC_ASSERT(( TSpace::dimension == 2 )); + BOOST_STATIC_ASSERT(( TOutputValue::dimension == 2 )); + BOOST_STATIC_ASSERT(( TInputValue::dimension == 2 )); + + // ----------------------- Types ------------------------------ +public: + typedef typename TSpace::RealPoint RealPoint; + typedef typename TSpace::RealVector RealVector; + typedef Eigen::Matrix RealMatrix; + // ------------------------- Protected Datas ------------------------------ + protected: + TInputValue origin; //origin of transformation + RealMatrix transform_matrix; //Transformation matrix + RealVector translation; //Transmation vector + TFunctor functor; //Interpolation function + // ----------------------- Interface -------------------------------------- +public: + + /** + * Defaut Constructor without parameter + */ + GeometricTransformation2D () { } + /** + * Constructor. + * @param aOrigin the center of rotation. + * @param aMatrix the transformation matrix. + * @param aTranslate the 2D dimensional vector which represents translation. + */ + GeometricTransformation2D ( const RealPoint & aOrigin, const RealMatrix & aMatrix, const RealVector & aTranslate ) + : origin(aOrigin), translation(aTranslate) { + transform_matrix(0,0)=aMatrix(0,0); + transform_matrix(0,1)=aMatrix(0,1); + transform_matrix(1,0)=aMatrix(1,0); + transform_matrix(1,1)=aMatrix(1,1); + //std::cout << "transform_matrix:\n" << transform_matrix << std::endl; + } + + /** + * Operator + * + * @return the transformed point. + */ + inline + virtual + TOutputValue operator()( const TInputValue & aInput ) const + { + RealPoint p; + double a = transform_matrix(0,0);//transform_matrix.at(0).at(0); + double b = transform_matrix(0,1);//transform_matrix.at(0).at(1); + double c = transform_matrix(1,0);//transform_matrix.at(1).at(0); + double d = transform_matrix(1,1);//transform_matrix.at(1).at(1); + p[0] = ( ( a * ( aInput[0] - origin[0] ) + + b * ( aInput[1] - origin[1] ) ) + translation[0] ) + origin[0]; + + p[1] = ( ( c * ( aInput[0] - origin[0] ) + + d * ( aInput[1] - origin[1] ) ) + translation[1] ) + origin[1]; + return functor ( p ); + } + +}; + +///////////////////////////////////////////////////////////////////////////// +// Template class DomainGeometricTransformation2D +/** + * Description of template functor like class 'DomainGeometricTransformation2D'

+ * \brief Aim: implements bounds of transformed domain. + * + * @tparam TDomain a 2 dimensional domain. + * @tparam TGeometricTransformFunctor a functor which represent two dimensional geometric transformation. + * + * @see FIXME: exampleRigidtransformation2d.cpp + */ +template +class DomainGeometricTransformation2D +{ + ///Checking concepts + BOOST_STATIC_ASSERT(( TDomain::dimension == 2 )); + BOOST_CONCEPT_ASSERT(( concepts::CDomain )); + + // ----------------------- Types ------------------------------ +public: + typedef std::pair < typename TDomain::Space::Point, typename TDomain::Space::Point > Bounds; + // ------------------------- Protected Datas ------------------------------ +protected: + const TGeometricTransformFunctor & transform; + // ----------------------- Interface -------------------------------------- +public: + /** + * Constructor. + * @param aGeometricFunctor - geometric transformation functor. + */ + DomainGeometricTransformation2D ( const TGeometricTransformFunctor & aFunctor ) : transform ( aFunctor ) {} + + /** + * Operator + * + * @return bounds of the transformed domain. + */ + inline + Bounds operator()( const TDomain & aInput ) const + { + typedef typename TDomain::Point Point; + Point points[4]; + points[0] = transform ( aInput.lowerBound() ); + points[1] = transform ( aInput.upperBound() ); + points[2] = transform ( Point ( aInput.upperBound()[0], aInput.lowerBound()[1] ) ); + points[3] = transform ( Point ( aInput.lowerBound()[0], aInput.upperBound()[1] ) ); + + Point t_min ( INT_MAX, INT_MAX ), t_max ( INT_MIN, INT_MIN ); + for ( unsigned int i = 0; i < 4 ; i++ ) + { + if ( points[i][0] < t_min[0] ) + t_min[0] = points[i][0]; + if ( points[i][1] < t_min[1] ) + t_min[1] = points[i][1]; + + if ( points[i][0] > t_max[0] ) + t_max[0] = points[i][0]; + if ( points[i][1] > t_max[1] ) + t_max[1] = points[i][1]; + } + + Bounds bounds; + bounds.first = t_min; + bounds.second = t_max; + return bounds; + } +}; + +}// namespace DGtal::functors +}// namespace DGtal + +#endif // !defined GeometricTransformation2D_h + +#undef GeometricTransformation2D_RECURSES +#endif // else defined(GeometricTransformation2D_RECURSES) + + diff --git a/src/DGtal/images/doc/images/church_AffineBackward.png b/src/DGtal/images/doc/images/church_AffineBackward.png new file mode 100644 index 0000000000000000000000000000000000000000..e57401f6212a1b77506e7c344ae4c00bb7515012 GIT binary patch literal 47891 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 Date: Fri, 14 May 2021 18:13:07 +0200 Subject: [PATCH 2/6] comments constructors --- src/DGtal/images/AffineTransformation2D.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/DGtal/images/AffineTransformation2D.h b/src/DGtal/images/AffineTransformation2D.h index ae3e0ce9d2..3c89fecf10 100755 --- a/src/DGtal/images/AffineTransformation2D.h +++ b/src/DGtal/images/AffineTransformation2D.h @@ -90,7 +90,7 @@ class ForwardAffineTransformation2D : public GeometricTransformation2D transform_matrix = aMatrix; this->translation = aTranslate; } + + /** + * Constructor. + * @param a11, a12, a21, a22 the values of affine matrix. + * @param aTranslate the 2D dimensional vector which represents translation. + */ ForwardAffineTransformation2D ( const double a11, const double a12, const double a21, const double a22, const RealVector & aTranslate ) { BOOST_ASSERT((a11*a22!=a12*a21)); @@ -149,7 +155,7 @@ class BackwardAffineTransformation2D : public GeometricTransformation2D transform_matrix = aMatrix; this->translation = aTranslate; } + + /** + * Constructor. + * @param a11, a12, a21, a22 the values of affine matrix. + * @param aTranslate the 2D dimensional vector which represents translation. + */ BackwardAffineTransformation2D ( const double a11, const double a12, const double a21, const double a22, const RealVector & aTranslate ) { BOOST_ASSERT((a11*a22!=a12*a21)); From 00b4b038362646656ed6130401c1209890d90243 Mon Sep 17 00:00:00 2001 From: ngophuc Date: Fri, 14 May 2021 18:25:06 +0200 Subject: [PATCH 3/6] comments constructors --- src/DGtal/images/AffineTransformation2D.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DGtal/images/AffineTransformation2D.h b/src/DGtal/images/AffineTransformation2D.h index 3c89fecf10..005224496d 100755 --- a/src/DGtal/images/AffineTransformation2D.h +++ b/src/DGtal/images/AffineTransformation2D.h @@ -89,7 +89,7 @@ class ForwardAffineTransformation2D : public GeometricTransformation2D Date: Fri, 14 May 2021 18:25:23 +0200 Subject: [PATCH 4/6] comments constructors --- src/DGtal/images/AffineTransformation2D.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DGtal/images/AffineTransformation2D.h b/src/DGtal/images/AffineTransformation2D.h index 005224496d..9a4b770153 100755 --- a/src/DGtal/images/AffineTransformation2D.h +++ b/src/DGtal/images/AffineTransformation2D.h @@ -154,7 +154,7 @@ class BackwardAffineTransformation2D : public GeometricTransformation2D Date: Fri, 12 Aug 2022 09:11:29 +0200 Subject: [PATCH 5/6] Update ChangeLog.md --- ChangeLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog.md b/ChangeLog.md index 31c52e5340..e54f5951f2 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -12,6 +12,7 @@ digital sets in nD, and helper classes for using full convexity in practice (local geometric analysis, tangency and shortest paths) (Jacques-Olivier Lachaud,[#1594](https://github.com/DGtal-team/DGtal/pull/1594)) + - Add Affine Transformation in the geometry transformation module (Phuc Ngo,[#1571](https://github.com/DGtal-team/DGtal/pull/1571)) - *Mathematical Package* - Add Lagrange polynomials and Lagrange interpolation From ebb2baea858d88eb72aed59afa227f8714150f78 Mon Sep 17 00:00:00 2001 From: ngophuc Date: Fri, 12 Aug 2022 09:29:03 +0200 Subject: [PATCH 6/6] Update GeometricTransformation2D.h --- src/DGtal/images/GeometricTransformation2D.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DGtal/images/GeometricTransformation2D.h b/src/DGtal/images/GeometricTransformation2D.h index b5b48ad8ea..41633a95ef 100755 --- a/src/DGtal/images/GeometricTransformation2D.h +++ b/src/DGtal/images/GeometricTransformation2D.h @@ -163,7 +163,7 @@ class DomainGeometricTransformation2D public: /** * Constructor. - * @param aGeometricFunctor - geometric transformation functor. + * @param aFunctor - geometric transformation functor. */ DomainGeometricTransformation2D ( const TGeometricTransformFunctor & aFunctor ) : transform ( aFunctor ) {}