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_SUBSAMPLING_SUBSAMPLING_HH
00027 # define MLN_SUBSAMPLING_SUBSAMPLING_HH
00028
00032
00033 # include <mln/geom/ncols.hh>
00034 # include <mln/geom/nrows.hh>
00035
00036
00037 namespace mln
00038 {
00039
00040 namespace subsampling
00041 {
00042
00044 template <typename I>
00045 inline
00046 mln_concrete(I)
00047 subsampling(const Image<I>& input,
00048 const mln_deduce(I, site, delta)& first_p,
00049 const mln_deduce(I, site, coord)& gap);
00050
00051 # ifndef MLN_INCLUDE_ONLY
00052
00053 namespace impl
00054 {
00055
00056
00057
00058 template <typename T>
00059 inline
00060 mln_concrete(image2d<T>)
00061 subsampling_(const image2d<T>& input,
00062 const mln_deduce(image2d<T>, site, delta)& first_p,
00063 const mln_deduce(image2d<T>, site, coord)& gap)
00064 {
00065 trace::entering("subsampling::impl::subsampling_");
00066 mln_concrete(image2d<T>) output(geom::nrows(input) / gap,
00067 geom::ncols(input) / gap);
00068
00069 for (unsigned j = 0; j < geom::ncols(output); ++j)
00070 for (unsigned i = 0; i < geom::nrows(output); ++i)
00071 {
00072 point2d p1(i, j);
00073 point2d p2(first_p[0] + i * gap, first_p[1] + j * gap);
00074
00075 output(p1) = input(p2);
00076 }
00077
00078 trace::exiting("subsampling::impl::subsampling_");
00079 return output;
00080 }
00081
00082 }
00083
00084
00085 template <typename I>
00086 inline
00087 mln_concrete(I)
00088 subsampling(const Image<I>& input,
00089 const mln_deduce(I, site, delta)& first_p,
00090 const mln_deduce(I, site, coord)& gap)
00091 {
00092 trace::entering("subsampling::subsampling");
00093 mln_precondition(exact(input).is_valid());
00094
00095 mln_concrete(I) output(geom::nrows(input) / gap,
00096 geom::ncols(input) / gap);
00097
00098 output = impl::subsampling_(exact(input), first_p, gap);
00099
00100 trace::exiting("subsampling::subsampling");
00101 return output;
00102 }
00103
00104 # endif // ! MLN_INCLUDE_ONLY
00105
00106 }
00107
00108 }
00109
00110
00111 #endif // ! MLN_SUBSAMPLING_SUBSAMPLING_HH