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/value/int_u8.hh>
00029 #include <mln/data/fill.hh>
00030 #include <mln/debug/println.hh>
00031 #include <mln/opt/at.hh>
00032 #include <mln/data/compare.hh>
00033
00034 #include <mln/transform/distance_and_closest_point_geodesic.hh>
00035
00036 unsigned dmap_ref[] = { 4, 4, 4, 3, 2, 3, 4, 4, 4,
00037 4, 4, 3, 2, 1, 2, 3, 4, 4,
00038 4, 3, 2, 1, 0, 1, 2, 3, 4,
00039 3, 2, 1, 2, 1, 2, 3, 4, 4,
00040 2, 1, 0, 1, 2, 3, 4, 4, 4,
00041 3, 2, 1, 2, 3, 4, 4, 4, 4,
00042 4, 3, 2, 3, 4, 4, 4, 4, 4,
00043 4, 4, 3, 4, 4, 4, 4, 4, 4,
00044 4, 4, 4, 4, 4, 4, 4, 4, 4 };
00045
00046
00047 unsigned cp_idx_ref[] = { 2, 2, 0, 0, 0, 0, 0, 2, 2,
00048 2, 0, 0, 0, 0, 0, 0, 0, 2,
00049 1, 0, 0, 0, 0, 0, 0, 0, 0,
00050 1, 1, 1, 0, 0, 0, 0, 0, 2,
00051 1, 1, 1, 1, 0, 0, 0, 2, 2,
00052 1, 1, 1, 1, 0, 0, 2, 2, 2,
00053 1, 1, 1, 1, 1, 2, 2, 2, 2,
00054 2, 1, 1, 1, 2, 2, 2, 2, 2,
00055 2, 2, 1, 2, 2, 2, 2, 2, 2 };
00056
00057
00058 int main()
00059 {
00060 using namespace mln;
00061 using value::int_u8;
00062
00063 image2d<bool> input(9, 9);
00064 data::fill(input, false);
00065 opt::at(input, 2, 4) = true;
00066 opt::at(input, 4, 2) = true;
00067
00068 {
00069 typedef util::couple<image2d<int_u8>, image2d<point2d> > output_t;
00070 output_t output = transform::distance_and_closest_point_geodesic(input,
00071 c4(),
00072 int_u8(4));
00073 mln_assertion(output.first() == make::image2d(dmap_ref));
00075 }
00076
00077 {
00078 p_array<point2d> arr;
00079 arr.insert(point2d(2, 4));
00080 arr.insert(point2d(4, 2));
00081 typedef util::couple<image2d<int_u8>, image2d<unsigned> > output_t;
00082 output_t output = transform::distance_and_closest_point_geodesic(arr,
00083 input.domain(),
00084 c4(),
00085 int_u8(4));
00086 mln_assertion(output.first() == make::image2d(dmap_ref));
00087 mln_assertion(output.second() == make::image2d(cp_idx_ref));
00088 }
00089 }