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_MAKE_IMAGE3D_HH
00027 # define MLN_MAKE_IMAGE3D_HH
00028
00036
00037 # include <mln/core/image/image3d.hh>
00038 # include <mln/core/image/image2d.hh>
00039 # include <mln/core/image/dmorph/slice_image.hh>
00040 # include <mln/data/paste.hh>
00041 # include <mln/util/array.hh>
00042
00043
00044
00045 namespace mln
00046 {
00047
00048 namespace make
00049 {
00050
00053 template <typename I>
00054 mln::image3d<mln_value(I)>
00055 image3d(const util::array<I>& ima);
00056
00059 template <typename I>
00060 mln::image3d<mln_value(I)>
00061 image3d(const Image<I>& ima);
00062
00063
00064 # ifndef MLN_INCLUDE_ONLY
00065
00066 template <typename I>
00067 inline
00068 mln::image3d<mln_value(I)>
00069 image3d(const util::array<I>& ima)
00070 {
00071 mlc_equal(mln_domain(I), mln::box2d)::check();
00072 mln_precondition(! ima.is_empty());
00073
00074 def::coord n_slices = ima.nelements();
00075 mln::box2d b = ima[0].domain();
00076 mln::box3d b_ = make::box3d(0, b.pmin().row(), b.pmin().col(),
00077 n_slices - 1, b.pmax().row(), b.pmax().col());
00078 mln::image3d<mln_value(I)> output(b_);
00079 for (def::coord sli = 0; sli < n_slices; ++sli)
00080 {
00081 mln_assertion(ima[sli].domain() == b);
00082 data::paste(ima[sli], slice(output, sli).rw());
00083 }
00084 return output;
00085 }
00086
00087
00088 template <typename I>
00089 inline
00090 mln::image3d<mln_value(I)>
00091 image3d(const Image<I>& ima_)
00092 {
00093 const I& ima = exact(ima_);
00094
00095 mlc_equal(mln_domain(I), mln::box2d)::check();
00096 mln_precondition(ima.is_valid());
00097
00098 mln::box2d b = ima.domain();
00099 mln::box3d b_ = make::box3d(0, b.pmin().row(), b.pmin().col(),
00100 0, b.pmax().row(), b.pmax().col());
00101 mln::image3d<mln_value(I)> output(b_);
00102 data::paste(ima, slice(output, 0).rw());
00103
00104 return output;
00105 }
00106
00107 # endif // ! MLN_INCLUDE_ONLY
00108
00109 }
00110
00111 }
00112
00113
00114 #endif // ! MLN_MAKE_IMAGE3D_HH