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/concept/scalar.hh>
00036 # include <mln/value/concept/symbolic.hh>
00037 # include <mln/value/rgb8.hh>
00038 # include <mln/data/fill.hh>
00039 # include <mln/data/convert.hh>
00040 # include <mln/pw/all.hh>
00041 # include <mln/literal/colors.hh>
00042
00043 namespace mln
00044 {
00045
00046 namespace debug
00047 {
00048
00063
00064 template <typename I, typename J>
00065 mln_ch_value(I,value::rgb8)
00066 superpose(const Image<I>& input_, const Image<J>& object_,
00067 const value::rgb8& object_color);
00068
00070 template <typename I, typename J>
00071 mln_ch_value(I,value::rgb8)
00072 superpose(const Image<I>& input, const Image<J>& object);
00073
00074
00075 # ifndef MLN_INCLUDE_ONLY
00076
00077 template <typename I, typename J>
00078 mln_ch_value(I,value::rgb8)
00079 superpose(const Image<I>& input_, const Image<J>& object_,
00080 const value::rgb8& object_color)
00081 {
00082 trace::entering("debug::superpose");
00083
00084 const I& input = exact(input_);
00085 const J& object = exact(object_);
00086
00087
00088 mlc_or(mlc_or(mlc_is_a(mln_value(J), value::Scalar),
00089 mlc_is(mln_value(J), bool)),
00090 mlc_is_a(mln_value(J), value::Symbolic))::check();
00091
00092 mln_precondition(input.is_valid());
00093 mln_precondition(object.is_valid());
00094 mln_precondition(input.domain() == object.domain());
00095
00096 mln_ch_value(I,value::rgb8) output = data::convert(value::rgb8(), input);
00097 data::fill((output | (pw::value(object) != pw::cst(literal::zero))).rw(),
00098 object_color);
00099
00100 trace::exiting("debug::superpose");
00101 return output;
00102 }
00103
00104 template <typename I, typename J>
00105 mln_ch_value(I,value::rgb8)
00106 superpose(const Image<I>& input, const Image<J>& object)
00107 {
00108 return superpose(input, object, literal::red);
00109 }
00110
00111 # endif // ! MLN_INCLUDE_ONLY
00112
00113 }
00114
00115 }
00116
00117 #endif // ! MLN_DEBUG_SUPERPOSE_HH