2 *  This program is free software: you can redistribute it and/or modify
 
    3 *  it under the terms of the GNU Lesser General Public License as
 
    4 *  published by the Free Software Foundation, either version 3 of the
 
    5 *  License, or  (at your option) any later version.
 
    7 *  This program is distributed in the hope that it will be useful,
 
    8 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
    9 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
   10 *  GNU General Public License for more details.
 
   12 *  You should have received a copy of the GNU General Public License
 
   13 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
   18 * @file ContourHelper.ih
 
   19 * @author Bertrand Kerautret (\c kerautre@loria.fr )
 
   20 * LORIA (CNRS, UMR 7503), University of Nancy, France
 
   24 * Implementation of inline methods defined in ContourHelper.h
 
   26 * This file is part of the DGtal library.
 
   29///////////////////////////////////////////////////////////////////////////////
 
   30// IMPLEMENTATION of inline methods.
 
   31///////////////////////////////////////////////////////////////////////////////
 
   33//////////////////////////////////////////////////////////////////////////////
 
   35#include "DGtal/geometry/curves/FreemanChain.h"
 
   36//////////////////////////////////////////////////////////////////////////////
 
   40///////////////////////////////////////////////////////////////////////////////
 
   41// Implementation of inline methods                                          //
 
   45template <typename TPoint>
 
   47DGtal::PointVector<TPoint::dimension, double>
 
   48DGtal::ContourHelper::getBarycenter(const std::vector<TPoint> & aSet)
 
   50  DGtal::PointVector<TPoint::dimension, double> ptMean;
 
   51  for(unsigned int i =0; i<aSet.size(); i++)
 
   53      for(typename TPoint::Dimension j=0; j < TPoint::dimension; j++)
 
   55          ptMean[j] +=  static_cast<double>(aSet.at(i)[j]);
 
   58  for(unsigned int j=0; j < TPoint::dimension; j++)
 
   60      ptMean[j] /= aSet.size();
 
   70template <typename TIterator, typename TOutputIterator>
 
   73DGtal::ContourHelper::pixels2pixels8C(const TIterator &itb, const TIterator &ite,
 
   78  auto size = std::distance(itb, ite);
 
   83      short code = FreemanChain<int>::freemanCode4C((*(it+1))[0]-(*it)[0],(*(it+1))[1]-(*it)[1]);
 
   84      short codeNext = FreemanChain<int>::freemanCode4C((*(it+2))[0]-(*(it+1))[0],(*(it+2))[1]-(*(it+1))[1]);
 
   85      if((code != 8 && codeNext != 8) &&  (((4+(int)codeNext-(int)code)%4)==1 || ((4+(int)codeNext-(int)code)%4)==3))
 
   99template <typename TPoint>
 
  102DGtal::ContourHelper::isCounterClockWise(const std::vector<TPoint> & aCurve)
 
  105  TPoint p0 = *(aCurve.begin());
 
  106  typename std::vector<TPoint>::const_iterator itContour = aCurve.begin();
 
  110  for( ; itContour!=aCurve.end(); itContour++)
 
  112      TPoint pSuiv = *itContour;
 
  113      typename TPoint::Coordinate v1x = p[0] - p0[0];
 
  114      typename TPoint::Coordinate v1y = p[1] - p0[1];
 
  115      typename TPoint::Coordinate v2x = pSuiv[0] - p[0];
 
  116      typename TPoint::Coordinate v2y = pSuiv[1] - p[1];
 
  117      sum+=(v1x*v2y)-(v2x*v1y);
 
  127///////////////////////////////////////////////////////////////////////////////
 
  128// Implementation of inline functions and external operators                 //
 
  131 * Overloads 'operator<<' for displaying objects of class 'ContourHelper'.
 
  132 * @param out the output stream where the object is written.
 
  133 * @param object the object of class 'ContourHelper' to write.
 
  134 * @return the output stream after the writing.
 
  138DGtal::operator<< ( std::ostream & out,
 
  139                  const ContourHelper & object )
 
  141    object.selfDisplay ( out );
 
  146///////////////////////////////////////////////////////////////////////////////