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_DEBUG_SUPERPOSE_HH
00027 # define MLN_DEBUG_SUPERPOSE_HH
00028
00032
00033 # include <mln/core/concept/image.hh>
00034 # include <mln/core/image/dmorph/image_if.hh>
00035 # include <mln/value/rgb8.hh>
00036 # include <mln/data/fill.hh>
00037 # include <mln/data/convert.hh>
00038 # include <mln/pw/all.hh>
00039 # include <mln/literal/colors.hh>
00040
00041 namespace mln
00042 {
00043
00044 namespace debug
00045 {
00046
00060
00061 template <typename I, typename J>
00062 mln_ch_value(I,value::rgb8)
00063 superpose(const Image<I>& input_, const Image<J>& object_,
00064 const value::rgb8& object_color);
00065
00066
00068 template <typename I, typename J>
00069 mln_ch_value(I,value::rgb8)
00070 superpose(const Image<I>& input, const Image<J>& object);
00071
00072
00073
00074 # ifndef MLN_INCLUDE_ONLY
00075
00076 template <typename I, typename J>
00077 mln_ch_value(I,value::rgb8)
00078 superpose(const Image<I>& input_, const Image<J>& object_,
00079 const value::rgb8& object_color)
00080 {
00081 trace::entering("debug::superpose");
00082
00083 const I& input = exact(input_);
00084 const J& object = exact(object_);
00085
00086 mlc_equal(mln_value(J), bool)::check();
00087 mln_precondition(input.is_valid());
00088 mln_precondition(object.is_valid());
00089 mln_precondition(input.domain() == object.domain());
00090
00091 mln_ch_value(I,value::rgb8) output = data::convert(value::rgb8(), input);
00092 data::fill((output | pw::value(object)).rw(), object_color);
00093
00094 trace::exiting("debug::superpose");
00095 return output;
00096 }
00097
00098 template <typename I, typename J>
00099 mln_ch_value(I,value::rgb8)
00100 superpose(const Image<I>& input, const Image<J>& object)
00101 {
00102 return superpose(input, object, literal::red);
00103 }
00104
00105 # endif // ! MLN_INCLUDE_ONLY
00106
00107 }
00108
00109 }
00110
00111 #endif // ! MLN_DEBUG_SUPERPOSE_HH