[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2.1 Morphological processings 2.2 Level processings
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Soille refers to P. Soille, morphological Image Analysis -- Principals and Applications. Springer 1998.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/gradient.hh"
mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::beucher_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::beucher_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::beucher_gradient (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::beucher_gradient (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::beucher_gradient(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/top_hat.hh"
typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::black_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::black_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::black_top_hat(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/closing.hh"
Concrete(I) morpho::closing (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::closing (const image<I>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
image2d<bin> im = load("object.pbm"); save(morpho::closing(im, win_c8p()), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/dilation.hh"
Concrete(I) morpho::dilation (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::dilation (const image<I>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
On grey-scale images, each point is replaced by the maximum value
of its neighbors, as indicated by se. On binary images,
a logical or
is performed between neighbors.
The morpho::fast
version of this function use a different
image2d<bin> im = load("object.pbm"); save(morpho::dilation(im, win_c8p()), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/erosion.hh"
Concrete(I) morpho::erosion (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::erosion (const image<I>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
On grey-scale images, each point is replaced by the minimum value
of its neighbors, as indicated by se. On binary images,
a logical and
is performed between neighbors.
The morpho::fast
version of this function use a different
image2d<bin> im = load("object.pbm"); save(morpho::erosion(im, win_c8p()), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/gradient.hh"
mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::external_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::external_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::external_gradient (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::external_gradient (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::external_gradient(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/geodesic_dilation.hh"
Concrete(I1) morpho::geodesic_dilation (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::geodesic_dilation(dark, light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/geodesic_erosion.hh"
Concrete(I1) morpho::geodesic_erosion (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::geodesic_erosion(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/hit_or_miss.hh"
typename mute<_I, typename convoutput<C, Value(_I)>::ret>::ret
morpho::hit_or_miss (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); typename mute<_I, typename convoutput<C, Value(_I)>::ret>::ret
morpho::fast::hit_or_miss (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::hit_or_miss (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::fast::hit_or_miss (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2);
c | IN | conversion object | |
input | IN | input image | |
se1 | IN | structural element | |
se2 | IN | structural element |
By definition se1 and se2 must have the same origin, and need to
be disjoint. This algorithm has been extended to every data types
(althought it is not increasing). Beware the result depends upon the
image data type if it is not bin
.
image2d<bin> im = load("object.pbm"); window2d mywin; mywin .add(-3,-2).add(-3,-1).add(-3,0).add(-3,1).add(-3,2) .add(-2,-1).add(-2,0).add(-2,1) .add(-1,0); window2d mywin2 = - mywin; save(morpho::fast::hit_or_miss(convert::bound<int_u8>(), im, mywin, mywin2), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/hit_or_miss.hh"
Concrete(I) morpho::hit_or_miss_closing (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::fast::hit_or_miss_closing (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2);
input | IN | input image | |
se1 | IN | structural element | |
se2 | IN | structural element |
By definition se1 and se2 must have the same origin, and need to
be disjoint. This algorithm has been extended to every data types
(althought it is not increasing). Beware the result depends upon the
image data type if it is not bin
.
image2d<bin> im = load("object.pbm"); window2d mywin; mywin .add(-3,-2).add(-3,-1).add(-3,0).add(-3,1).add(-3,2) .add(-2,-1).add(-2,0).add(-2,1) .add(-1,0); window2d mywin2 = - mywin; save(morpho::hit_or_miss_closing(im, mywin, mywin2), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/hit_or_miss.hh"
Concrete(I) morpho::hit_or_miss_closing_bg (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::fast::hit_or_miss_closing_bg (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2);
input | IN | input image | |
se1 | IN | structural element | |
se2 | IN | structural element |
By definition se1 and se2 must have the same origin, and need to
be disjoint. This algorithm has been extended to every data types
(althought it is not increasing). Beware the result depends upon the
image data type if it is not bin
.
image2d<bin> im = load("object.pbm"); window2d mywin; mywin .add(-3,-2).add(-3,-1).add(-3,0).add(-3,1).add(-3,2) .add(-2,-1).add(-2,0).add(-2,1) .add(-1,0); window2d mywin2 = - mywin; save(morpho::hit_or_miss_closing_bg(im, mywin, mywin2), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/hit_or_miss.hh"
Concrete(I) morpho::hit_or_miss_opening (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::fast::hit_or_miss_opening (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2);
input | IN | input image | |
se1 | IN | structural element | |
se2 | IN | structural element |
By definition se1 and se2 must have the same origin, and need to
be disjoint. This algorithm has been extended to every data types
(althought it is not increasing). Beware the result depends upon the
image data type if it is not bin
.
image2d<bin> im = load("object.pbm"); window2d mywin; mywin .add(-3,-2).add(-3,-1).add(-3,0).add(-3,1).add(-3,2) .add(-2,-1).add(-2,0).add(-2,1) .add(-1,0); window2d mywin2 = - mywin; save(morpho::hit_or_miss_opening(im, mywin, mywin2), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/hit_or_miss.hh"
Concrete(I) morpho::hit_or_miss_opening_bg (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2); Concrete(I) morpho::fast::hit_or_miss_opening_bg (const image<I>& input, const struct_elt<E>& se1, const struct_elt<E>& se2);
input | IN | input image | |
se1 | IN | structural element | |
se2 | IN | structural element |
By definition se1 and se2 must have the same origin, and need to
be disjoint. This algorithm has been extended to every data types
(althought it is not increasing). Beware the result depends upon the
image data type if it is not bin
.
image2d<bin> im = load("object.pbm"); window2d mywin; mywin .add(-3,-2).add(-3,-1).add(-3,0).add(-3,1).add(-3,2) .add(-2,-1).add(-2,0).add(-2,1) .add(-1,0); window2d mywin2 = - mywin; save(morpho::hit_or_miss_opening_bg(im, mywin, mywin2), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::hybrid_geodesic_reconstruction_dilation (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::hybrid_geodesic_reconstruction_dilation(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::hybrid_geodesic_reconstruction_erosion (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::sequential_geodesic_reconstruction_erosion(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::hybrid_minima_imposition (const image<I1>& input, const image<I2>& minima_map, const struct_elt<E>& se);
input | IN | input image | |
minima_map | IN | bin image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<bin> minima = load("minima.pbm"); save(morpho::hybrid_minima_imposition(light, minima, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::hybrid_regional_minima (const image<I1>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(morpho::hybrid_minima_imposition(light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/gradient.hh"
mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::internal_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::internal_gradient (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::internal_gradient (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::internal_gradient (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::internal_gradient(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/laplacian.hh"
typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::laplacian (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::laplacian (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, Value(I)::slarger_t>::ret
morpho::laplacian (const image<I>& input, const struct_elt<E>& se); typename mute<I, Value(I)::slarger_t>::ret
morpho::fast::laplacian (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::laplacian(convert::bound<int_u8>(), im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/dilation.hh"
Concrete(I) morpho::n_dilation (const image<I>& input, const struct_elt<E>& se, unsigned n);
input | IN | input image | |
se | IN | structural element | |
n | IN | number of iterations |
morpho::dilation
n times.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/erosion.hh"
Concrete(I) morpho::n_erosion (const image<I>& input, const struct_elt<E>& se, unsigned n);
input | IN | input image | |
se | IN | structural element | |
n | IN | number of iterations |
morpho::erosion
n times.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/opening.hh"
Concrete(I) morpho::opening (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::opening (const image<I>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
image2d<bin> im = load("object.pbm"); save(morpho::opening(im, win_c8p()), "out.pbm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/top_hat.hh"
typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::self_complementary_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::self_complementary_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::self_complementary_top_hat (const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::self_complementary_top_hat (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::self_complementary_top_hat(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::sequential_geodesic_reconstruction_dilation (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::sequential_geodesic_reconstruction_dilation(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::sequential_geodesic_reconstruction_erosion (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::sequential_geodesic_reconstruction_erosion(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::sequential_minima_imposition (const image<I1>& input, const image<I2>& minima_map, const struct_elt<E>& se);
input | IN | input image | |
minima_map | IN | bin image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<bin> minima = load("minima.pbm"); save(morpho::sequential_minima_imposition(light, minima, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::sequential_regional_minima (const image<I1>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(morpho::sequential_minima_imposition(light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/geodesic_dilation.hh"
Concrete(I1) morpho::simple_geodesic_dilation (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::simple_geodesic_dilation(dark, light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/geodesic_erosion.hh"
Concrete(I1) morpho::simple_geodesic_erosion (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::geodesic_erosion(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::sure_geodesic_reconstruction_dilation (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::sure_geodesic_reconstruction_dilation(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/reconstruction.hh"
Concrete(I1) morpho::sure_geodesic_reconstruction_erosion (const image<I1>& marker, const image<I2>& mask, const struct_elt<E>& se);
marker | IN | marker image | |
mask | IN | mask image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<int_u8> dark = load("dark.pgm"); save(morpho::sure_geodesic_reconstruction_erosion(light, dark, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::sure_minima_imposition (const image<I1>& input, const image<I2>& minima_map, const struct_elt<E>& se);
input | IN | input image | |
minima_map | IN | bin image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); image2d<bin> minima = load("minima.pbm"); save(morpho::sure_minima_imposition(light, minima, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/extrema.hh"
Concrete(_I) morpho::sure_regional_minima (const image<I1>& input, const struct_elt<E>& se);
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(morpho::sure_minima_imposition(light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/top_hat.hh"
typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::top_hat_contrast_op (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::top_hat_contrast_op (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::top_hat_contrast_op (const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::top_hat_contrast_op (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::top_hat_contrast_op(convert::bound<int_u8>(), im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/watershed.hh"
typename mute<I, DestValue>::ret
morpho::watershed_con<class DestValue> (const image<I>& im, const neighborhood<N>& ng);
DestValue | type of output labels | ||
im | IN | image of levels | |
ng | IN | neighborhood to consider |
watershed_con
creates an ouput image whose values have
type DestValue (which should be discrete). In this output
all basins are labeled using values from DestValue::min()
to
DestValue::max() - 4
(the remaining values are used internally
by the algorithm).
When there are more basins than DestValue
can hold, wrapping
occurs (i.e., the same label is used for several basin). This is
potentially harmful, because if two connected basins are labeled
with the same value they will appear as one basin.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/watershed.hh"
typename mute<I, DestValue>::ret
morpho::watershed_seg<class DestValue> (const image<I>& im, const neighborhood<N>& ng);
DestValue | type of output labels | ||
im | IN | image of levels | |
ng | IN | neighborhood to consider |
watershed_seg
creates an ouput image whose values have
type DestValue (which should be discrete). In this output
image, DestValue::max()
indicates a watershed, and all
basins are labeled using values from DestValue::min()
to
DestValue::max() - 4
(the remaining values are used internally
by the algorithm).
When there are more basins than DestValue
can hold,
wrapping occurs (i.e., the same label is used for several
basin).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/watershed.hh"
Concrete(I2)& morpho::watershed_seg_or (const image<I1>& levels, image<I2>& markers, const neighborhood<N>& ng);
levels | IN | image of levels | |
markers | IN | OUT | image of markers |
ng | IN | neighborhood to consider |
markers is an image of the same size as levels
and containing discrete values indicating label associated to
each basin. On input, fill markers with
Value(I2)::min()
(this is the unknown label)
and mark the starting points or regions
(usually these are minima in levels) using a value
between Value(I2)::min()+1
and Value(I2)::max()-1
.
watershed_seg_or
will flood levels from these
non-unknown starting points, labeling basins using
the value you assigned to them, and markining watershed lines
with Value(I2)::max()
. markers should not contains
any Value(I2)::min()
value on output.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "morpho/top_hat.hh"
typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::white_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); typename mute<I, typename convoutput<C, Value(I)>::ret>::ret
morpho::fast::white_top_hat (const conversion<C>& c, const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::white_top_hat (const image<I>& input, const struct_elt<E>& se); Concrete(I) morpho::fast::white_top_hat (const image<I>& input, const struct_elt<E>& se);
c | IN | conversion object | |
input | IN | input image | |
se | IN | structural element |
image2d<int_u8> im = load("lena256.pgm"); save(morpho::white_top_hat(im, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
level::connected_component Connected Component. level::fast_maxima_killer Maxima killer. level::fast_minima_killer Minima killer. level::frontp_connected_component Connected Component. level::sure_maxima_killer Maxima killer. level::sure_minima_killer Minima killer.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/connected.hh"
typename mute<_I, DestType>::ret
level::connected_component (const image<I1>& marker, const struct_elt<E>& se);
marker | IN | marker image | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(level::connected_component<int_u8>(light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/extrema_killer.hh"
Concrete(_I1) level::fast_maxima_killer (const image<I1>& marker, const unsigned int area area, const neighborhood<_N>& Ng);
marker | IN | marker image | |
area | IN | area | |
Ng | IN | neighboorhood |
image2d<int_u8> light = load("light.pgm"); save(level::fast_maxima_killer(light, 20, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/extrema_killer.hh"
Concrete(_I1) level::fast_minima_killer (const image<I1>& marker, const unsigned int area area, const neighborhood<_N>& Ng);
marker | IN | marker image | |
area | IN | area | |
Ng | IN | neighboorhood |
image2d<int_u8> light = load("light.pgm"); save(level::fast_minima_killer(light, 20, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/cc.hh"
typename mute<I, DestType>::ret
level::frontp_connected_component (const image<I1>& marker, const neighborhood<E>& se);
marker | IN | marker image | |
se | IN | neighbourhood |
image2d<int_u8> light = load("light.pgm"); save(level::frontp_connected_component<int_u16>(light, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/extrema_killer.hh"
Concrete(I1) level::sure_maxima_killer (const image<I1>& marker, const unsigned int area area, const struct_elt<E>& se);
marker | IN | marker image | |
area | IN | area | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(level::sure_maxima_killer(light, 20, win_c8p()), "out.pgm"); |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
#include "level/extrema_killer.hh"
Concrete(I1) level::sure_minima_killer (const image<I1>& marker, const unsigned int area area, const struct_elt<E>& se);
marker | IN | marker image | |
area | IN | area | |
se | IN | structural element |
image2d<int_u8> light = load("light.pgm"); save(level::sure_minima_killer(light, 20, win_c8p()), "out.pgm"); |
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |