27 #ifndef MLN_LINEAR_CH_CONVOLVE_HH
28 # define MLN_LINEAR_CH_CONVOLVE_HH
34 # include <mln/core/concept/image.hh>
35 # include <mln/core/concept/window.hh>
36 # include <mln/core/concept/weighted_window.hh>
37 # include <mln/trait/ch_value.hh>
38 # include <mln/value/ops.hh>
40 # include <mln/algebra/vec.hh>
45 # define mln_ch_convolve(I, W) \
46 typename mln::linear::ch_convolve<I, W>::ret
48 # define mln_ch_convolve_(I, W) \
49 mln::linear::ch_convolve<I, W>::ret
52 # define mln_ch_convolve_grad(I, W) \
53 typename mln::trait::ch_value< I, algebra::vec< I::site::dim, typename mln::linear::ch_convolve<I,W>::ret::value > >::ret
55 # define mln_ch_convolve_grad_(I, W) \
56 mln::trait::ch_value< I, algebra::vec< I::site::dim, mln::linear::ch_convolve<I,W>::ret::value > >::ret
69 typename I,
typename W>
72 typedef mln_sum_product(mln_value(I), mln_weight(W))
V;
73 typedef mln_ch_value(I, V)
ret;
76 template <typename I, typename W>
79 typedef mln_sum_product(mln_value(I), W) V;
80 typedef mln_ch_value(I, V) ret;
86 template <typename I, typename W>
88 : private mlc_and( mlc_is_a(I,
Image),
89 mlc_is_not_a(W,
Window) )::check_t
95 typedef mlc_ret(helper) ret;
103 #endif // ! MLN_LINEAR_CH_CONVOLVE_HH