
* Makefile.am, * tests/img/test_bw.tif, * tests/img/test_gl.tif, * tests/img/test_rgb8.tif: add new test images. * headers.mk: update list of distributed files. * mln/value/rgb.hh, * mln/convert/from_to.hxx: add from_to overload from rgb8 to bool. * mln/io/magick/load.hh: update doc. * mln/io/tiff/load.hh: Fix loading of rgb files. * tests/data.hh.in: add a new macro for test images directory. * tests/io/Makefile.am, * tests/io/tiff/Makefile.am, * tests/io/tiff/load.cc: new test for io::tiff::load. * tests/unit_test/unit-tests.mk: update unit test list. --- milena/ChangeLog | 26 +++++++ milena/Makefile.am | 5 + milena/headers.mk | 29 +++++++- milena/mln/convert/from_to.hxx | 4 + milena/mln/io/magick/load.hh | 2 +- milena/mln/io/tiff/load.hh | 129 +++++++++++++++++++------------- milena/mln/value/rgb.hh | 11 +++ milena/tests/data.hh.in | 10 ++- milena/tests/img/test_bw.tif | Bin 0 -> 332 bytes milena/tests/img/test_gl.tif | Bin 0 -> 352 bytes milena/tests/img/test_rgb8.tif | Bin 0 -> 416 bytes milena/tests/io/Makefile.am | 3 +- milena/tests/io/{ => tiff}/Makefile.am | 17 ++-- milena/tests/io/tiff/load.cc | 97 ++++++++++++++++++++++++ milena/tests/unit_test/unit-tests.mk | 58 +++++++++++++- 15 files changed, 318 insertions(+), 73 deletions(-) create mode 100644 milena/tests/img/test_bw.tif create mode 100644 milena/tests/img/test_gl.tif create mode 100644 milena/tests/img/test_rgb8.tif copy milena/tests/io/{ => tiff}/Makefile.am (51%) create mode 100644 milena/tests/io/tiff/load.cc diff --git a/milena/ChangeLog b/milena/ChangeLog index 7e6190d..76e2c32 100644 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@ -1,5 +1,31 @@ 2009-04-08 Guillaume Lazzara <lazzara@lrde.epita.fr> + Small fixes. + + * Makefile.am, + * tests/img/test_bw.tif, + * tests/img/test_gl.tif, + * tests/img/test_rgb8.tif: add new test images. + + * headers.mk: update list of distributed files. + + * mln/value/rgb.hh, + * mln/convert/from_to.hxx: add from_to overload from rgb8 to bool. + + * mln/io/magick/load.hh: update doc. + + * mln/io/tiff/load.hh: Fix loading of rgb files. + + * tests/data.hh.in: add a new macro for test images directory. + + * tests/io/Makefile.am, + * tests/io/tiff/Makefile.am, + * tests/io/tiff/load.cc: new test for io::tiff::load. + + * tests/unit_test/unit-tests.mk: update unit test list. + +2009-04-08 Guillaume Lazzara <lazzara@lrde.epita.fr> + Remove an invalid conversion operator from a morpher to a concrete image. diff --git a/milena/Makefile.am b/milena/Makefile.am index a2b83c6..ffb87cc 100644 --- a/milena/Makefile.am +++ b/milena/Makefile.am @@ -55,6 +55,11 @@ img/tiny.ppm \ img/toto.pbm EXTRA_DIST += \ +tests/img/test_rgb8.tif \ +tests/img/test_bw.tif \ +tests/img/test_gl.tif + +EXTRA_DIST += \ generate_dist_headers.sh\ tools \ tools/area_flooding.cc \ diff --git a/milena/headers.mk b/milena/headers.mk index fd5844c..590621d 100644 --- a/milena/headers.mk +++ b/milena/headers.mk @@ -38,6 +38,7 @@ mln/draw/plot.hh \ mln/draw/line.hh \ mln/draw/essential.hh \ mln/pw/image.hh \ +mln/pw/internal/image_base.hh \ mln/pw/all.hh \ mln/pw/value.hh \ mln/pw/cst.hh \ @@ -139,10 +140,12 @@ mln/make/double_neighb2d.hh \ mln/make/image3d.hh \ mln/make/dpoint2d_h.hh \ mln/make/w_window.hh \ +mln/make/cell.hh \ mln/make/image.hh \ mln/make/vec.hh \ mln/make/all.hh \ mln/make/dual_neighb.hh \ +mln/make/attachment.hh \ mln/make/w_window3d.hh \ mln/make/mat.hh \ mln/make/win_chamfer.hh \ @@ -153,6 +156,7 @@ mln/make/box2d.hh \ mln/make/h_mat.hh \ mln/make/w_window2d.hh \ mln/make/box3d.hh \ +mln/make/detachment.hh \ mln/make/region_adjacency_graph.hh \ mln/make/relabelfun.hh \ mln/make/pixel.hh \ @@ -161,6 +165,7 @@ mln/make/box2d_h.hh \ mln/make/w_window1d.hh \ mln/make/image2d.hh \ mln/make/w_window_directional.hh \ +mln/make/rag_and_labeled_wsl.hh \ mln/make/w_window3d_int.hh \ mln/make/essential.hh \ mln/make/w_window1d_int.hh \ @@ -183,8 +188,10 @@ mln/extension/adjust_fill.hh \ mln/extension/fill.hh \ mln/extension/essential.hh \ mln/fun/p2b/chess.hh \ +mln/fun/p2b/tautology.hh \ mln/fun/p2b/all.hh \ mln/fun/p2b/has.hh \ +mln/fun/p2b/antilogy.hh \ mln/fun/p2b/big_chess.hh \ mln/fun/p2b/essential.hh \ mln/fun/p2p/all.hh \ @@ -378,6 +385,7 @@ mln/accu/min_h.hh \ mln/accu/site_set/rectangularity.hh \ mln/accu/site_set/all.hh \ mln/accu/site_set/essential.hh \ +mln/accu/stat/variance.hh \ mln/accu/stat/deviation.hh \ mln/accu/max.hh \ mln/accu/lor.hh \ @@ -399,11 +407,13 @@ mln/accu/transform.hh \ mln/accu/median_alt.hh \ mln/accu/volume.hh \ mln/accu/sum.hh \ +mln/accu/label_used.hh \ mln/accu/height.hh \ mln/accu/land.hh \ mln/accu/take.hh \ mln/accu/histo.hh \ mln/accu/pair.hh \ +mln/accu/count_labels.hh \ mln/accu/count_adjacent_vertices.hh \ mln/accu/convolve.hh \ mln/accu/v.hh \ @@ -458,9 +468,11 @@ mln/level/median.hh \ mln/math/jacobi.hh \ mln/math/max.hh \ mln/math/sqr.hh \ +mln/math/pi.hh \ mln/math/all.hh \ mln/math/sign.hh \ mln/math/abs.hh \ +mln/math/sin.hh \ mln/math/cos.hh \ mln/math/diff_abs.hh \ mln/math/round.hh \ @@ -612,10 +624,12 @@ mln/algebra/mat.hh \ mln/algebra/h_mat.hh \ mln/algebra/quat.hh \ mln/algebra/essential.hh \ +mln/linear/gaussian_directional_2d.hh \ mln/linear/convolve_2x1d.hh \ mln/linear/all.hh \ mln/linear/ch_convolve.hh \ mln/linear/gaussian.hh \ +mln/linear/gaussian_1d.hh \ mln/linear/convolve.hh \ mln/linear/sobel_2d.hh \ mln/linear/local/convolve.hh \ @@ -708,7 +722,9 @@ mln/morpho/essential.hh \ mln/topo/n_face_iter.hh \ mln/topo/face_iter.hh \ mln/topo/is_simple_2d.hh \ +mln/topo/detach.hh \ mln/topo/centered_iter_adapter.hh \ +mln/topo/is_n_face.hh \ mln/topo/internal/complex_set_iterator_base.hh \ mln/topo/internal/complex_iterator_base.hh \ mln/topo/internal/complex_relative_iterator_base.hh \ @@ -717,6 +733,7 @@ mln/topo/algebraic_n_face.hh \ mln/topo/attic/faces_iter.hh \ mln/topo/adj_lower_dim_connected_n_face_iter.hh \ mln/topo/n_face.hh \ +mln/topo/is_facet.hh \ mln/topo/adj_lower_higher_face_iter.hh \ mln/topo/all.hh \ mln/topo/face_data.hh \ @@ -724,9 +741,11 @@ mln/topo/static_n_face_iter.hh \ mln/topo/face.hh \ mln/topo/adj_m_face_iter.hh \ mln/topo/complex.hh \ +mln/topo/is_simple_cell.hh \ mln/topo/adj_higher_face_iter.hh \ mln/topo/adj_lower_face_iter.hh \ mln/topo/complex_iterators.hh \ +mln/topo/skeleton/breadth_first_thinning.hh \ mln/topo/center_only_iter.hh \ mln/topo/adj_higher_dim_connected_n_face_iter.hh \ mln/topo/algebraic_face.hh \ @@ -968,6 +987,7 @@ mln/core/image/interpolated.hh \ mln/core/image/lazy_image.hh \ mln/core/image/t_image.hh \ mln/core/image/hexa_piter.hh \ +mln/core/image/edge_image.hh \ mln/core/image/value_enc_image.hh \ mln/core/image/fun_image.hh \ mln/core/image/graph_elt_neighborhood.hh \ @@ -981,13 +1001,13 @@ mln/core/image/complex_window_piter.hh \ mln/core/image/tr_image.hh \ mln/core/image/sub_image.hh \ mln/core/image/rle_image.hh \ -mln/core/image/line_graph_elt_window.hh \ mln/core/image/mono_rle_encode.hh \ mln/core/image/bgraph_psite.hh \ mln/core/image/sparse_image.hh \ mln/core/image/bgraph_image.hh \ mln/core/image/complex_neighborhoods.hh \ mln/core/image/graph_window_piter.hh \ +mln/core/image/vertex_image.hh \ mln/core/image/sparse_encode.hh \ mln/core/image/safe.hh \ mln/core/image/extension_fun.hh \ @@ -995,7 +1015,6 @@ mln/core/image/image1d.hh \ mln/core/image/extension_val.hh \ mln/core/image/image_if.hh \ mln/core/image/hexa.hh \ -mln/core/image/line_graph_elt_neighborhood.hh \ mln/core/image/extended.hh \ mln/core/image/p2p_image.hh \ mln/core/image/slice_image.hh \ @@ -1022,6 +1041,7 @@ mln/labeling/level.hh \ mln/labeling/flat_zones.hh \ mln/labeling/foreground.hh \ mln/labeling/regional_maxima.hh \ +mln/labeling/wrap.hh \ mln/labeling/compute.hh \ mln/labeling/regional_minima.hh \ mln/labeling/essential.hh \ @@ -1069,6 +1089,7 @@ mln/io/cloud/save.hh \ mln/io/all.hh \ mln/io/magick/load.hh \ mln/io/magick/all.hh \ +mln/io/magick/save.hh \ mln/io/dump/load.hh \ mln/io/dump/all.hh \ mln/io/dump/save.hh \ @@ -1084,6 +1105,9 @@ mln/io/pnm/save.hh \ mln/io/pnm/save_header.hh \ mln/io/txt/all.hh \ mln/io/txt/save.hh \ +mln/io/tiff/load.hh \ +mln/io/tiff/all.hh \ +mln/io/tiff/save.hh \ mln/io/dicom/load.hh \ mln/io/abort.hh \ mln/io/fits/load.hh \ @@ -1091,6 +1115,7 @@ mln/io/fits/all.hh \ mln/io/off/load.hh \ mln/io/off/all.hh \ mln/io/off/save.hh \ +mln/io/plot/save.hh \ mln/io/essential.hh \ mln/logical/includes.hh \ mln/logical/and_not.hh \ diff --git a/milena/mln/convert/from_to.hxx b/milena/mln/convert/from_to.hxx index d21304c..38cb062 100644 --- a/milena/mln/convert/from_to.hxx +++ b/milena/mln/convert/from_to.hxx @@ -197,6 +197,10 @@ namespace mln void from_to_(const value::rgb<8>& from, value::hsl_<float,float,float>& to); + // rgb -> bool. + template <unsigned m> + void from_to_(const value::rgb<m>& from, bool& to); + // C-array -> Image. template <typename V, unsigned S, typename I> diff --git a/milena/mln/io/magick/load.hh b/milena/mln/io/magick/load.hh index c67e1fa..e3a7659 100644 --- a/milena/mln/io/magick/load.hh +++ b/milena/mln/io/magick/load.hh @@ -29,7 +29,7 @@ # define MLN_IO_MAGICK_LOAD_HH /// -/// \file mln/io/magick/load.hh +/// \file mln/io/magick/load.hh /// /// Define a function which loads an image of kind magick with /// given path. diff --git a/milena/mln/io/tiff/load.hh b/milena/mln/io/tiff/load.hh index 1ee2ea1..5d33bd9 100644 --- a/milena/mln/io/tiff/load.hh +++ b/milena/mln/io/tiff/load.hh @@ -34,7 +34,8 @@ /// Load TIFF images to Milena images. /// /// \todo Add support for several tiles. -/// \todo Handle TIFFTAG_ORIENTATION (origin of the image). +/// \todo Use ReadScanline instead of ReadRGBAImage in order to avoid a +/// dispatch and share the same code whatever is the value type. # include <iostream> @@ -68,10 +69,11 @@ namespace mln namespace internal { - + inline point2d ij2rc_1(int i, int j, int ni_1, int nj_1) { + (void) nj_1; return point2d(ni_1 - i, j); } @@ -84,36 +86,43 @@ namespace mln inline point2d ij2rc_3(int i, int j, int ni_1, int nj_1) { + (void) ni_1; return point2d(i, nj_1 - j); } inline point2d ij2rc_4(int i, int j, int ni_1, int nj_1) { + (void) ni_1; + (void) nj_1; return point2d(i, j); } inline point2d ij2rc_5(int i, int j, int ni_1, int nj_1) { + (void) nj_1; return point2d(j, ni_1 - i); } inline point2d ij2rc_6(int i, int j, int ni_1, int nj_1) { - return point2d(nj_1 - j, ni_1 - i); + return point2d(nj_1 - j, ni_1 - i); } inline point2d ij2rc_7(int i, int j, int ni_1, int nj_1) { + (void) ni_1; return point2d(nj_1 - j, i); } inline point2d ij2rc_8(int i, int j, int ni_1, int nj_1) { + (void) ni_1; + (void) nj_1; return point2d(j, i); } @@ -121,7 +130,7 @@ namespace mln template <typename I> inline - void load_header(I& ima, TIFF *file) + I load_header(TIFF *file) { uint32 width, height; @@ -129,7 +138,8 @@ namespace mln TIFFGetField(file, TIFFTAG_IMAGELENGTH, &height); mln_concrete(I) new_ima(height, width, 0); - exact(ima) = new_ima; + + return new_ima; } @@ -143,7 +153,7 @@ namespace mln TIFFGetField(file, TIFFTAG_SAMPLESPERPIXEL, &samples_per_pixel); uint16 data_size = bits_per_sample * samples_per_pixel; - if (data_size != 24 || data_size != 32) + if (data_size != 24 && data_size != 32) { std::cout << "Trying to load a non color TIFF " << "image into a color Milena image." << std::endl; @@ -160,26 +170,51 @@ namespace mln abort(); } - unsigned i = ima.nrows() - 1; - unsigned j = 0; - mln_piter(I) p(ima.domain()); - for_all(p) - { - unsigned idx = i * ima.ncols() + j; - value::rgb8 v; + uint16 orientation; + TIFFGetField(file, TIFFTAG_ORIENTATION, &orientation); - v.red() = (unsigned char) TIFFGetR(raster[idx]); - v.green() = (unsigned char) TIFFGetG(raster[idx]); - v.blue() = (unsigned char) TIFFGetB(raster[idx]); - ima(p) = v; + typedef point2d (*fun_t)(int, int, int, int); + fun_t funs[] = { 0, ij2rc_1, ij2rc_2, ij2rc_3, ij2rc_4, + ij2rc_5, ij2rc_6, ij2rc_7, ij2rc_8 }; + fun_t fun = funs[orientation]; + + int ni_1, nj_1; + unsigned idx = 0; - ++j; - if (!(j%ima.ncols())) + if (orientation <= 4) { - --i; - j = 0; + ni_1 = ima.nrows() - 1; + nj_1 = ima.ncols() - 1; + for (int i = 0; i <= ni_1; ++i) + for (int j = 0; j <= nj_1; ++j) + { + value::rgb8 v; + + v.red() = (unsigned char) TIFFGetR(raster[idx]); + v.green() = (unsigned char) TIFFGetG(raster[idx]); + v.blue() = (unsigned char) TIFFGetB(raster[idx]); + ima((*fun)(i, j, ni_1, nj_1)) = v; + + ++idx; + } + } + else + { + nj_1 = ima.nrows() - 1; + ni_1 = ima.ncols() - 1; + for (int j = 0; j <= nj_1; ++j) + for (int i = 0; i <= ni_1; ++i) + { + value::rgb8 v; + + v.red() = (unsigned char) TIFFGetR(raster[idx]); + v.green() = (unsigned char) TIFFGetG(raster[idx]); + v.blue() = (unsigned char) TIFFGetB(raster[idx]); + ima((*fun)(i, j, ni_1, nj_1)) = v; + + ++idx; + } } - } _TIFFfree(raster); } @@ -200,29 +235,33 @@ namespace mln abort(); } - uint32 npixels = ima.ncols() * ima.nrows(); uint32 *raster = (uint32 *) _TIFFmalloc(npixels * sizeof (uint32)); - TIFFReadRGBAImage(file, ima.ncols(), ima.nrows(), raster, 0); - + if (!TIFFReadRGBAImage(file, ima.ncols(), ima.nrows(), raster, 0)) + { + std::cout << "Error while reading the image file. Is it corrupted?" + << std::endl; + abort(); + } uint16 orientation; TIFFGetField(file, TIFFTAG_ORIENTATION, &orientation); typedef point2d (*fun_t)(int, int, int, int); - fun_t funs[] = { 0, ij2rc_1, ij2rc_2, ij2rc_3, ij2rc_4, ij2rc_5, ij2rc_6, ij2rc_7, ij2rc_8 }; + fun_t funs[] = { 0, ij2rc_1, ij2rc_2, ij2rc_3, ij2rc_4, + ij2rc_5, ij2rc_6, ij2rc_7, ij2rc_8 }; fun_t fun = funs[orientation]; int ni_1, nj_1; unsigned idx = 0; - if (orientation <= 4) + if (orientation <= 4) { ni_1 = ima.nrows() - 1; nj_1 = ima.ncols() - 1; - for (unsigned i = 0; i <= ni_1; ++i) - for (unsigned j = 0; j <= nj_1; ++j) + for (int i = 0; i <= ni_1; ++i) + for (int j = 0; j <= nj_1; ++j) { ima((*fun)(i, j, ni_1, nj_1)) = (unsigned char) TIFFGetR(raster[idx++]); } @@ -231,31 +270,13 @@ namespace mln { nj_1 = ima.nrows() - 1; ni_1 = ima.ncols() - 1; - for (unsigned j = 0; j <= nj_1; ++j) - for (unsigned i = 0; i <= ni_1; ++i) + for (int j = 0; j <= nj_1; ++j) + for (int i = 0; i <= ni_1; ++i) { ima((*fun)(i, j, ni_1, nj_1)) = (unsigned char) TIFFGetR(raster[idx++]); } } - std::cout << std::endl; - - -// unsigned i = ima.nrows() - 1; -// unsigned j = 0; -// mln_piter(I) p(ima.domain()); -// for_all(p) -// { -// unsigned idx = i * ima.ncols() + j; -// ima(p) = (unsigned char) TIFFGetR(raster[idx]); -// ++j; -// if (!(j%ima.ncols())) -// { -// --i; -// j = 0; -// } -// } - _TIFFfree(raster); } @@ -301,10 +322,12 @@ namespace mln template <typename I> inline - void load(Image<I>& ima, const std::string& filename) + void load(Image<I>& ima_, const std::string& filename) { trace::entering("mln::io::tiff::load"); + I& ima = exact(ima_); + TIFF *file = TIFFOpen(filename.c_str(), "r"); if (file == 0) { @@ -314,10 +337,10 @@ namespace mln abort(); } - internal::load_header(exact(ima), file); - internal::load_data_dispatch(exact(ima), file); + ima = internal::load_header<I>(file); + internal::load_data_dispatch(ima, file); - mln_postcondition(exact(ima).is_valid()); + mln_postcondition(ima.is_valid()); (void) TIFFClose(file); trace::exiting("mln::io::tiff::load"); diff --git a/milena/mln/value/rgb.hh b/milena/mln/value/rgb.hh index a751c65..ebeeb5e 100644 --- a/milena/mln/value/rgb.hh +++ b/milena/mln/value/rgb.hh @@ -135,6 +135,10 @@ namespace mln template <typename H, typename S, typename L> void from_to_(const value::hsl_<H,S,L>&, value::rgb<16>& to); + // rgb -> bool. + template <unsigned m> + void from_to_(const value::rgb<m>& from, bool& to); + } // end of namespace mln::convert::over_load } // end of namespace mln::convert @@ -796,6 +800,13 @@ namespace mln to = fun::v2v::f_hsl_to_rgb_3x16(from); } + template <unsigned m> + void + from_to_(const value::rgb<m>& from, bool& to) + { + to = (from.red() != 0 && from.green() != 0 && from.blue() != 0); + } + } // end of namespace mln::convert::over_load } // end of namespace mln::convert diff --git a/milena/tests/data.hh.in b/milena/tests/data.hh.in index f26299b..de0257e 100644 --- a/milena/tests/data.hh.in +++ b/milena/tests/data.hh.in @@ -1,4 +1,5 @@ -// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE) +// Copyright (C) 2008, 2009 EPITA Research and Development Laboratory +// (LRDE) // // This file is part of the Olena Library. This library is free // software; you can redistribute it and/or modify it under the terms @@ -33,10 +34,13 @@ /* Macros are evil, but they save us an extra compilation unit here (as well as additional burden in Makefiles, too.). */ -/// \brief The absolute path to the img directory of Milena. +/// The absolute path to the img directory of Milena. # define MLN_IMG_DIR "@abs_top_srcdir@/milena/img" -/// \brief The absolute path to the mesh directory of Milena. +/// The absolute path to the img directory of Milena. +# define MLN_TESTS_IMG_DIR "@abs_top_srcdir@/milena/tests/img" + +/// The absolute path to the mesh directory of Milena. # define MLN_MESH_DIR "@abs_top_srcdir@/milena/mesh" #endif // ! TESTS_DATA_HH diff --git a/milena/tests/img/test_bw.tif b/milena/tests/img/test_bw.tif new file mode 100644 index 0000000000000000000000000000000000000000..5a84c6a4c7e7044b25bd9497024f7ece35e819ac GIT binary patch literal 332 zcmYk2zY4-I5XLX{4>~9)sGtsY69*4>2SG(U2)=<t8*Q*@!3G5<@lkv>U&2Ma#0)(+ z?swt)zJvt92$}%!7*w9K*W|;X0beKrqcdBqV7W{S%dzL!=n9TY#AV0ETVoz9X}+oJ z#O9t685-=LU!lF3%W37f?RZ9-j?-6(yR2m2Go_rK;{|a)=N&rsNN)<c3Nh2^;T)y0 z!YEY&V}8H$3&-r5U>b{r<4J0w1eLU_R43FT)4Tm`tmP44ei2-Y(7#C?`Kw^FHPLHo I^96SP0N%bR?EnA( literal 0 HcmV?d00001 diff --git a/milena/tests/img/test_gl.tif b/milena/tests/img/test_gl.tif new file mode 100644 index 0000000000000000000000000000000000000000..1d9d0763c05a6263c8eb8b2222847e503eb88093 GIT binary patch literal 352 zcmebD)M8L$U|?uqkpEzA!o|wWpf~?<`fnw^|IKU<3K>|!bQl^M7z7#qF|aT&0@Z;5 zBQu!I2IMdzv6-N34xl(Ql+6lcvq9M){k)7!46Z=>2N3fC*+M|t4k#hW2r(a|R|rYH zC=y!?%60&%5r?Xm1+t|WS;6iJ0GcBWWk&$nGDvzgpll|fdJxc0%uUfRF3C^M&dATn z)z8S!P1Vmytg1>ZO4Khd%hS)#NzF^tPtPm?vhwtEGr`=<+;sht)Z&u(^c=mC%rpiD e=c3falGGH1^30M91$R&10FcohKn(IKm<9mHT`$}K literal 0 HcmV?d00001 diff --git a/milena/tests/img/test_rgb8.tif b/milena/tests/img/test_rgb8.tif new file mode 100644 index 0000000000000000000000000000000000000000..0bfc2fdfd69f8ba24c559c39e6cb752a8b87ef18 GIT binary patch literal 416 zcmebD)M9XAU|?uqQ1Jhu!o|x}-Qb|GfJN{>7sKHNA2eD_68<w79}rlPW5e*hw`ozJ zMT?b!R@>HOL5n*@k^0jQI4}q?{9|BYU<8^028_&LHXD$`h{R?BvYCNm3P6R-P;piu zpAE`p0<w7-nHVB~v>H$iACN5sWY+=Nf{YOJIe>g2sCtlnqEI%-Trnuy0mv4Is<#BP zr5IVk?wJ78APr^D0J3F}%+Y|dL2j@`VgtDh9AK!Qn46+sT#}!hosplDtDljdo2s9a zSXGr+l&D`^mZzVelbV;PpPpF)Waa7SW`emTsl_G5`kDFqC7EgZdU{ZlnVYT;lF<W- fGB_8dCYGe8D3oWGWGJ|M`UZfk^Z;Uz_rNp&W|u+T literal 0 HcmV?d00001 diff --git a/milena/tests/io/Makefile.am b/milena/tests/io/Makefile.am index 78986bd..cc4a0f8 100644 --- a/milena/tests/io/Makefile.am +++ b/milena/tests/io/Makefile.am @@ -10,4 +10,5 @@ SUBDIRS = \ pfm \ pgm \ pnm \ - ppm + ppm \ + tiff diff --git a/milena/tests/io/Makefile.am b/milena/tests/io/tiff/Makefile.am similarity index 51% copy from milena/tests/io/Makefile.am copy to milena/tests/io/tiff/Makefile.am index 78986bd..92fc55c 100644 --- a/milena/tests/io/Makefile.am +++ b/milena/tests/io/tiff/Makefile.am @@ -2,12 +2,11 @@ include $(top_srcdir)/milena/tests/tests.mk -SUBDIRS = \ - dump \ - fits \ - off \ - pbm \ - pfm \ - pgm \ - pnm \ - ppm +load_LDFLAGS=-ltiff + +check_PROGRAMS = \ + load + +load_SOURCES = load.cc + +TESTS = $(check_PROGRAMS) diff --git a/milena/tests/io/tiff/load.cc b/milena/tests/io/tiff/load.cc new file mode 100644 index 0000000..d516828 --- /dev/null +++ b/milena/tests/io/tiff/load.cc @@ -0,0 +1,97 @@ +// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE) +// +// This file is part of the Olena Library. This library is free +// software; you can redistribute it and/or modify it under the terms +// of the GNU General Public License version 2 as published by the +// Free Software Foundation. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this library; see the file COPYING. If not, write to +// the Free Software Foundation, 51 Franklin Street, Fifth Floor, +// Boston, MA 02111-1307, USA. +// +// As a special exception, you may use this file as part of a free +// software library without restriction. Specifically, if other files +// instantiate templates or use macros or inline functions from this +// file, or you compile this file and link it with other files to +// produce an executable, this file does not by itself cause the +// resulting executable to be covered by the GNU General Public +// License. This exception does not however invalidate any other +// reasons why the executable file might be covered by the GNU General +// Public License. + +/// \file tests/io/tiff/load.cc +/// +/// Test on mln::io::tiff::load. + +#include <mln/core/image/image2d.hh> +#include <mln/io/tiff/load.hh> + +#include <mln/level/compare.hh> + +#include <mln/value/int_u8.hh> +#include <mln/value/rgb8.hh> + +#include "tests/data.hh" + +#include <mln/debug/println.hh> + +using mln::value::rgb8; +using mln::value::int_u8; + +rgb8 ref_rgb[6][6] = { { rgb8(0,0,0), rgb8(255,255,255), rgb8(255,255,255), rgb8(255,255,255), rgb8(255,246,0), rgb8(0,0,0) }, + { rgb8(255,255,255), rgb8(0,0,0), rgb8(255,255,255), rgb8(255,255,255), rgb8(255,255,255), rgb8(0,0,0) }, + { rgb8(0,255,48), rgb8(255,255,255), rgb8(255,0,0), rgb8(255,255,255), rgb8(0,255,246), rgb8(0,0,0) }, + { rgb8(255,255,255), rgb8(255,255,255), rgb8(255,255,255), rgb8(0,0,0), rgb8(255,255,255), rgb8(0,0,0) }, + { rgb8(42,0,255), rgb8(255,255,255), rgb8(255,255,255), rgb8(255,255,255), rgb8(0,0,0), rgb8(0,0,0) }, + { rgb8(0,0,0), rgb8(0,0,0), rgb8(0,0,0), rgb8(0,0,0), rgb8(0,0,0), rgb8(0,0,0) } }; + +int_u8 ref_gl[6][6] = { { 0, 255, 255, 255, 230, 0 }, + { 255, 0, 255, 255, 255, 0 }, + { 186, 255, 54, 255, 200, 0 }, + { 255, 255, 255, 0, 255, 0 }, + { 27, 255, 255, 255, 0, 0 }, + { 0, 0, 0, 0, 0, 0 } }; + +bool ref_bw[6][6] = { { 0, 1, 1, 1, 1, 0 }, + { 1, 0, 1, 1, 1, 0 }, + { 1, 1, 0, 1, 1, 0 }, + { 1, 1, 1, 0, 1, 0 }, + { 0, 1, 1, 1, 0, 0 }, + { 0, 0, 0, 0, 0, 0 } }; + + +int main() +{ + using namespace mln; + using namespace mln::value; + + /// Value: rgb8 + { + image2d<rgb8> ref = make::image(ref_rgb); + image2d<rgb8> pic; + io::tiff::load(pic, MLN_TESTS_IMG_DIR "/test_rgb8.tif"); + mln_assertion(pic == ref); + } + + { + image2d<int_u8> ref = make::image(ref_gl); + image2d<int_u8> pic; + io::tiff::load(pic, MLN_TESTS_IMG_DIR "/test_gl.tif"); + mln_assertion(pic == ref); + } + + { + image2d<bool> ref = make::image(ref_bw); + image2d<bool> pic; + io::tiff::load(pic, MLN_TESTS_IMG_DIR "/test_bw.tif"); + mln_assertion(pic == ref); + } + +} + diff --git a/milena/tests/unit_test/unit-tests.mk b/milena/tests/unit_test/unit-tests.mk index c6bf5dd..15c6fcd 100644 --- a/milena/tests/unit_test/unit-tests.mk +++ b/milena/tests/unit_test/unit-tests.mk @@ -36,6 +36,7 @@ mln_draw_plot \ mln_draw_line \ mln_draw_essential \ mln_pw_image \ +mln_pw_internal_image_base \ mln_pw_all \ mln_pw_value \ mln_pw_cst \ @@ -134,10 +135,12 @@ mln_make_double_neighb2d \ mln_make_image3d \ mln_make_dpoint2d_h \ mln_make_w_window \ +mln_make_cell \ mln_make_image \ mln_make_vec \ mln_make_all \ mln_make_dual_neighb \ +mln_make_attachment \ mln_make_w_window3d \ mln_make_mat \ mln_make_win_chamfer \ @@ -148,6 +151,7 @@ mln_make_box2d \ mln_make_h_mat \ mln_make_w_window2d \ mln_make_box3d \ +mln_make_detachment \ mln_make_region_adjacency_graph \ mln_make_relabelfun \ mln_make_pixel \ @@ -156,6 +160,7 @@ mln_make_box2d_h \ mln_make_w_window1d \ mln_make_image2d \ mln_make_w_window_directional \ +mln_make_rag_and_labeled_wsl \ mln_make_w_window3d_int \ mln_make_essential \ mln_make_w_window1d_int \ @@ -178,8 +183,10 @@ mln_extension_adjust_fill \ mln_extension_fill \ mln_extension_essential \ mln_fun_p2b_chess \ +mln_fun_p2b_tautology \ mln_fun_p2b_all \ mln_fun_p2b_has \ +mln_fun_p2b_antilogy \ mln_fun_p2b_big_chess \ mln_fun_p2b_essential \ mln_fun_p2p_all \ @@ -373,6 +380,7 @@ mln_accu_min_h \ mln_accu_site_set_rectangularity \ mln_accu_site_set_all \ mln_accu_site_set_essential \ +mln_accu_stat_variance \ mln_accu_stat_deviation \ mln_accu_max \ mln_accu_lor \ @@ -394,11 +402,13 @@ mln_accu_transform \ mln_accu_median_alt \ mln_accu_volume \ mln_accu_sum \ +mln_accu_label_used \ mln_accu_height \ mln_accu_land \ mln_accu_take \ mln_accu_histo \ mln_accu_pair \ +mln_accu_count_labels \ mln_accu_count_adjacent_vertices \ mln_accu_convolve \ mln_accu_v \ @@ -451,9 +461,11 @@ mln_level_median \ mln_math_jacobi \ mln_math_max \ mln_math_sqr \ +mln_math_pi \ mln_math_all \ mln_math_sign \ mln_math_abs \ +mln_math_sin \ mln_math_cos \ mln_math_diff_abs \ mln_math_round \ @@ -605,10 +617,12 @@ mln_algebra_mat \ mln_algebra_h_mat \ mln_algebra_quat \ mln_algebra_essential \ +mln_linear_gaussian_directional_2d \ mln_linear_convolve_2x1d \ mln_linear_all \ mln_linear_ch_convolve \ mln_linear_gaussian \ +mln_linear_gaussian_1d \ mln_linear_convolve \ mln_linear_sobel_2d \ mln_linear_local_convolve \ @@ -700,7 +714,9 @@ mln_morpho_essential \ mln_topo_n_face_iter \ mln_topo_face_iter \ mln_topo_is_simple_2d \ +mln_topo_detach \ mln_topo_centered_iter_adapter \ +mln_topo_is_n_face \ mln_topo_internal_complex_set_iterator_base \ mln_topo_internal_complex_iterator_base \ mln_topo_internal_complex_relative_iterator_base \ @@ -709,6 +725,7 @@ mln_topo_algebraic_n_face \ mln_topo_attic_faces_iter \ mln_topo_adj_lower_dim_connected_n_face_iter \ mln_topo_n_face \ +mln_topo_is_facet \ mln_topo_adj_lower_higher_face_iter \ mln_topo_all \ mln_topo_face_data \ @@ -716,9 +733,11 @@ mln_topo_static_n_face_iter \ mln_topo_face \ mln_topo_adj_m_face_iter \ mln_topo_complex \ +mln_topo_is_simple_cell \ mln_topo_adj_higher_face_iter \ mln_topo_adj_lower_face_iter \ mln_topo_complex_iterators \ +mln_topo_skeleton_breadth_first_thinning \ mln_topo_center_only_iter \ mln_topo_adj_higher_dim_connected_n_face_iter \ mln_topo_algebraic_face \ @@ -943,6 +962,7 @@ mln_core_image_interpolated \ mln_core_image_lazy_image \ mln_core_image_t_image \ mln_core_image_hexa_piter \ +mln_core_image_edge_image \ mln_core_image_value_enc_image \ mln_core_image_fun_image \ mln_core_image_graph_elt_neighborhood \ @@ -956,13 +976,13 @@ mln_core_image_complex_window_piter \ mln_core_image_tr_image \ mln_core_image_sub_image \ mln_core_image_rle_image \ -mln_core_image_line_graph_elt_window \ mln_core_image_mono_rle_encode \ mln_core_image_bgraph_psite \ mln_core_image_sparse_image \ mln_core_image_bgraph_image \ mln_core_image_complex_neighborhoods \ mln_core_image_graph_window_piter \ +mln_core_image_vertex_image \ mln_core_image_sparse_encode \ mln_core_image_safe \ mln_core_image_extension_fun \ @@ -970,7 +990,6 @@ mln_core_image_image1d \ mln_core_image_extension_val \ mln_core_image_image_if \ mln_core_image_hexa \ -mln_core_image_line_graph_elt_neighborhood \ mln_core_image_extended \ mln_core_image_p2p_image \ mln_core_image_slice_image \ @@ -996,6 +1015,7 @@ mln_labeling_level \ mln_labeling_flat_zones \ mln_labeling_foreground \ mln_labeling_regional_maxima \ +mln_labeling_wrap \ mln_labeling_compute \ mln_labeling_regional_minima \ mln_labeling_essential \ @@ -1040,6 +1060,7 @@ mln_io_cloud_save \ mln_io_all \ mln_io_magick_load \ mln_io_magick_all \ +mln_io_magick_save \ mln_io_dump_load \ mln_io_dump_all \ mln_io_dump_save \ @@ -1055,6 +1076,9 @@ mln_io_pnm_save \ mln_io_pnm_save_header \ mln_io_txt_all \ mln_io_txt_save \ +mln_io_tiff_load \ +mln_io_tiff_all \ +mln_io_tiff_save \ mln_io_dicom_load \ mln_io_abort \ mln_io_fits_load \ @@ -1062,6 +1086,7 @@ mln_io_fits_all \ mln_io_off_load \ mln_io_off_all \ mln_io_off_save \ +mln_io_plot_save \ mln_io_essential \ mln_logical_includes \ mln_logical_and_not \ @@ -1155,6 +1180,7 @@ mln_draw_plot_SOURCES = mln_draw_plot.cc mln_draw_line_SOURCES = mln_draw_line.cc mln_draw_essential_SOURCES = mln_draw_essential.cc mln_pw_image_SOURCES = mln_pw_image.cc +mln_pw_internal_image_base_SOURCES = mln_pw_internal_image_base.cc mln_pw_all_SOURCES = mln_pw_all.cc mln_pw_value_SOURCES = mln_pw_value.cc mln_pw_cst_SOURCES = mln_pw_cst.cc @@ -1253,10 +1279,12 @@ mln_make_double_neighb2d_SOURCES = mln_make_double_neighb2d.cc mln_make_image3d_SOURCES = mln_make_image3d.cc mln_make_dpoint2d_h_SOURCES = mln_make_dpoint2d_h.cc mln_make_w_window_SOURCES = mln_make_w_window.cc +mln_make_cell_SOURCES = mln_make_cell.cc mln_make_image_SOURCES = mln_make_image.cc mln_make_vec_SOURCES = mln_make_vec.cc mln_make_all_SOURCES = mln_make_all.cc mln_make_dual_neighb_SOURCES = mln_make_dual_neighb.cc +mln_make_attachment_SOURCES = mln_make_attachment.cc mln_make_w_window3d_SOURCES = mln_make_w_window3d.cc mln_make_mat_SOURCES = mln_make_mat.cc mln_make_win_chamfer_SOURCES = mln_make_win_chamfer.cc @@ -1267,6 +1295,7 @@ mln_make_box2d_SOURCES = mln_make_box2d.cc mln_make_h_mat_SOURCES = mln_make_h_mat.cc mln_make_w_window2d_SOURCES = mln_make_w_window2d.cc mln_make_box3d_SOURCES = mln_make_box3d.cc +mln_make_detachment_SOURCES = mln_make_detachment.cc mln_make_region_adjacency_graph_SOURCES = mln_make_region_adjacency_graph.cc mln_make_relabelfun_SOURCES = mln_make_relabelfun.cc mln_make_pixel_SOURCES = mln_make_pixel.cc @@ -1275,6 +1304,7 @@ mln_make_box2d_h_SOURCES = mln_make_box2d_h.cc mln_make_w_window1d_SOURCES = mln_make_w_window1d.cc mln_make_image2d_SOURCES = mln_make_image2d.cc mln_make_w_window_directional_SOURCES = mln_make_w_window_directional.cc +mln_make_rag_and_labeled_wsl_SOURCES = mln_make_rag_and_labeled_wsl.cc mln_make_w_window3d_int_SOURCES = mln_make_w_window3d_int.cc mln_make_essential_SOURCES = mln_make_essential.cc mln_make_w_window1d_int_SOURCES = mln_make_w_window1d_int.cc @@ -1297,8 +1327,10 @@ mln_extension_adjust_fill_SOURCES = mln_extension_adjust_fill.cc mln_extension_fill_SOURCES = mln_extension_fill.cc mln_extension_essential_SOURCES = mln_extension_essential.cc mln_fun_p2b_chess_SOURCES = mln_fun_p2b_chess.cc +mln_fun_p2b_tautology_SOURCES = mln_fun_p2b_tautology.cc mln_fun_p2b_all_SOURCES = mln_fun_p2b_all.cc mln_fun_p2b_has_SOURCES = mln_fun_p2b_has.cc +mln_fun_p2b_antilogy_SOURCES = mln_fun_p2b_antilogy.cc mln_fun_p2b_big_chess_SOURCES = mln_fun_p2b_big_chess.cc mln_fun_p2b_essential_SOURCES = mln_fun_p2b_essential.cc mln_fun_p2p_all_SOURCES = mln_fun_p2p_all.cc @@ -1492,6 +1524,7 @@ mln_accu_min_h_SOURCES = mln_accu_min_h.cc mln_accu_site_set_rectangularity_SOURCES = mln_accu_site_set_rectangularity.cc mln_accu_site_set_all_SOURCES = mln_accu_site_set_all.cc mln_accu_site_set_essential_SOURCES = mln_accu_site_set_essential.cc +mln_accu_stat_variance_SOURCES = mln_accu_stat_variance.cc mln_accu_stat_deviation_SOURCES = mln_accu_stat_deviation.cc mln_accu_max_SOURCES = mln_accu_max.cc mln_accu_lor_SOURCES = mln_accu_lor.cc @@ -1513,11 +1546,13 @@ mln_accu_transform_SOURCES = mln_accu_transform.cc mln_accu_median_alt_SOURCES = mln_accu_median_alt.cc mln_accu_volume_SOURCES = mln_accu_volume.cc mln_accu_sum_SOURCES = mln_accu_sum.cc +mln_accu_label_used_SOURCES = mln_accu_label_used.cc mln_accu_height_SOURCES = mln_accu_height.cc mln_accu_land_SOURCES = mln_accu_land.cc mln_accu_take_SOURCES = mln_accu_take.cc mln_accu_histo_SOURCES = mln_accu_histo.cc mln_accu_pair_SOURCES = mln_accu_pair.cc +mln_accu_count_labels_SOURCES = mln_accu_count_labels.cc mln_accu_count_adjacent_vertices_SOURCES = mln_accu_count_adjacent_vertices.cc mln_accu_convolve_SOURCES = mln_accu_convolve.cc mln_accu_v_SOURCES = mln_accu_v.cc @@ -1570,9 +1605,11 @@ mln_level_median_SOURCES = mln_level_median.cc mln_math_jacobi_SOURCES = mln_math_jacobi.cc mln_math_max_SOURCES = mln_math_max.cc mln_math_sqr_SOURCES = mln_math_sqr.cc +mln_math_pi_SOURCES = mln_math_pi.cc mln_math_all_SOURCES = mln_math_all.cc mln_math_sign_SOURCES = mln_math_sign.cc mln_math_abs_SOURCES = mln_math_abs.cc +mln_math_sin_SOURCES = mln_math_sin.cc mln_math_cos_SOURCES = mln_math_cos.cc mln_math_diff_abs_SOURCES = mln_math_diff_abs.cc mln_math_round_SOURCES = mln_math_round.cc @@ -1724,10 +1761,12 @@ mln_algebra_mat_SOURCES = mln_algebra_mat.cc mln_algebra_h_mat_SOURCES = mln_algebra_h_mat.cc mln_algebra_quat_SOURCES = mln_algebra_quat.cc mln_algebra_essential_SOURCES = mln_algebra_essential.cc +mln_linear_gaussian_directional_2d_SOURCES = mln_linear_gaussian_directional_2d.cc mln_linear_convolve_2x1d_SOURCES = mln_linear_convolve_2x1d.cc mln_linear_all_SOURCES = mln_linear_all.cc mln_linear_ch_convolve_SOURCES = mln_linear_ch_convolve.cc mln_linear_gaussian_SOURCES = mln_linear_gaussian.cc +mln_linear_gaussian_1d_SOURCES = mln_linear_gaussian_1d.cc mln_linear_convolve_SOURCES = mln_linear_convolve.cc mln_linear_sobel_2d_SOURCES = mln_linear_sobel_2d.cc mln_linear_local_convolve_SOURCES = mln_linear_local_convolve.cc @@ -1819,7 +1858,9 @@ mln_morpho_essential_SOURCES = mln_morpho_essential.cc mln_topo_n_face_iter_SOURCES = mln_topo_n_face_iter.cc mln_topo_face_iter_SOURCES = mln_topo_face_iter.cc mln_topo_is_simple_2d_SOURCES = mln_topo_is_simple_2d.cc +mln_topo_detach_SOURCES = mln_topo_detach.cc mln_topo_centered_iter_adapter_SOURCES = mln_topo_centered_iter_adapter.cc +mln_topo_is_n_face_SOURCES = mln_topo_is_n_face.cc mln_topo_internal_complex_set_iterator_base_SOURCES = mln_topo_internal_complex_set_iterator_base.cc mln_topo_internal_complex_iterator_base_SOURCES = mln_topo_internal_complex_iterator_base.cc mln_topo_internal_complex_relative_iterator_base_SOURCES = mln_topo_internal_complex_relative_iterator_base.cc @@ -1828,6 +1869,7 @@ mln_topo_algebraic_n_face_SOURCES = mln_topo_algebraic_n_face.cc mln_topo_attic_faces_iter_SOURCES = mln_topo_attic_faces_iter.cc mln_topo_adj_lower_dim_connected_n_face_iter_SOURCES = mln_topo_adj_lower_dim_connected_n_face_iter.cc mln_topo_n_face_SOURCES = mln_topo_n_face.cc +mln_topo_is_facet_SOURCES = mln_topo_is_facet.cc mln_topo_adj_lower_higher_face_iter_SOURCES = mln_topo_adj_lower_higher_face_iter.cc mln_topo_all_SOURCES = mln_topo_all.cc mln_topo_face_data_SOURCES = mln_topo_face_data.cc @@ -1835,9 +1877,11 @@ mln_topo_static_n_face_iter_SOURCES = mln_topo_static_n_face_iter.cc mln_topo_face_SOURCES = mln_topo_face.cc mln_topo_adj_m_face_iter_SOURCES = mln_topo_adj_m_face_iter.cc mln_topo_complex_SOURCES = mln_topo_complex.cc +mln_topo_is_simple_cell_SOURCES = mln_topo_is_simple_cell.cc mln_topo_adj_higher_face_iter_SOURCES = mln_topo_adj_higher_face_iter.cc mln_topo_adj_lower_face_iter_SOURCES = mln_topo_adj_lower_face_iter.cc mln_topo_complex_iterators_SOURCES = mln_topo_complex_iterators.cc +mln_topo_skeleton_breadth_first_thinning_SOURCES = mln_topo_skeleton_breadth_first_thinning.cc mln_topo_center_only_iter_SOURCES = mln_topo_center_only_iter.cc mln_topo_adj_higher_dim_connected_n_face_iter_SOURCES = mln_topo_adj_higher_dim_connected_n_face_iter.cc mln_topo_algebraic_face_SOURCES = mln_topo_algebraic_face.cc @@ -2062,6 +2106,7 @@ mln_core_image_interpolated_SOURCES = mln_core_image_interpolated.cc mln_core_image_lazy_image_SOURCES = mln_core_image_lazy_image.cc mln_core_image_t_image_SOURCES = mln_core_image_t_image.cc mln_core_image_hexa_piter_SOURCES = mln_core_image_hexa_piter.cc +mln_core_image_edge_image_SOURCES = mln_core_image_edge_image.cc mln_core_image_value_enc_image_SOURCES = mln_core_image_value_enc_image.cc mln_core_image_fun_image_SOURCES = mln_core_image_fun_image.cc mln_core_image_graph_elt_neighborhood_SOURCES = mln_core_image_graph_elt_neighborhood.cc @@ -2075,13 +2120,13 @@ mln_core_image_complex_window_piter_SOURCES = mln_core_image_complex_window_pite mln_core_image_tr_image_SOURCES = mln_core_image_tr_image.cc mln_core_image_sub_image_SOURCES = mln_core_image_sub_image.cc mln_core_image_rle_image_SOURCES = mln_core_image_rle_image.cc -mln_core_image_line_graph_elt_window_SOURCES = mln_core_image_line_graph_elt_window.cc mln_core_image_mono_rle_encode_SOURCES = mln_core_image_mono_rle_encode.cc mln_core_image_bgraph_psite_SOURCES = mln_core_image_bgraph_psite.cc mln_core_image_sparse_image_SOURCES = mln_core_image_sparse_image.cc mln_core_image_bgraph_image_SOURCES = mln_core_image_bgraph_image.cc mln_core_image_complex_neighborhoods_SOURCES = mln_core_image_complex_neighborhoods.cc mln_core_image_graph_window_piter_SOURCES = mln_core_image_graph_window_piter.cc +mln_core_image_vertex_image_SOURCES = mln_core_image_vertex_image.cc mln_core_image_sparse_encode_SOURCES = mln_core_image_sparse_encode.cc mln_core_image_safe_SOURCES = mln_core_image_safe.cc mln_core_image_extension_fun_SOURCES = mln_core_image_extension_fun.cc @@ -2089,7 +2134,6 @@ mln_core_image_image1d_SOURCES = mln_core_image_image1d.cc mln_core_image_extension_val_SOURCES = mln_core_image_extension_val.cc mln_core_image_image_if_SOURCES = mln_core_image_image_if.cc mln_core_image_hexa_SOURCES = mln_core_image_hexa.cc -mln_core_image_line_graph_elt_neighborhood_SOURCES = mln_core_image_line_graph_elt_neighborhood.cc mln_core_image_extended_SOURCES = mln_core_image_extended.cc mln_core_image_p2p_image_SOURCES = mln_core_image_p2p_image.cc mln_core_image_slice_image_SOURCES = mln_core_image_slice_image.cc @@ -2115,6 +2159,7 @@ mln_labeling_level_SOURCES = mln_labeling_level.cc mln_labeling_flat_zones_SOURCES = mln_labeling_flat_zones.cc mln_labeling_foreground_SOURCES = mln_labeling_foreground.cc mln_labeling_regional_maxima_SOURCES = mln_labeling_regional_maxima.cc +mln_labeling_wrap_SOURCES = mln_labeling_wrap.cc mln_labeling_compute_SOURCES = mln_labeling_compute.cc mln_labeling_regional_minima_SOURCES = mln_labeling_regional_minima.cc mln_labeling_essential_SOURCES = mln_labeling_essential.cc @@ -2159,6 +2204,7 @@ mln_io_cloud_save_SOURCES = mln_io_cloud_save.cc mln_io_all_SOURCES = mln_io_all.cc mln_io_magick_load_SOURCES = mln_io_magick_load.cc mln_io_magick_all_SOURCES = mln_io_magick_all.cc +mln_io_magick_save_SOURCES = mln_io_magick_save.cc mln_io_dump_load_SOURCES = mln_io_dump_load.cc mln_io_dump_all_SOURCES = mln_io_dump_all.cc mln_io_dump_save_SOURCES = mln_io_dump_save.cc @@ -2174,6 +2220,9 @@ mln_io_pnm_save_SOURCES = mln_io_pnm_save.cc mln_io_pnm_save_header_SOURCES = mln_io_pnm_save_header.cc mln_io_txt_all_SOURCES = mln_io_txt_all.cc mln_io_txt_save_SOURCES = mln_io_txt_save.cc +mln_io_tiff_load_SOURCES = mln_io_tiff_load.cc +mln_io_tiff_all_SOURCES = mln_io_tiff_all.cc +mln_io_tiff_save_SOURCES = mln_io_tiff_save.cc mln_io_dicom_load_SOURCES = mln_io_dicom_load.cc mln_io_abort_SOURCES = mln_io_abort.cc mln_io_fits_load_SOURCES = mln_io_fits_load.cc @@ -2181,6 +2230,7 @@ mln_io_fits_all_SOURCES = mln_io_fits_all.cc mln_io_off_load_SOURCES = mln_io_off_load.cc mln_io_off_all_SOURCES = mln_io_off_all.cc mln_io_off_save_SOURCES = mln_io_off_save.cc +mln_io_plot_save_SOURCES = mln_io_plot_save.cc mln_io_essential_SOURCES = mln_io_essential.cc mln_logical_includes_SOURCES = mln_logical_includes.cc mln_logical_and_not_SOURCES = mln_logical_and_not.cc -- 1.5.6.5