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 #include <cmath>
00027
00028 #include <mln/core/var.hh>
00029 #include <mln/core/image/image2d.hh>
00030 #include <mln/data/compare.hh>
00031 #include <mln/world/inter_pixel/immerse.hh>
00032 #include <mln/world/inter_pixel/compute.hh>
00033
00034 #include <mln/world/inter_pixel/neighb2d.hh>
00035 #include <mln/morpho/watershed/flooding.hh>
00036 #include <mln/debug/println.hh>
00037
00038
00039
00040 struct d_t : mln::Function_vv2v<d_t>
00041 {
00042 typedef int result;
00043
00044 int operator()(int i1, int i2) const
00045 {
00046 return std::abs(i2 - i1);
00047 }
00048 }
00049 d;
00050
00051
00052
00053 int main()
00054 {
00055 using namespace mln;
00056
00057 int vals[] = { 3, 4, 5,
00058 1, 3, 6 ,
00059 8, 7, 3 } ;
00060
00061 typedef image2d<int> I;
00062 I ima = make::image2d(vals);
00063
00064 using namespace world::inter_pixel;
00065 typedef image_if<I, is_pixel> Ix;
00066 Ix imax = immerse(ima);
00067
00068
00069 int refs[] = { 0, 1, 0, 1, 0,
00070 2, 0, 1, 0, 1,
00071 0, 2, 0, 3, 0,
00072 7, 0, 4, 0, 3,
00073 0, 1, 0, 4, 0 };
00074
00075 mln_assertion(compute(imax, d) == (make::image2d(refs) | is_separator()));
00076
00077 mln_VAR(g, compute(imax, d));
00078
00079 unsigned n_basins;
00080 debug::println(morpho::watershed::flooding(g, e2e(), n_basins));
00081 }