00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_TRANSFORM_INFLUENCE_ZONE_GEODESIC_HH
00027 # define MLN_TRANSFORM_INFLUENCE_ZONE_GEODESIC_HH
00028
00032
00033 # include <mln/canvas/distance_geodesic.hh>
00034 # include <mln/transform/internal/influence_zone_functor.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace transform
00041 {
00042
00052
00053 template <typename I, typename N, typename D>
00054 mln_concrete(I)
00055 influence_zone_geodesic(const Image<I>& input,
00056 const Neighborhood<N>& nbh,
00057 const D& max, const mln_value(I)& background_value);
00058
00060 template <typename I, typename N, typename D>
00061 mln_concrete(I)
00062 influence_zone_geodesic(const Image<I>& input,
00063 const Neighborhood<N>& nbh, const D& max);
00064
00065
00067 template <typename I, typename N>
00068 mln_concrete(I)
00069 influence_zone_geodesic(const Image<I>& input, const Neighborhood<N>& nbh);
00070
00071
00072
00073 # ifndef MLN_INCLUDE_ONLY
00074
00075
00076 template <typename I, typename N, typename D>
00077 mln_concrete(I)
00078 influence_zone_geodesic(const Image<I>& input, const Neighborhood<N>& nbh,
00079 const D& max, const mln_value(I)& background_value)
00080 {
00081 trace::entering("transform::influence_zone_geodesic");
00082
00083 mln_precondition(exact(input).is_valid());
00084 mln_precondition(exact(nbh).is_valid());
00085
00086 internal::influence_zone_functor<I> f(background_value);
00087 (void) mln::canvas::distance_geodesic(input, nbh, max, f);
00088
00089 trace::exiting("transform::influence_zone_geodesic");
00090 return f.output;
00091 }
00092
00093
00094 template <typename I, typename N, typename D>
00095 mln_concrete(I)
00096 influence_zone_geodesic(const Image<I>& input, const Neighborhood<N>& nbh,
00097 const D& max)
00098 {
00099 return influence_zone_geodesic(input, nbh, max, literal::zero);
00100 }
00101
00102
00103 template <typename I, typename N>
00104 mln_concrete(I)
00105 influence_zone_geodesic(const Image<I>& input, const Neighborhood<N>& nbh)
00106 {
00107 return influence_zone_geodesic(input, nbh, mln_max(unsigned));
00108 }
00109
00110 # endif // ! MLN_INCLUDE_ONLY
00111
00112 }
00113
00114 }
00115
00116
00117 #endif // ! MLN_TRANSFORM_INFLUENCE_ZONE_GEODESIC_HH