DGtal 1.4.0
Loading...
Searching...
No Matches
TwoStepLocalLengthEstimator.ih
1/**
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.
6 *
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.
11 *
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/>.
14 *
15 **/
16
17/**
18 * @file TwoStepLocalLengthEstimator.ih
19 * @author David Coeurjolly (\c david.coeurjolly@liris.cnrs.fr )
20 * Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
21 *
22 * @date 2011/06/27
23 *
24 * Implementation of inline methods defined in TwoStepLocalLengthEstimator.h
25 *
26 * This file is part of the DGtal library.
27 */
28
29
30//////////////////////////////////////////////////////////////////////////////
31#include <cstdlib>
32//////////////////////////////////////////////////////////////////////////////
33
34///////////////////////////////////////////////////////////////////////////////
35// IMPLEMENTATION of inline methods.
36///////////////////////////////////////////////////////////////////////////////
37
38///////////////////////////////////////////////////////////////////////////////
39// ----------------------- Standard services ------------------------------
40
41template <typename T>
42inline
43DGtal::TwoStepLocalLengthEstimator<T>::TwoStepLocalLengthEstimator(const double wdirect, const double wdiag)
44 : myWeightDirect(wdirect), myWeightDiagonal(wdiag)
45{}
46
47///////////////////////////////////////////////////////////////////////////////
48// Interface - public :
49
50template <typename T>
51inline
52typename DGtal::TwoStepLocalLengthEstimator<T>::Quantity
53DGtal::TwoStepLocalLengthEstimator<T>::eval(const ConstIterator& itb,
54 const ConstIterator& ite, const double h) const
55{
56 ASSERT(h > 0);
57
58 if ( DGtal::isEmpty(itb,ite) )
59 return 0.;
60
61 unsigned int nbDirect=0;
62 unsigned int nbDiag=0;
63
64 ConstIterator i = itb, ii = itb;
65 ++ii;
66
67 do
68 {
69 if ((i->second).dot(ii->second) == 0)
70 nbDiag++;
71 else
72 nbDirect+=2;
73
74 ++i;
75 if (i == ite)
76 continue;
77
78 ++i; ++ii;
79
80 if (ii == ite)
81 continue;
82
83 ++ii;
84 }
85 while ( (i != ite) && (ii != ite) );
86
87 if ( i != ite )
88 nbDirect++;
89
90 return (nbDiag*myWeightDiagonal + nbDirect*myWeightDirect) * h;
91}
92
93
94
95
96
97
98// ------------------------------------------------------------------------
99template <typename T>
100inline
101void
102DGtal::TwoStepLocalLengthEstimator<T>::selfDisplay ( std::ostream & out ) const
103{
104 out << "[TwoStepLocalLengthEstimator]";
105 if (isValid())
106 out <<" initialized";
107 else
108 out<< " not initialized";
109}
110
111// ------------------------------------------------------------------------
112template <typename T>
113inline
114bool
115DGtal::TwoStepLocalLengthEstimator<T>::isValid() const
116{
117 return true;
118}
119
120
121
122///////////////////////////////////////////////////////////////////////////////
123// Implementation of inline functions //
124
125template <typename T>
126inline
127std::ostream&
128DGtal::operator<< ( std::ostream & out,
129 const TwoStepLocalLengthEstimator<T> & object )
130{
131 object.selfDisplay( out );
132 return out;
133}
134
135// //
136///////////////////////////////////////////////////////////////////////////////
137
138