


\begin{DoxyItemize}
\item \hyperlink{a00018}{Welcome}
\item \hyperlink{a00019}{Installation}
\item \hyperlink{a00020}{Getting started with Milena}
\item \hyperlink{a00021}{Data representation}
\item \hyperlink{a00022}{Load and save images}
\item \hyperlink{a00023}{Create your first image}
\item \hyperlink{a00024}{Read and write images}
\item \hyperlink{a00025}{Regions of interest}
\end{DoxyItemize}

 \hypertarget{tuto1}{}\section{Welcome}\label{tuto1}
\hypertarget{d1/d2b/a00018_tuto1howotlearn}{}\subsection{How to learn Milena}\label{d1/d2b/a00018_tuto1howotlearn}
\hypertarget{d1/d2b/a00018_tuto1obtainingthelib}{}\subsection{Obtaining the library}\label{d1/d2b/a00018_tuto1obtainingthelib}
\hypertarget{d1/d2b/a00018_tuto1downloading}{}\subsection{Downloading the library}\label{d1/d2b/a00018_tuto1downloading}
\hypertarget{d1/d2b/a00018_tuto1downloadingsvn}{}\subsubsection{Downloading from SVN}\label{d1/d2b/a00018_tuto1downloadingsvn}
\hyperlink{a00019}{Installation} \hyperlink{a00018_tuto1dirstruct}{Directory structure} \hyperlink{a00018_tuto1mailinglists}{Join the mailing lists} \hypertarget{d1/d2b/a00018_tuto1downloadingpackages}{}\subsubsection{Downloading packaged releases}\label{d1/d2b/a00018_tuto1downloadingpackages}
\hyperlink{a00019}{Installation} \hyperlink{a00018_tuto1dirstruct}{Directory structure} \hyperlink{a00018_tuto1mailinglists}{Join the mailing lists} \hyperlink{a00018_tuto1documentation}{Documentation} \hypertarget{d1/d2b/a00018_tuto1mailinglists}{}\subsection{Join the mailing lists}\label{d1/d2b/a00018_tuto1mailinglists}
\hypertarget{d1/d2b/a00018_tuto1dirstruct}{}\subsection{Directory structure}\label{d1/d2b/a00018_tuto1dirstruct}
\hypertarget{d1/d2b/a00018_tuto1documentation}{}\subsection{Documentation}\label{d1/d2b/a00018_tuto1documentation}
\hypertarget{d1/d2b/a00018_tuto1community}{}\subsection{Community and Support}\label{d1/d2b/a00018_tuto1community}
\hyperlink{a00018_tuto1mailinglists}{Join the mailing lists} \hyperlink{a00018_tuto1contacts}{Contacts} \hypertarget{d1/d2b/a00018_tuto1projectstatus}{}\subsection{Project status}\label{d1/d2b/a00018_tuto1projectstatus}
\hyperlink{a00018_tuto1mailinglists}{Join the mailing lists} \hypertarget{d1/d2b/a00018_tuto1briefhistory}{}\subsection{A brief history of Milena}\label{d1/d2b/a00018_tuto1briefhistory}
\hypertarget{d1/d2b/a00018_tuto1contacts}{}\subsection{Contacts}\label{d1/d2b/a00018_tuto1contacts}
\hyperlink{a00019}{Installation}  \hypertarget{tuto2}{}\section{Installation}\label{tuto2}
\hypertarget{dd/da2/a00019_tuto2bootstrap}{}\subsection{Bootstrap (SVN Sources)}\label{dd/da2/a00019_tuto2bootstrap}
\hyperlink{a00019_tuto2configure}{Configure} \hypertarget{dd/da2/a00019_tuto2configure}{}\subsection{Configure}\label{dd/da2/a00019_tuto2configure}
\hypertarget{dd/da2/a00019_tuto2install}{}\subsection{Install}\label{dd/da2/a00019_tuto2install}
\hyperlink{a00019_tuto2optionalcomp}{Optional compilation} \hyperlink{a00019_tuto2installcontent}{Installation content} \hypertarget{dd/da2/a00019_tuto2optionalcomp}{}\subsection{Optional compilation}\label{dd/da2/a00019_tuto2optionalcomp}
\hypertarget{dd/da2/a00019_tuto2examples}{}\subsubsection{Examples}\label{dd/da2/a00019_tuto2examples}
\hypertarget{dd/da2/a00019_tuto2tools}{}\subsubsection{Tools}\label{dd/da2/a00019_tuto2tools}
\hypertarget{dd/da2/a00019_tuto2tests}{}\subsubsection{Tests}\label{dd/da2/a00019_tuto2tests}
\hypertarget{dd/da2/a00019_tuto2installcontent}{}\subsection{Installation content}\label{dd/da2/a00019_tuto2installcontent}
\hyperlink{a00018}{Welcome} \hyperlink{a00020}{Getting started with Milena}  \hypertarget{tuto3}{}\section{Getting started with Milena}\label{tuto3}
\hypertarget{db/db2/a00020_tuto3getfamiliargen}{}\subsection{Getting familiar with genericity}\label{db/db2/a00020_tuto3getfamiliargen}



\begin{DoxyCodeInclude}
// Java or C -like code

void fill(image *ima, unsigned char v)
{
   for (int i = 0; i < ima->nrows; ++i)
     for (int j = 0; j < ima->ncols; ++j)
        ima->data[i][j] = v;
}
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
template <typename I>
void fill(I& ima, mln_value(I) v)
{
  mln_piter(I) p(ima.domain());
  for_all(p)
    ima(p) = v;
}
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  fill(ima, literal::green);
\end{DoxyCodeInclude}









\begin{DoxyCodeInclude}
  box2d b(20,20);
  fill((ima | b).rw(), literal::green);
\end{DoxyCodeInclude}






\hypertarget{db/db2/a00020_tuto3firstgenalgo}{}\subsection{First generic algorithm}\label{db/db2/a00020_tuto3firstgenalgo}



\begin{DoxyCodeInclude}
#include <mln/core/image/image2d.hh>
#include <mln/core/image/dmorph/image_if.hh>
#include <mln/core/alias/neighb2d.hh>

#include <mln/data/fill.hh>

#include <mln/labeling/blobs.hh>
#include <mln/labeling/compute.hh>
#include <mln/labeling/blobs.hh>

#include <mln/data/compare.hh>

#include <mln/util/array.hh>

#include <mln/value/label_8.hh>

#include <mln/accu/math/count.hh>

#include <mln/pw/all.hh>

#include <tests/data.hh>
#include <doc/tools/sample_utils.hh>

namespace mln
{

  template <typename I, typename N>
  mln_concrete(I)
  my_algorithm(const Image<I>& ima_,
               const Neighborhood<N>& nbh_)
  {
    trace::entering("my_algorithm");

    const I& ima = exact(ima_);
    const N& nbh = exact(nbh_);
    mln_precondition(ima.is_valid());
    mln_precondition(nbh.is_valid());

    typedef value::label_8 V;
    V nlabels;
    mln_ch_value(I,V) lbl = labeling::blobs(ima, nbh, nlabels);
    util::array<unsigned>
      count = labeling::compute(accu::meta::math::count(),
                                lbl,
                                nlabels);

    mln_concrete(I) output;
    initialize(output, ima);
    data::fill(output, literal::one);

    for (unsigned i = 1; i <= nlabels; ++i)
      if (count[i] < 10u)
        data::fill((output | (pw::value(lbl) == pw::cst(i))).rw(),
                   literal::zero);

    trace::exiting("my_algorithm");
    return output;
  }

} // end of namespace mln
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  template <typename I, typename N>
  mln_concrete(I)
  my_algorithm(const Image<I>& ima_,
               const Neighborhood<N>& nbh_)
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    trace::entering("my_algorithm");
\end{DoxyCodeInclude}


\hyperlink{a00020_tuto3debughints}{Debug hints} 


\begin{DoxyCodeInclude}
    const I& ima = exact(ima_);
    const N& nbh = exact(nbh_);
    mln_precondition(ima.is_valid());
    mln_precondition(nbh.is_valid());
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    typedef value::label_8 V;
    V nlabels;
    mln_ch_value(I,V) lbl = labeling::blobs(ima, nbh, nlabels);
    util::array<unsigned>
      count = labeling::compute(accu::meta::math::count(),
                                lbl,
                                nlabels);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    mln_concrete(I) output;
    initialize(output, ima);
    data::fill(output, literal::one);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    for (unsigned i = 1; i <= nlabels; ++i)
      if (count[i] < 10u)
        data::fill((output | (pw::value(lbl) == pw::cst(i))).rw(),
                   literal::zero);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    trace::exiting("my_algorithm");
    return output;
\end{DoxyCodeInclude}


\hypertarget{db/db2/a00020_tuto3compilhints}{}\subsection{Compilation}\label{db/db2/a00020_tuto3compilhints}
\hypertarget{db/db2/a00020_tuto3howtocompile}{}\subsubsection{Include path}\label{db/db2/a00020_tuto3howtocompile}
\hypertarget{db/db2/a00020_tuto3liblink}{}\subsubsection{Library linking}\label{db/db2/a00020_tuto3liblink}
\hyperlink{a00012}{Input / Output} \hypertarget{db/db2/a00020_tuto3compildndebug}{}\subsubsection{Disable Debug}\label{db/db2/a00020_tuto3compildndebug}
\hypertarget{db/db2/a00020_tuto3compoptimflags}{}\subsubsection{Compiler optimization flags}\label{db/db2/a00020_tuto3compoptimflags}
\hypertarget{db/db2/a00020_tuto3compoptimgcc}{}\paragraph{GCC}\label{db/db2/a00020_tuto3compoptimgcc}
\hypertarget{db/db2/a00020_tuto3compoptimother}{}\paragraph{Other compilers}\label{db/db2/a00020_tuto3compoptimother}
\hypertarget{db/db2/a00020_tuto3debughints}{}\subsection{Debug hints}\label{db/db2/a00020_tuto3debughints}
\hypertarget{db/db2/a00020_tuto3gdbhints}{}\subsubsection{Using assertions and GDB}\label{db/db2/a00020_tuto3gdbhints}
\hypertarget{db/db2/a00020_tuto3traces}{}\subsubsection{Traces}\label{db/db2/a00020_tuto3traces}



\begin{DoxyCodeInclude}
  // ...
  trace::quiet = false;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  labeling::blobs(ima, c4(), nlabels);

  trace::quiet = true;

  geom::bbox(ima);
  // ...
\end{DoxyCodeInclude}


\hypertarget{db/db2/a00020_tuto3debugroutines}{}\subsubsection{Debug routines}\label{db/db2/a00020_tuto3debugroutines}



\begin{DoxyCodeInclude}
    image2d<int_u8> ima(5,5);
    data::fill(ima, 2);
    debug::println(ima);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 

\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    image2d<int_u8> ima(5,5);
    data::fill(ima, 2);
    border::fill(ima, 7);
    debug::println_with_border(ima);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
7 7 7 7 7 7 7 7 7 7 7 
7 7 7 7 7 7 7 7 7 7 7 
7 7 7 7 7 7 7 7 7 7 7 
7 7 7 2 2 2 2 2 7 7 7 
7 7 7 2 2 2 2 2 7 7 7 
7 7 7 2 2 2 2 2 7 7 7 
7 7 7 2 2 2 2 2 7 7 7 
7 7 7 2 2 2 2 2 7 7 7 
7 7 7 7 7 7 7 7 7 7 7 
7 7 7 7 7 7 7 7 7 7 7 
7 7 7 7 7 7 7 7 7 7 7 

\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  int_u8 vals[25] = { 100, 100, 200, 200, 230,
                      100, 100, 200, 230, 230,
                      140, 140, 140,   0,   0,
                       65, 186, 65, 127, 127,
                       65,  65, 65, 127, 127 };

  image2d<int_u8> ima = make::image2d(vals);
  image2d<rgb8> ima_color = labeling::colorize(rgb8(), ima, 230);
\end{DoxyCodeInclude}










\hyperlink{a00019}{Installation} \hyperlink{a00021}{Data representation}  \hypertarget{tuto4}{}\section{Data representation}\label{tuto4}
\hypertarget{de/d11/a00021_tuto4sites}{}\subsection{Sites}\label{de/d11/a00021_tuto4sites}



\begin{DoxyCodeInclude}
  point2d p(3,3);
  std::cout << p << std::endl;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
(3,3)
\end{DoxyCodeInclude}


\hypertarget{de/d11/a00021_tuto4sitesets}{}\subsection{Site sets}\label{de/d11/a00021_tuto4sitesets}
\hyperlink{a00005}{Site set} \hypertarget{de/d11/a00021_tuto4createsiteset}{}\subsubsection{Creating a site set}\label{de/d11/a00021_tuto4createsiteset}



\begin{DoxyCodeInclude}
  box2d b(4,4);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,2), (2,3
      ), (3,0), (3,1), (3,2), (3,3), 
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
    mln_piter_(p_array<point2d>) p(arr);
    for_all(p)
      std::cout << p << ", ";
    std::cout << std::endl;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
(-2,-2), (-2,-1), (-2,0), (-2,1), (-2,2), (-1,-2), (-1,-1), (-1,0), (-1,1), (-1,2
      ), (0,-2), (0,-1), (0,0), (0,1), (0,2), (1,-2), (1,-1), (1,0), (1,1), (1,2), (2,-
      2), (2,-1), (2,0), (2,1), (2,2), 
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  mln_piter_(box2d) p(b);
  for_all(p)
    std::cout << p << ", ";
  std::cout << std::endl;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
(2,2), (1,2), 
\end{DoxyCodeInclude}


\hypertarget{de/d11/a00021_tuto4accesstosites}{}\subsubsection{Getting access to sites}\label{de/d11/a00021_tuto4accesstosites}
\hypertarget{de/d11/a00021_tuto4images}{}\subsection{Images}\label{de/d11/a00021_tuto4images}
\hypertarget{de/d11/a00021_tuto4createimate}{}\subsubsection{Creating an image}\label{de/d11/a00021_tuto4createimate}
\hypertarget{de/d11/a00021_tuto4readimage}{}\subsubsection{Reading an image from a file}\label{de/d11/a00021_tuto4readimage}
\hypertarget{de/d11/a00021_tuto4accessdata}{}\subsubsection{Accessing data}\label{de/d11/a00021_tuto4accessdata}
\hyperlink{a00020}{Getting started with Milena} \hyperlink{a00022}{Load and save images}  \hypertarget{tuto5}{}\section{Load and save images}\label{tuto5}



\begin{DoxyCodeInclude}
  image2d<bool> ima;
  io::pbm::load(ima, MLN_DOC_DIR "/img/small.pbm");
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  io::pbm::save(ima, MLN_DOC_DIR "/figures/ima_save.pbm");
\end{DoxyCodeInclude}


\hyperlink{a00006_imaio}{Load and save images} \hyperlink{a00021}{Data representation} \hyperlink{a00023}{Create your first image}  \hypertarget{tuto6}{}\section{Create your first image}\label{tuto6}
\begin{DoxySeeAlso}{See also}
\hyperlink{a02322_source}{tuto2\_\-first\_\-image.cc} 
\end{DoxySeeAlso}

\begin{DoxyCodeInclude}
  bool vals[13][21] = {
      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      {0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0},
      {0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0},
      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      {0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0},
      {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0},
      {0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0},
      {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
  };
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  image2d<bool> ima = make::image(vals);
\end{DoxyCodeInclude}


\hyperlink{a00006_imacreate}{Create an image} 


\begin{DoxyCodeInclude}
  debug::println(ima);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
- - - - - - - - - - - - - - - - - - - - - 
- | - | - | | | - | - - - | - - - - | - - 
- | - | - | - - - | - - - | - - - | - | - 
- | | | - | | | - | - - - | - - - | - | - 
- | - | - | - - - | - - - | - - - | - | - 
- | - | - | | | - | | | - | | | - - | - - 
- - - - - - - - - - - - - - - - - - - - - 
- | - | - - | - - | | - - | - - - | | - - 
- | - | - | - | - | - | - | - - - | - | - 
- | - | - | - | - | | - - | - - - | - | - 
- | | | - | - | - | - | - | - - - | - | - 
- | - | - - | - - | - | - | | | - | | - - 
- - - - - - - - - - - - - - - - - - - - - 

\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  doc::pbmsave(ima, "tuto2_first_image");
\end{DoxyCodeInclude}






\hyperlink{a00006_imapossvalues}{Possible value types} \hyperlink{a00022}{Load and save images} \hyperlink{a00024}{Read and write images}  \hypertarget{tuto7}{}\section{Read and write images}\label{tuto7}
\begin{DoxySeeAlso}{See also}
\hyperlink{a02323_source}{tuto3\_\-rw\_\-image.cc} 
\end{DoxySeeAlso}

\begin{DoxyCodeInclude}
  image2d<value::rgb8> ima(40, 40);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  data::fill(ima, literal::red);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  for (def::coord row = 20; row < 30; ++row)
    for (def::coord col = 20; col < 30; ++col)
      ima(point2d(row, col)) = literal::blue;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  for (def::coord row = 20; row < 30; ++row)
    for (def::coord col = 20; col < 30; ++col)
      opt::at(ima, row, col) = literal::blue;
\end{DoxyCodeInclude}









\begin{DoxyCodeInclude}
  image2d<value::rgb8> lena;
  io::ppm::load(lena, MLN_IMG_DIR "/small.ppm");
\end{DoxyCodeInclude}









\begin{DoxyCodeInclude}
  data::fill(ima, lena);
\end{DoxyCodeInclude}









\begin{DoxyCodeInclude}
  data::paste(ima, lena);
\end{DoxyCodeInclude}






\hyperlink{a00006_imaaccessmodval}{Access and modify values} \hyperlink{a00011_fillop}{Fill} \hyperlink{a00011_pasteop}{Paste} \hyperlink{a00023}{Create your first image} \hyperlink{a00025}{Regions of interest}  \hypertarget{tuto8}{}\section{Regions of interest}\label{tuto8}
\begin{DoxySeeAlso}{See also}
\hyperlink{a02324_source}{tuto4\_\-genericity\_\-and\_\-algorithms.cc} 
\end{DoxySeeAlso}

\begin{DoxyCodeInclude}
  image2d<value::rgb8> lena;
  io::ppm::load(lena, MLN_IMG_DIR "/small.ppm");
\end{DoxyCodeInclude}









\begin{DoxyCodeInclude}
namespace data
{

  template <typename I, typename D>
  void fill(Image<I>& ima, const D& data);

}
\end{DoxyCodeInclude}


\hypertarget{d3/dfe/a00025_tuto4imadomainsiteset}{}\subsection{Image domain restricted by a site set}\label{d3/dfe/a00025_tuto4imadomainsiteset}



\begin{DoxyCodeInclude}
  box2d roi = make::box2d(20, 20, 39, 39);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  data::fill((lena | roi).rw(), literal::green);
\end{DoxyCodeInclude}










\hypertarget{d3/dfe/a00025_tuto4imadomainfun}{}\subsection{Image domain restricted by a function}\label{d3/dfe/a00025_tuto4imadomainfun}



\begin{DoxyCodeInclude}
  p_array<point2d> arr;
  for (def::coord row = geom::min_row(lena); row < geom::max_row(lena); ++row)
    for (def::coord col = geom::min_row(lena); col < geom::max_col(lena); ++col)
      if (((row + col) % 2) == 0)
        arr.append(point2d(row, col));
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  for (def::coord row = geom::min_row(lena); row < geom::max_row(lena); ++row)
    for (def::coord col = geom::min_row(lena); col < geom::max_col(lena); ++col)
      if (((row + col) % 2) == 0)
        opt::at(lena, row, col) = literal::green;
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  data::fill((lena | fun::p2b::chess()).rw(), literal::green);
\end{DoxyCodeInclude}










\hypertarget{d3/dfe/a00025_tuto4imadomainmask}{}\subsection{Image domain restricted by a mask}\label{d3/dfe/a00025_tuto4imadomainmask}



\begin{DoxyCodeInclude}
  image2d<bool> mask;
  initialize(mask, lena);
  data::fill(mask, false);
  data::fill((mask | make::box2d(10, 10, 14, 14)).rw(), true);
  data::fill((mask | make::box2d(25, 15, 29, 18)).rw(), true);
  data::fill((mask | make::box2d(50, 50, 54, 54)).rw(), true);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  data::fill((lena | pw::value(mask)).rw(), literal::green);
\end{DoxyCodeInclude}














\hypertarget{d3/dfe/a00025_tuto4imadomainpredicate}{}\subsection{Image domain restricted by a predicate}\label{d3/dfe/a00025_tuto4imadomainpredicate}



\begin{DoxyCodeInclude}
  image2d<bool> lena_bw = binarization::binarization(lena, keep_specific_colors()
      );
  value::label_8 nlabels;
  image2d<value::label_8> label = labeling::blobs(lena_bw, c8(), nlabels);
\end{DoxyCodeInclude}





\begin{DoxyCodeInclude}
  data::fill((lena | (pw::value(label) == pw::cst(0u))).rw(), literal::blue);
\end{DoxyCodeInclude}














\hyperlink{a00024}{Read and write images}  