36 #ifndef VIGRA_LOCALMINMAX_HXX
37 #define VIGRA_LOCALMINMAX_HXX
41 #include "utilities.hxx"
42 #include "stdimage.hxx"
43 #include "initimage.hxx"
44 #include "labelimage.hxx"
45 #include "labelvolume.hxx"
46 #include "pixelneighborhood.hxx"
47 #include "voxelneighborhood.hxx"
61 template <
class SrcIterator,
class SrcAccessor,
65 isLocalExtremum(SrcIterator is, SrcAccessor sa, Neighborhood,
66 typename SrcAccessor::value_type threshold,
69 typename SrcAccessor::value_type v = sa(is);
71 if(!compare(v, threshold))
74 int directionCount = Neighborhood::nearBorderDirectionCount(atBorder);
75 RestrictedNeighborhoodCirculator<SrcIterator, Neighborhood> sc(is, atBorder);
76 for(
int i = 0; i < directionCount; ++i, ++sc)
78 if(!compare(v, sa(sc)))
84 template <
class SrcIterator,
class SrcAccessor,
85 class DestIterator,
class DestAccessor,
86 class DestValue,
class Neighborhood,
89 localMinMax(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
90 DestIterator dul, DestAccessor da,
91 DestValue marker, Neighborhood neighborhood,
92 typename SrcAccessor::value_type threshold,
94 bool allowExtremaAtBorder =
false)
96 int w = slr.x - sul.x;
97 int h = slr.y - sul.y;
101 if(allowExtremaAtBorder)
103 SrcIterator is = sul;
104 DestIterator
id = dul;
106 for(x=0; x<w; ++x, ++is.x, ++
id.x)
108 if(isLocalExtremum(is, sa, neighborhood, threshold, compare,
113 is = sul + Diff2D(0,1);
114 id = dul + Diff2D(0,1);
116 for(y=1; y<h-1; ++y, ++is.y, ++
id.y)
118 if(isLocalExtremum(is, sa, neighborhood, threshold, compare,
123 is = sul + Diff2D(w-1,1);
124 id = dul + Diff2D(w-1,1);
126 for(y=1; y<h-1; ++y, ++is.y, ++
id.y)
128 if(isLocalExtremum(is, sa, neighborhood, threshold, compare,
133 is = sul + Diff2D(0,h-1);
134 id = dul + Diff2D(0,h-1);
136 for(x=0; x<w; ++x, ++is.x, ++
id.x)
138 if(isLocalExtremum(is, sa, neighborhood, threshold, compare,
149 for(y=0; y<h; ++y, ++sul.y, ++dul.y)
151 SrcIterator sx = sul;
152 DestIterator dx = dul;
154 for(x=0; x<w; ++x, ++sx.x, ++dx.x)
156 typename SrcAccessor::value_type v = sa(sx);
158 if(!compare(v, threshold))
162 NeighborhoodCirculator<SrcIterator, Neighborhood> sc(sx);
163 for(i = 0; i < Neighborhood::DirectionCount; ++i, ++sc)
165 if(!compare(v, sa(sc)))
169 if(i == Neighborhood::DirectionCount)
175 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
176 class DestIterator,
class DestAccessor,
class DestValue,
177 class Neighborhood,
class Compare>
179 localMinMax3D(SrcIterator sul, SrcShape shp, SrcAccessor sa,
180 DestIterator dul, DestAccessor da,
182 Neighborhood neighborhood,
183 typename SrcAccessor::value_type threshold,
185 bool allowExtremaAtBorder =
false)
193 if (allowExtremaAtBorder)
195 throw std::runtime_error(
"not implemented!");
247 SrcIterator zs = sul;
248 DestIterator zd = dul;
250 for (z = 0; z != d; ++z, ++zs.dim2(), ++zd.dim2())
255 for (y = 0; y != h; ++y, ++ys.dim1(), ++yd.dim1())
260 for (x = 0; x != w; ++x, ++xs.dim0(), ++xd.dim0())
263 typename SrcAccessor::value_type v = sa(xs);
264 if (!compare(v, threshold))
268 NeighborhoodCirculator<SrcIterator, Neighborhood> sc(xs);
269 for (i = 0; i < Neighborhood::DirectionCount; ++i, ++sc)
271 if(!compare(v, sa(sc)))
275 if(i == Neighborhood::DirectionCount)
282 template <
class SrcIterator,
class SrcAccessor,
283 class DestIterator,
class DestAccessor,
class DestValue,
284 class Neighborhood,
class Compare,
class Equal>
286 extendedLocalMinMax(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
287 DestIterator dul, DestAccessor da, DestValue marker,
289 Compare compare, Equal equal,
290 typename SrcAccessor::value_type threshold,
291 bool allowExtremaAtBorder =
false)
293 typedef typename SrcAccessor::value_type SrcType;
295 int w = slr.x - sul.x;
296 int h = slr.y - sul.y;
300 BasicImage<int> labels(w,h);
302 int number_of_regions =
303 labelImage(sul, slr, sa, labels.upperLeft(), labels.accessor(),
304 (Neighborhood::DirectionCount == 8), equal);
307 std::vector<unsigned char> isExtremum(number_of_regions+1, (
unsigned char)1);
309 BasicImage<int>::traverser ly = labels.upperLeft();
311 for(y=0; y<h; ++y, ++sul.y, ++ly.y)
313 SrcIterator sx = sul;
314 BasicImage<int>::traverser lx(ly);
316 for(x=0; x<w; ++x, ++sx.x, ++lx.x)
321 if(isExtremum[lab] == 0)
324 if(!compare(v, threshold))
334 NeighborhoodCirculator<SrcIterator, Neighborhood> sc(sx);
335 NeighborhoodCirculator<BasicImage<int>::traverser, Neighborhood> lc(lx);
336 for(i=0; i<Neighborhood::DirectionCount; ++i, ++sc, ++lc)
338 if(lab != *lc && compare(sa(sc),v))
347 if(allowExtremaAtBorder)
349 RestrictedNeighborhoodCirculator<SrcIterator, Neighborhood>
350 sc(sx, atBorder), scend(sc);
353 if(lab != *(lx+sc.diff()) && compare(sa(sc),v))
359 while(++sc != scend);
369 ly = labels.upperLeft();
370 for(y=0; y<h; ++y, ++dul.y, ++ly.y)
372 DestIterator xd = dul;
373 BasicImage<int>::Iterator lx(ly);
375 for(x=0; x<w; ++x, ++xd.x, ++lx.x)
383 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
384 class DestIterator,
class DestAccessor,
class DestValue,
385 class Neighborhood,
class Compare,
class Equal>
387 extendedLocalMinMax3D(SrcIterator sul, SrcShape shp, SrcAccessor sa,
388 DestIterator dul, DestAccessor da,
390 Neighborhood neighbourhood,
393 typename SrcAccessor::value_type threshold,
394 bool allowExtremaAtBorder =
false)
396 typedef typename SrcAccessor::value_type SrcType;
404 MultiArray<3, int> labels(shp);
406 int number_of_regions =
407 labelVolume(sul, shp, sa, labels.traverser_begin(),
408 typename AccessorTraits<int>::default_accessor(),
411 MultiArray<3, int>::traverser zl(labels.traverser_begin());
413 SrcIterator zs = sul;
414 DestIterator zd = dul;
417 std::vector<unsigned char> isExtremum(number_of_regions + 1, (
unsigned char)1);
419 for (z = 0; z != d; ++z, ++zs.dim2(), ++zd.dim2(), ++zl.dim2())
423 MultiArray<3, int>::traverser yl(zl);
425 for (y = 0; y != h; ++y, ++ys.dim1(), ++yd.dim1(), ++yl.dim1())
429 MultiArray<3, int>::traverser xl(yl);
431 for (x = 0; x != w; ++x, ++xs.dim0(), ++xd.dim0(), ++xl.dim0())
437 if (isExtremum[lab] == 0)
440 if (!compare(v, threshold))
450 NeighborhoodCirculator<SrcIterator, Neighborhood> sc(xs);
451 NeighborhoodCirculator<MultiArray<3, int>::traverser, Neighborhood> lc(xl);
452 for (i = 0; i < Neighborhood::DirectionCount; ++i, ++sc, ++lc)
454 if (lab != *lc && compare(sa(sc), v))
464 if (allowExtremaAtBorder)
466 RestrictedNeighborhoodCirculator<SrcIterator, Neighborhood>
467 sc(xs, atBorder), scend(sc);
470 if (lab != *(xl + sc.diff()) && compare(sa(sc), v))
476 while (++sc != scend);
487 zl = labels.traverser_begin();
491 for (z = 0; z != d; ++z, ++zs.dim2(), ++zd.dim2(), ++zl.dim2())
495 MultiArray<3, int>::traverser yl(zl);
497 for (y = 0; y != h; ++y, ++ys.dim1(), ++yd.dim1(), ++yl.dim1())
501 MultiArray<3, int>::traverser xl(yl);
503 for (x = 0; x != w; ++x, ++xs.dim0(), ++xd.dim0(), ++xl.dim0())
512 template <
class SrcIterator,
class SrcAccessor,
513 class DestIterator,
class DestAccessor,
class DestValue,
514 class Neighborhood,
class Compare,
class Equal>
516 extendedLocalMinMaxOld(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
517 DestIterator dul, DestAccessor da, DestValue marker,
519 Compare compare, Equal equal,
520 typename SrcAccessor::value_type threshold,
521 bool allowExtremaAtBorder =
false)
523 typedef typename SrcAccessor::value_type SrcType;
525 int w = slr.x - sul.x;
526 int h = slr.y - sul.y;
530 BasicImage<int> labels(w,h);
532 int number_of_regions =
533 labelImage(sul, slr, sa, labels.upperLeft(), labels.accessor(),
534 (Neighborhood::DirectionCount == 8), equal);
537 std::vector<unsigned char> isExtremum(number_of_regions+1, (
unsigned char)1);
539 BasicImage<int>::traverser ly = labels.upperLeft();
541 for(y=0; y<h; ++y, ++sul.y, ++ly.y)
543 SrcIterator sx = sul;
544 BasicImage<int>::traverser lx(ly);
546 for(x=0; x<w; ++x, ++sx.x, ++lx.x)
550 if(x == 0 || y == 0 || x == w-1 || y == h-1 || !compare(v, threshold))
558 NeighborhoodCirculator<SrcIterator, Neighborhood> sc(sx);
559 NeighborhoodCirculator<BasicImage<int>::traverser, Neighborhood> lc(lx);
560 for(i=0; i<Neighborhood::DirectionCount; ++i, ++sc, ++lc)
562 if(lab != *lc && compare(sa(sc),v))
569 ly = labels.upperLeft();
570 for(y=0; y<h; ++y, ++dul.y, ++ly.y)
572 DestIterator xd = dul;
573 BasicImage<int>::Iterator lx(ly);
575 for(x=0; x<w; ++x, ++xd.x, ++lx.x)
607 double marker, thresh;
609 bool use_threshold, allow_at_border, allow_plateaus;
620 use_threshold(false),
621 allow_at_border(false),
622 allow_plateaus(false)
660 use_threshold =
true;
819 doxygen_overloaded_function(template <...>
void localMinima)
821 template <
class SrcIterator,
class SrcAccessor,
822 class DestIterator,
class DestAccessor>
824 localMinima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
825 DestIterator dul, DestAccessor da,
826 LocalMinmaxOptions
const & options = LocalMinmaxOptions())
828 typedef typename SrcAccessor::value_type SrcType;
829 typedef typename DestAccessor::value_type DestType;
831 SrcType threshold = options.use_threshold
832 ? std::min(NumericTraits<SrcType>::max(), (SrcType)options.thresh)
833 : NumericTraits<SrcType>::max();
834 DestType marker = (DestType)options.marker;
836 if(options.allow_plateaus)
838 if(options.neigh == 0 || options.neigh == 4)
840 detail::extendedLocalMinMax(sul, slr, sa, dul, da, marker,
FourNeighborCode(),
841 std::less<SrcType>(), std::equal_to<SrcType>(),
842 threshold, options.allow_at_border);
844 else if(options.neigh == 1 || options.neigh == 8)
847 std::less<SrcType>(), std::equal_to<SrcType>(),
848 threshold, options.allow_at_border);
851 vigra_precondition(
false,
"localMinima(): neighborhood must be 4 or 8.");
856 if(options.neigh == 0 || options.neigh == 4)
859 threshold, std::less<SrcType>(), options.allow_at_border);
861 else if(options.neigh == 1 || options.neigh == 8)
864 threshold, std::less<SrcType>(), options.allow_at_border);
867 vigra_precondition(
false,
"localMinima(): neighborhood must be 4 or 8.");
871 template <
class SrcIterator,
class SrcAccessor,
872 class DestIterator,
class DestAccessor,
875 localMinima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
876 DestIterator dul, DestAccessor da,
879 detail::localMinMax(sul, slr, sa, dul, da, marker, neighborhood,
880 NumericTraits<typename SrcAccessor::value_type>::max(),
881 std::less<typename SrcAccessor::value_type>());
884 template <
class SrcIterator,
class SrcAccessor,
885 class DestIterator,
class DestAccessor,
888 localMinima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
889 DestIterator dul, DestAccessor da,
892 detail::localMinMax(sul, slr, sa, dul, da, marker, neighborhood,
893 NumericTraits<typename SrcAccessor::value_type>::max(),
894 std::less<typename SrcAccessor::value_type>());
897 template <
class SrcIterator,
class SrcAccessor,
898 class DestIterator,
class DestAccessor,
class DestValue>
900 localMinima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
901 DestIterator dul, DestAccessor da,
907 template <
class SrcIterator,
class SrcAccessor,
908 class DestIterator,
class DestAccessor,
911 localMinima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
912 pair<DestIterator, DestAccessor> dest,
916 dest.first, dest.second, marker, neighborhood);
919 template <
class SrcIterator,
class SrcAccessor,
920 class DestIterator,
class DestAccessor,
923 localMinima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
924 pair<DestIterator, DestAccessor> dest,
928 dest.first, dest.second, marker, neighborhood);
931 template <
class SrcIterator,
class SrcAccessor,
932 class DestIterator,
class DestAccessor,
class DestValue>
934 localMinima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
935 pair<DestIterator, DestAccessor> dest,
942 template <
class SrcIterator,
class SrcAccessor,
943 class DestIterator,
class DestAccessor>
945 localMinima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
946 pair<DestIterator, DestAccessor> dest,
947 LocalMinmaxOptions
const & options = LocalMinmaxOptions())
950 dest.first, dest.second, options);
969 doxygen_overloaded_function(template <...>
void localMinima3D)
971 template<
class SrcIterator,
class SrcAccessor,
class SrcShape,
972 class DestIterator,
class DestAccessor,
class DestValue>
975 DestIterator dul, DestAccessor da,
979 detail::localMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
980 NumericTraits<typename SrcAccessor::value_type>::max(),
981 std::less<typename SrcAccessor::value_type>());
984 template<
class SrcIterator,
class SrcAccessor,
class SrcShape,
985 class DestIterator,
class DestAccessor,
class DestValue>
988 DestIterator dul, DestAccessor da,
992 detail::localMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
993 NumericTraits<typename SrcAccessor::value_type>::max(),
994 std::less<typename SrcAccessor::value_type>());
997 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
998 class DestIterator,
class DestAccessor,
class DestValue>
1000 localMinima3D(SrcIterator sul, SrcShape slr, SrcAccessor sa,
1001 DestIterator dul, DestAccessor da,
1007 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1008 class DestIterator,
class DestAccessor,
class DestValue>
1010 localMinima3D(triple<SrcIterator, SrcShape, SrcAccessor> src,
1011 pair<DestIterator, DestAccessor> dest,
1015 localMinima3D(src.first, src.second, src.third, dest.first, dest.second,
1016 marker, neighborhood);
1019 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1020 class DestIterator,
class DestAccessor,
class DestValue>
1022 localMinima3D(triple<SrcIterator, SrcShape, SrcAccessor> src,
1023 pair<DestIterator, DestAccessor> dest,
1027 localMinima3D(src.first, src.second, src.third, dest.first, dest.second,
1028 marker, neighborhood);
1162 doxygen_overloaded_function(template <...>
void localMaxima)
1164 template <
class SrcIterator,
class SrcAccessor,
1165 class DestIterator,
class DestAccessor>
1167 localMaxima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
1168 DestIterator dul, DestAccessor da,
1169 LocalMinmaxOptions
const & options = LocalMinmaxOptions())
1171 typedef typename SrcAccessor::value_type SrcType;
1172 typedef typename DestAccessor::value_type DestType;
1174 SrcType threshold = options.use_threshold
1175 ? std::max(NumericTraits<SrcType>::min(), (SrcType)options.thresh)
1176 : NumericTraits<SrcType>::min();
1177 DestType marker = (DestType)options.marker;
1179 if(options.allow_plateaus)
1181 if(options.neigh == 0 || options.neigh == 4)
1183 detail::extendedLocalMinMax(sul, slr, sa, dul, da, marker,
FourNeighborCode(),
1184 std::greater<SrcType>(), std::equal_to<SrcType>(),
1185 threshold, options.allow_at_border);
1187 else if(options.neigh == 1 || options.neigh == 8)
1190 std::greater<SrcType>(), std::equal_to<SrcType>(),
1191 threshold, options.allow_at_border);
1194 vigra_precondition(
false,
"localMaxima(): neighborhood must be 4 or 8.");
1198 if(options.neigh == 0 || options.neigh == 4)
1201 threshold, std::greater<SrcType>(), options.allow_at_border);
1203 else if(options.neigh == 1 || options.neigh == 8)
1206 threshold, std::greater<SrcType>(), options.allow_at_border);
1209 vigra_precondition(
false,
"localMaxima(): neighborhood must be 4 or 8.");
1213 template <
class SrcIterator,
class SrcAccessor,
1214 class DestIterator,
class DestAccessor,
1217 localMaxima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
1218 DestIterator dul, DestAccessor da,
1221 detail::localMinMax(sul, slr, sa, dul, da, marker, neighborhood,
1222 NumericTraits<typename SrcAccessor::value_type>::min(),
1223 std::greater<typename SrcAccessor::value_type>());
1226 template <
class SrcIterator,
class SrcAccessor,
1227 class DestIterator,
class DestAccessor,
1230 localMaxima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
1231 DestIterator dul, DestAccessor da,
1234 detail::localMinMax(sul, slr, sa, dul, da, marker, neighborhood,
1235 NumericTraits<typename SrcAccessor::value_type>::min(),
1236 std::greater<typename SrcAccessor::value_type>());
1239 template <
class SrcIterator,
class SrcAccessor,
1240 class DestIterator,
class DestAccessor,
class DestValue>
1242 localMaxima(SrcIterator sul, SrcIterator slr, SrcAccessor sa,
1243 DestIterator dul, DestAccessor da,
1249 template <
class SrcIterator,
class SrcAccessor,
1250 class DestIterator,
class DestAccessor,
1253 localMaxima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
1254 pair<DestIterator, DestAccessor> dest,
1258 dest.first, dest.second, marker, neighborhood);
1261 template <
class SrcIterator,
class SrcAccessor,
1262 class DestIterator,
class DestAccessor,
1265 localMaxima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
1266 pair<DestIterator, DestAccessor> dest,
1270 dest.first, dest.second, marker, neighborhood);
1273 template <
class SrcIterator,
class SrcAccessor,
1274 class DestIterator,
class DestAccessor,
class DestValue>
1276 localMaxima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
1277 pair<DestIterator, DestAccessor> dest,
1284 template <
class SrcIterator,
class SrcAccessor,
1285 class DestIterator,
class DestAccessor>
1287 localMaxima(triple<SrcIterator, SrcIterator, SrcAccessor> src,
1288 pair<DestIterator, DestAccessor> dest,
1289 LocalMinmaxOptions
const & options = LocalMinmaxOptions())
1292 dest.first, dest.second, options);
1310 doxygen_overloaded_function(template <...>
void localMaxima3D)
1312 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1313 class DestIterator,
class DestAccessor,
class DestValue>
1315 localMaxima3D(SrcIterator sul, SrcShape slr, SrcAccessor sa,
1316 DestIterator dul, DestAccessor da,
1320 detail::localMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
1321 NumericTraits<typename SrcAccessor::value_type>::min(),
1322 std::greater<typename SrcAccessor::value_type>());
1325 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1326 class DestIterator,
class DestAccessor,
class DestValue>
1328 localMaxima3D(SrcIterator sul, SrcShape slr, SrcAccessor sa,
1329 DestIterator dul, DestAccessor da,
1333 detail::localMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
1334 NumericTraits<typename SrcAccessor::value_type>::min(),
1335 std::greater<typename SrcAccessor::value_type>());
1338 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1339 class DestIterator,
class DestAccessor,
class DestValue>
1341 localMaxima3D(triple<SrcIterator, SrcShape, SrcAccessor> src,
1342 pair<DestIterator, DestAccessor> dest,
1346 localMaxima3D(src.first, src.second, src.third, dest.first, dest.second,
1347 marker, neighborhood);
1350 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1351 class DestIterator,
class DestAccessor,
class DestValue>
1353 localMaxima3D(vigra::triple<SrcIterator, SrcShape, SrcAccessor> src,
1354 std::pair<DestIterator, DestAccessor> dest,
1357 localMaxima3D(src.first, src.second, src.third, dest.first, dest.second,
1361 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1362 class DestIterator,
class DestAccessor,
class DestValue>
1364 localMaxima3D(triple<SrcIterator, SrcShape, SrcAccessor> src,
1365 pair<DestIterator, DestAccessor> dest,
1369 localMaxima3D(src.first, src.second, src.third, dest.first, dest.second,
1370 marker, neighborhood);
1513 template <
class SrcIterator,
class SrcAccessor,
1514 class DestIterator,
class DestAccessor,
1515 class Neighborhood,
class EqualityFunctor>
1518 DestIterator dul, DestAccessor da,
1519 typename DestAccessor::value_type marker,
1520 Neighborhood neighborhood, EqualityFunctor equal)
1522 typedef typename SrcAccessor::value_type SrcType;
1524 detail::extendedLocalMinMax(sul, slr, sa, dul, da,
1525 marker, neighborhood,
1526 std::less<SrcType>(), equal,
1527 NumericTraits<typename SrcAccessor::value_type>::max());
1530 template <
class SrcIterator,
class SrcAccessor,
1531 class DestIterator,
class DestAccessor,
1535 DestIterator dul, DestAccessor da,
1536 typename DestAccessor::value_type marker,
1537 Neighborhood neighborhood)
1539 typedef typename SrcAccessor::value_type SrcType;
1542 marker, neighborhood, std::equal_to<SrcType>());
1545 template <
class SrcIterator,
class SrcAccessor,
1546 class DestIterator,
class DestAccessor>
1549 DestIterator dul, DestAccessor da,
1550 typename DestAccessor::value_type marker)
1552 typedef typename SrcAccessor::value_type SrcType;
1558 template <
class SrcIterator,
class SrcAccessor,
1559 class DestIterator,
class DestAccessor>
1562 DestIterator dul, DestAccessor da)
1565 NumericTraits<typename DestAccessor::value_type>::one());
1568 template <
class SrcIterator,
class SrcAccessor,
1569 class DestIterator,
class DestAccessor,
1570 class Neighborhood,
class EqualityFunctor>
1573 pair<DestIterator, DestAccessor> dest,
1574 typename DestAccessor::value_type marker, Neighborhood neighborhood,
1575 EqualityFunctor equal)
1578 dest.first, dest.second, marker, neighborhood, equal);
1581 template <
class SrcIterator,
class SrcAccessor,
1582 class DestIterator,
class DestAccessor,
1586 pair<DestIterator, DestAccessor> dest,
1587 typename DestAccessor::value_type marker, Neighborhood neighborhood)
1590 dest.first, dest.second, marker, neighborhood);
1593 template <
class SrcIterator,
class SrcAccessor,
1594 class DestIterator,
class DestAccessor>
1597 pair<DestIterator, DestAccessor> dest,
1598 typename DestAccessor::value_type marker)
1604 template <
class SrcIterator,
class SrcAccessor,
1605 class DestIterator,
class DestAccessor>
1608 pair<DestIterator, DestAccessor> dest)
1611 dest.first, dest.second);
1635 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1636 class DestIterator,
class DestAccessor,
class Neighborhood,
1637 class EqualityFunctor>
1640 DestIterator dul, DestAccessor da,
1641 typename DestAccessor::value_type marker,
1642 Neighborhood neighborhood,
1643 EqualityFunctor equal)
1645 typedef typename SrcAccessor::value_type SrcType;
1647 detail::extendedLocalMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
1648 std::less<SrcType>(), equal,
1649 NumericTraits<typename SrcAccessor::value_type>::max());
1652 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1653 class DestIterator,
class DestAccessor,
class Neighborhood>
1656 DestIterator dul, DestAccessor da,
1657 typename DestAccessor::value_type marker,
1658 Neighborhood neighborhood)
1660 typedef typename SrcAccessor::value_type SrcType;
1663 std::equal_to<SrcType>());
1666 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1667 class DestIterator,
class DestAccessor>
1670 DestIterator dul, DestAccessor da)
1673 NumericTraits<typename DestAccessor::value_type>::one(),
1677 template<
class SrcIterator,
class SrcAccessor,
class SrcShape,
1678 class DestIterator,
class DestAccessor,
class Neighborhood>
1681 pair<DestIterator, DestAccessor> dest,
1682 typename DestAccessor::value_type marker,
1683 Neighborhood neighborhood)
1686 dest.first, dest.second,
1687 marker, neighborhood);
1830 template <
class SrcIterator,
class SrcAccessor,
1831 class DestIterator,
class DestAccessor,
1832 class Neighborhood,
class EqualityFunctor>
1835 DestIterator dul, DestAccessor da,
1836 typename DestAccessor::value_type marker,
1837 Neighborhood neighborhood, EqualityFunctor equal)
1839 typedef typename SrcAccessor::value_type SrcType;
1841 detail::extendedLocalMinMax(sul, slr, sa, dul, da,
1842 marker, neighborhood,
1843 std::greater<SrcType>(), equal,
1844 NumericTraits<typename SrcAccessor::value_type>::min());
1847 template <
class SrcIterator,
class SrcAccessor,
1848 class DestIterator,
class DestAccessor,
1852 DestIterator dul, DestAccessor da,
1853 typename DestAccessor::value_type marker,
1854 Neighborhood neighborhood)
1856 typedef typename SrcAccessor::value_type SrcType;
1859 marker, neighborhood, std::equal_to<SrcType>());
1862 template <
class SrcIterator,
class SrcAccessor,
1863 class DestIterator,
class DestAccessor>
1866 DestIterator dul, DestAccessor da,
1867 typename DestAccessor::value_type marker)
1869 typedef typename SrcAccessor::value_type SrcType;
1875 template <
class SrcIterator,
class SrcAccessor,
1876 class DestIterator,
class DestAccessor>
1879 DestIterator dul, DestAccessor da)
1882 NumericTraits<typename DestAccessor::value_type>::one());
1885 template <
class SrcIterator,
class SrcAccessor,
1886 class DestIterator,
class DestAccessor,
1887 class Neighborhood,
class EqualityFunctor>
1890 pair<DestIterator, DestAccessor> dest,
1891 typename DestAccessor::value_type marker, Neighborhood neighborhood,
1892 EqualityFunctor equal)
1895 dest.first, dest.second, marker, neighborhood, equal);
1898 template <
class SrcIterator,
class SrcAccessor,
1899 class DestIterator,
class DestAccessor,
1903 pair<DestIterator, DestAccessor> dest,
1904 typename DestAccessor::value_type marker, Neighborhood neighborhood)
1907 dest.first, dest.second, marker, neighborhood);
1910 template <
class SrcIterator,
class SrcAccessor,
1911 class DestIterator,
class DestAccessor>
1914 pair<DestIterator, DestAccessor> dest,
1915 typename DestAccessor::value_type marker)
1921 template <
class SrcIterator,
class SrcAccessor,
1922 class DestIterator,
class DestAccessor>
1925 pair<DestIterator, DestAccessor> dest)
1928 dest.first, dest.second);
1950 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1951 class DestIterator,
class DestAccessor,
class Neighborhood,
1952 class EqualityFunctor>
1955 DestIterator dul, DestAccessor da,
1956 typename DestAccessor::value_type marker,
1957 Neighborhood neighborhood,
1958 EqualityFunctor equal)
1960 typedef typename SrcAccessor::value_type SrcType;
1962 detail::extendedLocalMinMax3D(sul, slr, sa, dul, da, marker, neighborhood,
1963 std::greater<SrcType>(), equal,
1964 NumericTraits<typename SrcAccessor::value_type>::min());
1967 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1968 class DestIterator,
class DestAccessor,
class Neighborhood>
1971 DestIterator dul, DestAccessor da,
1972 typename DestAccessor::value_type marker,
1973 Neighborhood neighborhood)
1975 typedef typename SrcAccessor::value_type SrcType;
1978 marker, neighborhood,
1979 std::equal_to<SrcType>());
1982 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1983 class DestIterator,
class DestAccessor>
1986 DestIterator dul, DestAccessor da)
1989 NumericTraits<typename DestAccessor::value_type>::one(),
1993 template<
class SrcIterator,
class SrcShape,
class SrcAccessor,
1994 class DestIterator,
class DestAccessor,
class Neighborhood>
1997 pair<DestIterator, DestAccessor> dest,
1998 typename DestAccessor::value_type marker,
1999 Neighborhood neighborhood)
2002 dest.first, dest.second,
2003 marker, neighborhood);
2010 #endif // VIGRA_LOCALMINMAX_HXX