9 #ifndef LOCAL_OPTIMIZE_H_INCLUDED_
10 #define LOCAL_OPTIMIZE_H_INCLUDED_
18 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
20 const DiscreteFunction& f,
22 OutputIterator result,
23 ConvertIndex convert_index
32 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
34 const DiscreteFunction& f,
36 OutputIterator result,
37 ConvertIndex convert_index
46 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
48 const DiscreteFunction& f,
50 OutputIterator result,
51 ConvertIndex convert_index
57 template<
class DiscreteFunction>
60 template<
class DiscreteFunction>
63 template<
class DiscreteFunction>
66 template<
class DiscreteFunction>
77 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
79 const DiscreteFunction& f,
81 OutputIterator result,
82 ConvertIndex convert_index
85 const int FSZ = f.size() - 1;
86 for (
int i = 1;
i < FSZ;
i++)
88 if (f[
i] < f[
i - 1] && f[
i] < f[
i + 1] && f[
i] <= -thresh)
90 *result++ = convert_index(
i);
93 if (f[
i] > f[
i - 1] && f[
i] > f[
i + 1] && f[
i] >= thresh)
95 *result++ = convert_index(
i);
107 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
109 const DiscreteFunction& f,
111 OutputIterator result,
112 ConvertIndex convert_index
115 const int FSZ = f.size() - 1;
116 for (
int i = 1;
i < FSZ; ++
i)
118 const int FI_SZ = f[
i].size() - 1;
119 for (
int j = 1; j < FI_SZ; ++j)
123 *result++ = convert_index(
i, j);
128 *result++ = convert_index(
i, j);
136 template<
class DiscreteFunction>
139 for (
int l_i = i - 1; l_i <= i + 1; ++l_i)
141 for (
int l_j = j - 1; l_j <= j + 1; ++l_j)
143 if (f[l_i][l_j] <= f[i][j])
145 if (i != l_i || j != l_j)
156 template<
class DiscreteFunction>
159 for (
int l_i = i - 1; l_i <= i + 1; ++l_i)
161 for (
int l_j = j - 1; l_j <= j + 1; ++l_j)
163 if (f[l_i][l_j] >= f[i][j])
165 if (i != l_i || j != l_j)
181 template<
class DiscreteFunction,
class OutputIterator,
class ConvertIndex>
183 const DiscreteFunction& f,
185 OutputIterator result,
186 ConvertIndex convert_index
189 const int FSZ = f.size() - 1;
190 for (
int i = 1;
i < FSZ; ++
i)
192 const int FI_SZ = f[
i].size() - 1;
193 for (
int j = 1; j < FI_SZ; ++j)
195 const int FIJ_SZ = f[
i][j].size() - 1;
196 for (
int k = 1;
k < FIJ_SZ; ++
k)
200 *result++ = convert_index(
i, j,
k);
205 *result++ = convert_index(
i, j,
k);
214 template<
class DiscreteFunction>
217 for (
int l_i = i - 1; l_i <= i + 1; ++l_i)
219 for (
int l_j = j - 1; l_j <= j + 1; ++l_j)
221 for (
int l_k = k - 1; l_k <= k + 1; ++l_k)
223 if (f[l_i][l_j][l_k] <= f[i][j][k])
225 if (i != l_i || j != l_j || k != l_k)
237 template<
class DiscreteFunction>
240 for (
int l_i = i - 1; l_i <= i + 1; ++l_i)
242 for (
int l_j = j - 1; l_j <= j + 1; ++l_j)
244 for (
int l_k = k - 1; l_k <= k + 1; ++l_k)
246 if (f[l_i][l_j][l_k] >= f[i][j][k])
248 if (i != l_i || j != l_j || k != l_k)
for k
Definition: APPgetLargeConnectedEdges.m:61
OutputIterator local_argoptima_1D(const DiscreteFunction &f, double thresh, OutputIterator result, ConvertIndex convert_index)
Find the local optima of a 1-dimensional discrete function.
Definition: blob_local_optimize.h:78
bool less_than_neighbors_3D(int i, int j, int k, const DiscreteFunction &f)
Definition: blob_local_optimize.h:215
bool less_than_neighbors_2D(int i, int j, const DiscreteFunction &f)
Definition: blob_local_optimize.h:137
bool greater_than_neighbors_3D(int i, int j, int k, const DiscreteFunction &f)
Definition: blob_local_optimize.h:238
bool greater_than_neighbors_2D(int i, int j, const DiscreteFunction &f)
Definition: blob_local_optimize.h:157
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
OutputIterator local_argoptima_2D(const DiscreteFunction &f, double thresh, OutputIterator result, ConvertIndex convert_index)
Find the local optima of a 2-dimensional discrete function.
Definition: blob_local_optimize.h:108
OutputIterator local_argoptima_3D(const DiscreteFunction &f, double thresh, OutputIterator result, ConvertIndex convert_index)
Find the local optima of a 3-dimensional discrete function.
Definition: blob_local_optimize.h:182