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_DATA_SATURATE_HH
00027 # define MLN_DATA_SATURATE_HH
00028
00032
00033 # include <mln/fun/v2v/saturate.hh>
00034 # include <mln/data/apply.hh>
00035 # include <mln/data/transform.hh>
00036
00037
00038 namespace mln
00039 {
00040
00041 namespace data
00042 {
00043
00044
00054 template <typename V, typename I>
00055 mln_ch_value(I, V)
00056 saturate(V v, const Image<I>& input);
00057
00058
00065 template <typename I, typename V>
00066 mln_ch_value(I, V)
00067 saturate(const Image<I>& input,
00068 const V& min, const V& max);
00069
00070
00077 template <typename I>
00078 void saturate_inplace(Image<I>& input,
00079 const mln_value(I)& min, const mln_value(I)& max);
00080
00081
00082 # ifndef MLN_INCLUDE_ONLY
00083
00084 template <typename V, typename I>
00085 inline
00086 mln_ch_value(I, V)
00087 saturate(V, const Image<I>& input)
00088 {
00089 trace::entering("data::saturate");
00090
00091 mln_precondition(exact(input).is_valid());
00092
00093 fun::v2v::saturate<V> f;
00094 mln_ch_value(I, V) output = data::transform(input, f);
00095
00096 trace::exiting("data::saturate");
00097 return output;
00098 }
00099
00100 template <typename I, typename V>
00101 inline
00102 mln_ch_value(I, V)
00103 saturate(const Image<I>& input,
00104 const V& min, const V& max)
00105 {
00106 trace::entering("data::saturate");
00107
00108 mln_precondition(exact(input).is_valid());
00109
00110 fun::v2v::saturate<V> f(min, max);
00111 mln_ch_value(I, V) output = data::transform(input, f);
00112
00113 trace::exiting("data::saturate");
00114 return output;
00115 }
00116
00117 template <typename I>
00118 inline
00119 void saturate_inplace(Image<I>& input,
00120 const mln_value(I)& min, const mln_value(I)& max)
00121 {
00122 trace::entering("data::saturate_inplace");
00123
00124 mln_precondition(exact(input).is_valid());
00125
00126 fun::v2v::saturate<mln_value(I)> f(min, max);
00127 data::apply(input, f);
00128
00129 trace::exiting("data::saturate_inplace");
00130 }
00131
00132 # endif // ! MLN_INCLUDE_ONLY
00133
00134 }
00135
00136 }
00137
00138
00139 #endif // ! MLN_DATA_SATURATE_HH