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/alias/neighb2d.hh>
00027 # include <mln/core/image/image2d.hh>
00028 # include <mln/data/compare.hh>
00029 # include <mln/logical/not.hh>
00030 # include <mln/make/image.hh>
00031 # include <mln/make/w_window2d_int.hh>
00032 # include <mln/topo/skeleton/crest.hh>
00033 # include <mln/transform/distance_front.hh>
00034 # include <mln/value/int_u8.hh>
00035
00036
00037 int main()
00038 {
00039 using namespace mln;
00040
00041 bool ref_dat[][9] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
00042 { 0, 0, 0, 0, 0, 1, 0, 0, 0 },
00043 { 0, 0, 0, 0, 1, 1, 0, 1, 0 },
00044 { 0, 1, 1, 1, 1, 1, 0, 1, 0 },
00045 { 0, 0, 0, 0, 1, 0, 0, 0, 0 },
00046 { 0, 0, 0, 0, 1, 0, 1, 0, 0 },
00047 { 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
00048
00049 bool in_dat[][9] = { { 0, 0, 0, 0, 1, 1, 1, 0, 0 },
00050 { 0, 0, 0, 1, 1, 1, 1, 0, 0 },
00051 { 0, 0, 1, 1, 1, 1, 1, 1, 1 },
00052 { 0, 1, 1, 1, 1, 1, 1, 1, 1 },
00053 { 0, 0, 1, 1, 1, 1, 1, 0, 0 },
00054 { 0, 0, 0, 1, 1, 1, 1, 0, 0 },
00055 { 0, 0, 0, 0, 1, 0, 0, 0, 0 } };
00056
00057 int vals[] = { 0, 9, 0, 9, 0,
00058 9, 6, 4, 6, 9,
00059 0, 4, 0, 4, 0,
00060 9, 6, 4, 6, 9,
00061 0, 9, 0, 9, 0 };
00062
00063 image2d<bool> input = make::image(in_dat);
00064 image2d<bool> crest_ref = make::image(ref_dat);
00065
00066 image2d<value::int_u8>
00067 dist_map = mln::transform::distance_front(logical::not_(input), c8(),
00068 make::w_window2d_int(vals),
00069 mln_max(value::int_u8));
00070 image2d<bool> crest_ima = topo::skeleton::crest(input, dist_map, c8());
00071
00072 mln_assertion(crest_ima == crest_ref);
00073 }