38 #include <mln/core/image/complex_image.hh>
39 #include <mln/core/image/complex_neighborhoods.hh>
41 #include <mln/data/fill.hh>
42 #include <mln/literal/zero.hh>
44 #include <mln/math/max.hh>
45 #include <mln/math/sqr.hh>
46 #include <mln/accu/stat/min_max.hh>
47 #include <mln/fun/v2v/linear.hh>
48 #include <mln/data/transform.hh>
50 #include <mln/literal/white.hh>
52 #include <mln/io/off/load.hh>
53 #include <mln/io/off/save.hh>
58 int main(
int argc,
char* argv[])
62 std::cerr <<
"usage: " << argv[0] <<
" input.off output.off"
67 std::string input_filename = argv[1];
68 std::string output_filename = argv[2];
77 static const unsigned D = ima_t::dim;
79 typedef mln_geom_(ima_t) G;
81 mln::bin_2complex_image3df input;
82 mln::io::off::
load(input, input_filename);
84 std::pair<ima_t, ima_t> curv = mln::geom::mesh_curvature(input.domain());
87 ima_t max_curv(input.domain());
88 mln::
data::
fill(max_curv, mln::literal::zero);
89 mln::p_n_faces_fwd_piter<D, G> v(max_curv.domain(), 0);
91 max_curv(v) = mln::math::
max(mln::math::
sqr(curv.first(v)),
92 mln::math::
sqr(curv.second(v)));
95 mln::p_n_faces_fwd_piter<D, G> t(max_curv.domain(), 2);
96 typedef mln::complex_m_face_neighborhood<D, G> adj_vertices_nbh_t;
97 adj_vertices_nbh_t adj_vertices_nbh;
98 mln_niter_(adj_vertices_nbh_t) adj_v(adj_vertices_nbh, t);
101 adj_v.iter().set_m(0);
102 mln::accu::stat::min_max<
float> acc;
111 s += max_curv(adj_v);
118 mln_invariant(n <= 3);
125 ima_t output(max_curv.domain());
127 std::pair<float, float>
min_max(acc);
131 std::cout << min << std::endl;
132 std::cout << max << std::endl;
139 float a = (M - m) / (max - min);
140 float b = (m * max - M *
min) / (max - min);