* apps/morphers/recorder.hh
(trait::image_< decorated_image<I,D> >): Replace with..
(trait::image_< decorated_image<I, recorder<I> > >): ...this.
Add a value_storage property.
(ch_value_< decorated_image< image_<I>, data_< recorder<I> > >, V >):
New trait, to handle changes of value types in images decorated
with a recorder.
* apps/morphers/mask+channel.cc,
* apps/morphers/mask+recorder.cc,
* apps/morphers/recorder.cc:
Simplify these programs thanks to the preceding changes.
---
milena/ChangeLog | 16 +++++++
milena/apps/morphers/mask+channel.cc | 7 +--
milena/apps/morphers/mask+recorder.cc | 6 +--
milena/apps/morphers/recorder.cc | 5 +--
milena/apps/morphers/recorder.hh | 77 ++++++++++++++++++++++++++++++---
5 files changed, 91 insertions(+), 20 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 84c70af..4b904dc 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,21 @@
2011-11-24 Roland Levillain <roland(a)lrde.epita.fr>
+ Work around decorated_image's lack of properties, for the recorder.
+
+ * apps/morphers/recorder.hh
+ (trait::image_< decorated_image<I,D> >): Replace with..
+ (trait::image_< decorated_image<I, recorder<I> > >): ...this.
+ Add a value_storage property.
+ (ch_value_< decorated_image< image_<I>, data_< recorder<I> > >, V >):
+ New trait, to handle changes of value types in images decorated
+ with a recorder.
+ * apps/morphers/mask+channel.cc,
+ * apps/morphers/mask+recorder.cc,
+ * apps/morphers/recorder.cc:
+ Simplify these programs thanks to the preceding changes.
+
+2011-11-24 Roland Levillain <roland(a)lrde.epita.fr>
+
Fix the initialization of mln::decorated_image.
* mln/tag/init.hh (tag::data_t): New tag type.
diff --git a/milena/apps/morphers/mask+channel.cc b/milena/apps/morphers/mask+channel.cc
index 2e170a2..130a168 100644
--- a/milena/apps/morphers/mask+channel.cc
+++ b/milena/apps/morphers/mask+channel.cc
@@ -61,10 +61,7 @@ int main()
image2d<rgb8> lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
fun::green green;
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value((thru(green, lena).rw() |
- make::box2d(5,5, 10,10)).rw(),
- 255);
+ data::fill((thru(green, lena).rw() | make::box2d(5,5, 10,10)).rw(),
+ 255);
io::ppm::save(lena, "lena-mask-channel.ppm");
}
diff --git a/milena/apps/morphers/mask+recorder.cc b/milena/apps/morphers/mask+recorder.cc
index 2693dbc..067ff6e 100644
--- a/milena/apps/morphers/mask+recorder.cc
+++ b/milena/apps/morphers/mask+recorder.cc
@@ -59,9 +59,7 @@ int main()
typedef image2d<rgb8> I;
I lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
decorated_image< I, recorder<I> > lena_rec = record(lena);
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value((lena_rec | make::box2d(5,5, 10,10)).rw(),
- literal::green);
+ data::fill((lena_rec | make::box2d(5,5, 10,10)).rw(),
+ literal::green);
ppm::save(lena_rec, "lena-roi-fill");
}
diff --git a/milena/apps/morphers/recorder.cc b/milena/apps/morphers/recorder.cc
index 4a3f1ab..86af667 100644
--- a/milena/apps/morphers/recorder.cc
+++ b/milena/apps/morphers/recorder.cc
@@ -56,9 +56,6 @@ int main()
typedef image2d<rgb8> I;
I lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
decorated_image< I, recorder<I> > lena_rec = record(lena);
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value(lena_rec,
- literal::green);
+ data::fill(lena_rec, literal::green);
ppm::save(lena_rec, "lena-fill");
}
diff --git a/milena/apps/morphers/recorder.hh b/milena/apps/morphers/recorder.hh
index 98b5f70..f8fc4f4 100644
--- a/milena/apps/morphers/recorder.hh
+++ b/milena/apps/morphers/recorder.hh
@@ -36,6 +36,8 @@
#include <string>
+#include <mln/trait/ch_value.hh>
+
#include <mln/core/image/imorph/decorated_image.hh>
#include <mln/value/rgb8.hh>
@@ -47,22 +49,29 @@
#include "apps/data.hh"
-// FIXME: mln::decorated_image lacks a proper definition of
-// properties! (see mln/core/image/imorph/decorated_image.hh). We use
-// the following (minimal) set of properties as a workaround.
+// Forward declaration.
+template <typename I> struct recorder;
+
+/* FIXME: mln::decorated_image lacks a proper definition of
+ properties! (see mln/core/image/imorph/decorated_image.hh). We use
+ the following (minimal) set of properties as a workaround for the
+ recorder decoration. */
namespace mln
{
-
namespace trait
{
- template <typename I, typename D>
- struct image_< decorated_image<I,D> >
+ template <typename I>
+ struct image_< decorated_image< I, recorder<I> > >
: default_image_morpher< I,
mln_value(I),
- decorated_image<I,D> >
+ decorated_image< I, recorder<I> > >
{
typedef trait::image::category::identity_morpher category;
+
+ // Prevent fast processing of images requiring a specific
+ // interface that we are unable to retrieve now.
+ typedef trait::image::value_storage::disrupted value_storage;
};
} // end of namespace mln::trait
@@ -87,6 +96,60 @@ struct recorder
std::vector<I> sequence;
};
+/* Skeleton of an image decorated with a recorder.
+
+ Initialy, I (Roland) wanted to add this to mln/trait/ch_value.hh:
+
+ template < template <class, class> class M, typename I, typename D,
+ typename V >
+ struct ch_value_< M< tag::image_<I>, tag::data_<D> >, V >
+ {
+ typedef M< mln_ch_value(I, V), D > ret;
+ };
+
+ However, this would not work in the case of the recorder since the
+ type D of the data attached to the image (of type I) has to be
+ changed as well. Indeed the initial decoration contains a sequence
+ of images of type I, which should be changed into a sequence of
+ images of type mln_ch_value(I, V).
+
+ There are several option to improve this. One is to create a
+ ch_value trait for data/decorations such as `recorder<I>'. Another
+ one is to refine the skeleton of decorated_image<I, D> to have it
+ convey the type the data stored in the decoration, e.g, changing
+
+ typedef decorated_image< tag::image_<I>, tag::data_<D> > skeleton;
+
+ into something like
+
+ typedef decorated_image< tag::image_<I>, tag::data_<D, V> > skeleton;
+
+ but this seems overly complicated.
+
+ The workaround chosen here is very local, and address the very
+ specific case of decorated_image< I, recorder<I> >. */
+
+namespace mln
+{
+ namespace trait
+ {
+ namespace impl
+ {
+ template < typename I, typename V >
+ struct ch_value_< decorated_image< tag::image_<I>,
+ tag::data_< recorder<I> > >,
+ V >
+ {
+ typedef decorated_image< mln_ch_value(I, V),
+ recorder< mln_ch_value(I, V) > > ret;
+ };
+ } // end namespace mln::trait::impl
+
+ } // end namespace mln::trait
+
+} // end namespace mln
+
+// Helper.
template <typename I>
mln::decorated_image< I, recorder<I> >
record(mln::Image<I>& ima)
--
1.7.2.5
* apps/morphers/recorder.hh
(trait::image_< decorated_image<I,D> >): Replace with..
(trait::image_< decorated_image<I, recorder<I> > >): ...this.
Add a value_storage property.
(ch_value_< decorated_image< image_<I>, data_< recorder<I> > >, V >):
New trait, to handle changes of value types in images decorated
with a recorder.
* apps/morphers/mask+channel.cc,
* apps/morphers/mask+recorder.cc,
* apps/morphers/recorder.cc:
Simplify these programs thanks to the preceding changes.
---
milena/ChangeLog | 16 +++++++
milena/apps/morphers/mask+channel.cc | 7 +--
milena/apps/morphers/mask+recorder.cc | 6 +--
milena/apps/morphers/recorder.cc | 5 +--
milena/apps/morphers/recorder.hh | 77 ++++++++++++++++++++++++++++++---
5 files changed, 91 insertions(+), 20 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 84c70af..4b904dc 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,21 @@
2011-11-24 Roland Levillain <roland(a)lrde.epita.fr>
+ Work around decorated_image's lack of properties, for the recorder.
+
+ * apps/morphers/recorder.hh
+ (trait::image_< decorated_image<I,D> >): Replace with..
+ (trait::image_< decorated_image<I, recorder<I> > >): ...this.
+ Add a value_storage property.
+ (ch_value_< decorated_image< image_<I>, data_< recorder<I> > >, V >):
+ New trait, to handle changes of value types in images decorated
+ with a recorder.
+ * apps/morphers/mask+channel.cc,
+ * apps/morphers/mask+recorder.cc,
+ * apps/morphers/recorder.cc:
+ Simplify these programs thanks to the preceding changes.
+
+2011-11-24 Roland Levillain <roland(a)lrde.epita.fr>
+
Fix the initialization of mln::decorated_image.
* mln/tag/init.hh (tag::data_t): New tag type.
diff --git a/milena/apps/morphers/mask+channel.cc b/milena/apps/morphers/mask+channel.cc
index 2e170a2..130a168 100644
--- a/milena/apps/morphers/mask+channel.cc
+++ b/milena/apps/morphers/mask+channel.cc
@@ -61,10 +61,7 @@ int main()
image2d<rgb8> lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
fun::green green;
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value((thru(green, lena).rw() |
- make::box2d(5,5, 10,10)).rw(),
- 255);
+ data::fill((thru(green, lena).rw() | make::box2d(5,5, 10,10)).rw(),
+ 255);
io::ppm::save(lena, "lena-mask-channel.ppm");
}
diff --git a/milena/apps/morphers/mask+recorder.cc b/milena/apps/morphers/mask+recorder.cc
index 2693dbc..067ff6e 100644
--- a/milena/apps/morphers/mask+recorder.cc
+++ b/milena/apps/morphers/mask+recorder.cc
@@ -59,9 +59,7 @@ int main()
typedef image2d<rgb8> I;
I lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
decorated_image< I, recorder<I> > lena_rec = record(lena);
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value((lena_rec | make::box2d(5,5, 10,10)).rw(),
- literal::green);
+ data::fill((lena_rec | make::box2d(5,5, 10,10)).rw(),
+ literal::green);
ppm::save(lena_rec, "lena-roi-fill");
}
diff --git a/milena/apps/morphers/recorder.cc b/milena/apps/morphers/recorder.cc
index 4a3f1ab..86af667 100644
--- a/milena/apps/morphers/recorder.cc
+++ b/milena/apps/morphers/recorder.cc
@@ -56,9 +56,6 @@ int main()
typedef image2d<rgb8> I;
I lena = io::ppm::load<rgb8>(MLN_IMG_DIR "/tiny.ppm");
decorated_image< I, recorder<I> > lena_rec = record(lena);
- /* FIXME: Cheat: use generic fill as mln::decorated_image does not
- define properly its properties. */
- data::impl::generic::fill_with_value(lena_rec,
- literal::green);
+ data::fill(lena_rec, literal::green);
ppm::save(lena_rec, "lena-fill");
}
diff --git a/milena/apps/morphers/recorder.hh b/milena/apps/morphers/recorder.hh
index 98b5f70..f8fc4f4 100644
--- a/milena/apps/morphers/recorder.hh
+++ b/milena/apps/morphers/recorder.hh
@@ -36,6 +36,8 @@
#include <string>
+#include <mln/trait/ch_value.hh>
+
#include <mln/core/image/imorph/decorated_image.hh>
#include <mln/value/rgb8.hh>
@@ -47,22 +49,29 @@
#include "apps/data.hh"
-// FIXME: mln::decorated_image lacks a proper definition of
-// properties! (see mln/core/image/imorph/decorated_image.hh). We use
-// the following (minimal) set of properties as a workaround.
+// Forward declaration.
+template <typename I> struct recorder;
+
+/* FIXME: mln::decorated_image lacks a proper definition of
+ properties! (see mln/core/image/imorph/decorated_image.hh). We use
+ the following (minimal) set of properties as a workaround for the
+ recorder decoration. */
namespace mln
{
-
namespace trait
{
- template <typename I, typename D>
- struct image_< decorated_image<I,D> >
+ template <typename I>
+ struct image_< decorated_image< I, recorder<I> > >
: default_image_morpher< I,
mln_value(I),
- decorated_image<I,D> >
+ decorated_image< I, recorder<I> > >
{
typedef trait::image::category::identity_morpher category;
+
+ // Prevent fast processing of images requiring a specific
+ // interface that we are unable to retrieve now.
+ typedef trait::image::value_storage::disrupted value_storage;
};
} // end of namespace mln::trait
@@ -87,6 +96,60 @@ struct recorder
std::vector<I> sequence;
};
+/* Skeleton of an image decorated with a recorder.
+
+ Initialy, I (Roland) wanted to add this to mln/trait/ch_value.hh:
+
+ template < template <class, class> class M, typename I, typename D,
+ typename V >
+ struct ch_value_< M< tag::image_<I>, tag::data_<D> >, V >
+ {
+ typedef M< mln_ch_value(I, V), D > ret;
+ };
+
+ However, this would not work in the case of the recorder since the
+ type D of the data attached to the image (of type I) has to be
+ changed as well. Indeed the initial decoration contains a sequence
+ of images of type I, which should be changed into a sequence of
+ images of type mln_ch_value(I, V).
+
+ There are several option to improve this. One is to create a
+ ch_value trait for data/decorations such as `recorder<I>'. Another
+ one is to refine the skeleton of decorated_image<I, D> to have it
+ convey the type the data stored in the decoration, e.g, changing
+
+ typedef decorated_image< tag::image_<I>, tag::data_<D> > skeleton;
+
+ into something like
+
+ typedef decorated_image< tag::image_<I>, tag::data_<D, V> > skeleton;
+
+ but this seems overly complicated.
+
+ The workaround chosen here is very local, and address the very
+ specific case of decorated_image< I, recorder<I> >. */
+
+namespace mln
+{
+ namespace trait
+ {
+ namespace impl
+ {
+ template < typename I, typename V >
+ struct ch_value_< decorated_image< tag::image_<I>,
+ tag::data_< recorder<I> > >,
+ V >
+ {
+ typedef decorated_image< mln_ch_value(I, V),
+ recorder< mln_ch_value(I, V) > > ret;
+ };
+ } // end namespace mln::trait::impl
+
+ } // end namespace mln::trait
+
+} // end namespace mln
+
+// Helper.
template <typename I>
mln::decorated_image< I, recorder<I> >
record(mln::Image<I>& ima)
--
1.7.2.5
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch next has been updated
via 861239963254a72f51b25bfd8323a12ff4a58b82 (commit)
via 31125795c939e4f5a1175022dc534025ad8ed179 (commit)
via 7dbcef7b638f3e0a133551a7b5a0c81b8326e979 (commit)
from e2e8ec06e477c50bb1a3448650b43dc400ec4b46 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
8612399 distrib/macports/Portfile.in: Fix maintainers field.
3112579 lrde-scmstats.sh: Fix branch name ambiguities.
7dbcef7 mln/fun/v2v/rgb_to_hsl.hh: Fix constructor declaration.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 8 ++++++++
distrib/macports/Portfile.in | 2 +-
lrde-scmstats.sh | 5 ++++-
milena/ChangeLog | 4 ++++
milena/mln/fun/v2v/rgb_to_hsl.hh | 2 +-
5 files changed, 18 insertions(+), 3 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Olena, a generic and efficient image processing platform".
The branch apps-ismm-2009 has been updated
via d590e49dcb0541a2f964fbbc10032fa3ffcc260b (commit)
from 4649bd3bb8ff982893c774075f03d937fe3d995b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
d590e49 Honor a precondition in classification examples (ISMM 2009).
-----------------------------------------------------------------------
Summary of changes:
milena/ChangeLog | 11 +++++++++++
.../papers/levillain.09.ismm/classif-1complex.cc | 2 +-
.../apps/papers/levillain.09.ismm/classif-graph.cc | 2 +-
3 files changed, 13 insertions(+), 2 deletions(-)
hooks/post-receive
--
Olena, a generic and efficient image processing platform