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
00027
00028
00029 namespace internal {
00030
00039 template <class DestType, class I>
00040 typename mute<I, DestType>::ret
00041 create_minima_image_from_bin_(const abstract::non_vectorial_image<I>& input)
00042 {
00043 oln_iter_type(I) p(input);
00044 typename mute<I, DestType>::ret output(input.size());
00045 for_all (p)
00046
00047
00048
00049 output[p] = (input[p] ?
00050 ntg_min_val(DestType) :
00051 ntg_max_val(DestType));
00052 return output;
00053 }
00054
00062 template <class I>
00063 typename mute<I, ntg::bin>::ret
00064 ima_to_bin_(const abstract::non_vectorial_image<I>& input)
00065 {
00066 oln_iter_type(I) p(input);
00067 typename mute<I, ntg::bin>::ret output(input.size());
00068 for_all (p)
00069 output[p] = (input[p] ? true : false);
00070 return output;
00071 }
00072
00073 }
00074
00075
00076
00077
00078
00123 template<class I, class I2, class N>
00124 oln_concrete_type(I)
00125 minima_imposition(const abstract::non_vectorial_image<I>& input,
00126 const abstract::non_vectorial_image<I2>& minima_map,
00127 const abstract::neighborhood<N>& Ng)
00128 {
00129 mlc::eq<I::dim, I2::dim>::ensure();
00130 mlc::eq<I::dim, N::dim>::ensure();
00131 precondition(input.size() == minima_map.size());
00132 oln_concrete_type(I) mm =
00133 internal::create_minima_image_from_bin_<oln_value_type(I)>(minima_map);
00134 return geodesic_reconstruction_erosion(mm,
00135 arith::min(arith::plus_cst(input,oln_value_type(I)(1)),
00136 (arith::plus_cst(mm,oln_value_type(I)(0)))), Ng);
00137 }
00138
00139
00140
00141
00142
00143
00175 template<class I, class N>
00176 typename mute<I, ntg::bin>::ret
00177 regional_minima(const abstract::non_vectorial_image<I>& input,
00178 const abstract::neighborhood<N>& Ng)
00179 {
00180 mlc::eq<I::dim, N::dim>::ensure();
00181 return
00182 internal::ima_to_bin_(arith::minus(convert::force<oln_value_type(I)>(),
00183 geodesic_reconstruction_erosion
00184 (arith::plus_cst(input,oln_value_type(I) (1)), input, Ng),
00185 input));
00186 }