r2618: Work on INIM classification

URL: https://svn.lrde.epita.fr/svn/oln/branches/cleanup-2008/milena/sandbox ChangeLog: 2008-10-21 Ugo Jardonnet <ugo.jardonnet@lrde.epita.fr> Work on INIM classification * classif/Makefile: Change flags. * classif/iccvg04.cc: Implement classification method of ICCVG04. * classif/scoolNBR.ppm: Remove. Makefile | 1 iccvg04.cc | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 84 insertions(+), 14 deletions(-) Index: branches/cleanup-2008/milena/sandbox/classif/scoolNBR.ppm (deleted) =================================================================== Index: branches/cleanup-2008/milena/sandbox/classif/iccvg04.cc =================================================================== --- branches/cleanup-2008/milena/sandbox/classif/iccvg04.cc (revision 2617) +++ branches/cleanup-2008/milena/sandbox/classif/iccvg04.cc (revision 2618) @@ -6,10 +6,14 @@ #include <mln/value/all.hh> #include <mln/level/fill.hh> +#include <mln/morpho/closing_volume.hh> #include <mln/morpho/closing_area.hh> #include <mln/arith/revert.hh> #include <mln/morpho/meyer_wst.hh> -#include <mln/core/alias/neighb2d.hh> +#include <mln/core/alias/neighb3d.hh> + +// FIXME: !? +#include <mln/geom/all.hh> #include <mln/io/ppm/load.hh> @@ -23,14 +27,14 @@ mln::image3d<unsigned> fill_histo(const I& ima) { - image3d< unsigned > histo(256,256,256); + image3d< unsigned > histo(128,128,128); level::fill(histo, 0); unsigned i = 0; mln_piter(I) p(ima.domain()); for_all(p) { - point3d p3(ima(p).red(),ima(p).green(), ima(p).blue()); + point3d p3(ima(p).red()/2,ima(p).green()/2, ima(p).blue()/2); histo(p3)++; } return histo; @@ -48,29 +52,85 @@ } template <typename I> -void display_proj(const I& histo) +void display_proj_revert(const I& histo, const char * s) { - image2d< unsigned long long > proj_histo(256,256); + image2d< unsigned long long > proj_histo(geom::nrows(histo),geom::ncols(histo)); level::fill(proj_histo, 0); mln_piter_(image2d< unsigned long long >) p(proj_histo.domain()); double max = 0; for_all(p) { - for (unsigned i = 0; i < 256; i++) + for (unsigned i = 0; i < geom::nslis(histo); i++) +// if (histo(point3d(p[0], p[1], i)) < 255) proj_histo(p) += histo(point3d(p[0], p[1], i)); if (proj_histo(p) > max) max = proj_histo(p); } - image2d< value::int_u8 > out(256, 256); + image2d< value::int_u8 > out(proj_histo.domain()); + for_all(p) + { + out(p) = (proj_histo(p) / max) * 255; + + if (out(p) < 255) + out(p) -= (255 - out(p)) * 10; + } + + io::pgm::save(out,s); +} + +template <typename I> +void display_proj_min(const I& histo, const char * s) +{ + image2d< unsigned long long > proj_histo(geom::nrows(histo),geom::ncols(histo)); + level::fill(proj_histo, 0); + + mln_piter_(image2d< unsigned long long >) p(proj_histo.domain()); + double max = 0; + for_all(p) + { + unsigned min = 9999999; + for (unsigned i = 0; i < geom::nslis(histo); i++) + if (histo(point3d(p[0], p[1], i)) < min) + min = histo(point3d(p[0], p[1], i)); + proj_histo(p) = min; + + if (proj_histo(p) > max) + max = proj_histo(p); + } + + image2d< value::int_u8 > out(proj_histo.domain()); for_all(p) { out(p) = (proj_histo(p) / max) * 255; } - io::pgm::save(out,"./chiche.pgm"); + io::pgm::save(out, s); +} + + +template <typename I> +mln_ch_value(I, value::int_u8) normalizeu8(const I& ima) +{ + mln_ch_value(I, value::int_u8) res(ima.domain()); + level::fill(res, literal::zero); + + mln_piter(I) p(ima.domain()); + mln_value(I) max = 0; + for_all(p) + { + if (ima(p) > max) + max = ima(p); + } + + for_all(p) + { + res(p) = (ima(p) / (double) max) * 255; + } + + return res; } int main(int argc, char **argv) @@ -78,14 +138,25 @@ image2d<value::rgb8> ima; ima = io::ppm::load<value::rgb8>(argv[1]); + //make histo image3d<unsigned> histo = fill_histo(ima); - histo = arith::revert(histo); - image3d<value::int_u8> histo_closed(histo.domain()); + image3d<value::int_u8> nhisto = normalizeu8(histo); + + //revert histo + image3d<value::int_u8> rhisto = arith::revert(nhisto); + //compute closing_area of histo + + image3d<unsigned> histo_closure(histo.domain()); + morpho::closing_area(rhisto, c6(), 420, histo_closure); + + //display_proj_revert(histo_closure, "chisto.ppm"); - morpho::closing_area(histo, c4(), 510, histo_closed); + //watershed over histo_closure + value::int_u16 nbasins; + image3d<value::int_u16> ws = morpho::meyer_wst(histo_closure, c6(), nbasins); - //display_proj(arith::revert(histo)); + display_proj_revert(ws, "whisto.ppm"); + //gplot(ws); - //display_proj(histo); } Index: branches/cleanup-2008/milena/sandbox/classif/Makefile =================================================================== --- branches/cleanup-2008/milena/sandbox/classif/Makefile (revision 2617) +++ branches/cleanup-2008/milena/sandbox/classif/Makefile (revision 2618) @@ -1,2 +1,2 @@ all: - g++ *.cc -I../../ -O3 \ No newline at end of file + g++ *.cc -I../../ -O1 -DNDEBUG \ No newline at end of file
participants (1)
-
Ugo Jardonnet