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 <mln/core/image/image2d.hh>
00027 #include <mln/core/alias/neighb2d.hh>
00028 #include <mln/core/site_set/p_array.hh>
00029
00030 #include <mln/data/sort_psites.hh>
00031 #include <mln/debug/println.hh>
00032
00033 #include <mln/morpho/tree/data.hh>
00034
00035
00036 int main()
00037 {
00038 using namespace mln;
00039
00040 typedef image2d<unsigned char> I;
00041
00042
00043
00044
00045 unsigned char vals[] = { 3, 3, 3,
00046 3, 4, 4,
00047 3, 4, 4 };
00048
00049 I ima = make::image2d(vals);
00050
00051 debug::println("ima = ", ima);
00052
00053 typedef p_array<point2d> S;
00054 S s = data::sort_psites_decreasing(ima);
00055
00056 typedef morpho::tree::data<I,S> tree_t;
00057 tree_t t(ima, s, c4());
00058
00059 debug::println( "parent = ", t.parent_image() | t.domain() );
00060 debug::println( "on node = ", t.parent_image() | t.nodes() );
00061 debug::println( "on leaves = ", t.parent_image() | t.leaves() );
00062
00063 {
00064
00065 tree_t::up_node_piter n(t);
00066 tree_t::up_site_piter s(t);
00067 tree_t::up_leaf_piter l(t);
00068 n.start();
00069 l.start();
00070 for_all(s)
00071 if (t.is_a_node(s))
00072 {
00073 mln_assertion(s == n);
00074 if (t.is_a_leaf(n))
00075 {
00076 mln_assertion(l == n);
00077 l.next();
00078 }
00079 n.next();
00080 }
00081 mln_assertion(!n.is_valid() && !s.is_valid() && !l.is_valid());
00082 }
00083
00084 {
00085
00086 tree_t::dn_node_piter n(t);
00087 tree_t::dn_site_piter s(t);
00088 tree_t::dn_leaf_piter l(t);
00089 n.start();
00090 l.start();
00091 for_all(s)
00092 if (t.is_a_node(s))
00093 {
00094 mln_assertion(s == n);
00095 if (t.is_a_leaf(n))
00096 {
00097 mln_assertion(l == n);
00098 l.next();
00099 }
00100 n.next();
00101 }
00102 mln_assertion(!n.is_valid() && !s.is_valid() && !l.is_valid());
00103 }
00104
00105
00106 {
00107 std::cout << "nodes = ";
00108 tree_t::up_node_piter n(t);
00109 for_all(n)
00110 std::cout << n << ' ';
00111 std::cout << std::endl
00112 << std::endl;
00113 }
00114
00115
00116 {
00117 image2d<unsigned> area(ima.domain());
00118 data::fill(area, 1);
00119 tree_t::up_site_piter p(t);
00120 for_all(p)
00121 if (! t.is_root(p))
00122 area(t.parent(p)) += area(p);
00123 debug::println("area = ", area | t.nodes());
00124 }
00125
00126 }