Olena-patches
Threads by month
- ----- 2025 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
March 2004
- 6 participants
- 39 discussions
Index: olena/ChangeLog
from Giovanni Palma <giovanni(a)lrde.epita.fr>
* oln/convol/fast_gaussian.hh: Correct comments.
* oln/io/se_window.hh: Likewise.
* oln/transforms/dwt.hh: Likewise.
* oln/transforms/fft.hh: Likewise.
Index: olena/oln/convol/fast_gaussian.hh
--- olena/oln/convol/fast_gaussian.hh Mon, 15 Mar 2004 17:40:54 +0100 van-vl_n (oln/26_fast_gauss 1.6.1.6.1.6 640)
+++ olena/oln/convol/fast_gaussian.hh Wed, 17 Mar 2004 11:35:39 +0100 palma_g (oln/26_fast_gauss 1.6.1.6.1.6 640)
@@ -32,11 +32,12 @@
# include <oln/convert/basics.hh>
# include <ntg/float.hh>
# include <oln/core/behavior.hh>
-//
-// Gaussian filter implementation from
-// "Recursively implementing the gaussian and its derivatives"
-// Deriche 93 INRIA REPORT
-//
+/*!
+** \file olena/oln/convol/fast_gaussian.hh
+** Gaussian filter implementation from
+** "Recursively implementing the gaussian and its derivatives"
+** Deriche 93 INRIA REPORT.
+*/
namespace oln {
namespace convol {
@@ -122,7 +123,7 @@
/* Same functions, with a default conversion. */
- /*
+ /*!
** \brief Gaussian filter with a default conversion.
**
** Gaussian filter implementation from "Recursively implementing
Index: olena/oln/io/se_window.hh
--- olena/oln/io/se_window.hh Mon, 15 Mar 2004 19:40:09 +0100 odou_s (oln/i/46_se_window. 1.15 640)
+++ olena/oln/io/se_window.hh Tue, 16 Mar 2004 12:38:47 +0100 palma_g (oln/i/46_se_window. 1.15 640)
@@ -46,7 +46,7 @@
namespace internal {
- ///< \todo FIXME: this code should be factorized.
+ /// \todo FIXME: this code should be factorized.
/*!
** \brief Read a window (1 dimension) from a file.
Index: olena/oln/transforms/dwt.hh
--- olena/oln/transforms/dwt.hh Tue, 16 Mar 2004 12:11:53 +0100 palma_g (oln/i/35_dwt.hh 1.2.1.4.1.11 640)
+++ olena/oln/transforms/dwt.hh Tue, 16 Mar 2004 15:24:31 +0100 palma_g (oln/i/35_dwt.hh 1.2.1.4.1.11 640)
@@ -95,15 +95,15 @@
public:
// accessors
- /// \brief Accessor to ith element of g.
+ /// Accessor to ith element of g.
const value_t getG(unsigned i) const { return g[i]; }
- /// \brief Accessor to ith element of ig.
+ /// Accessor to ith element of ig.
const value_t getInvG(unsigned i) const { return ig[i]; }
- /// \brief Accessor to ith element of h.
+ /// Accessor to ith element of h.
const value_t getH(unsigned i) const { return h[i]; }
- /// \brief Accessor to ith element of ih.
+ /// Accessor to ith element of ih.
const value_t getInvH(unsigned i) const { return ih[i]; }
- /// \brief Give the size of the arrays.
+ /// Give the size of the arrays.
const unsigned size() const { return size_; }
protected:
@@ -139,14 +139,14 @@
mlc::is_false<N % 2>::ensure();
}
- mlc::array1d< mlc::array1d_info<N>, value_t> h; /// \brief array of value_t.
- mlc::internal::array1d_start_<value_t> wc_start; /// \brief First coefficient.
+ mlc::array1d< mlc::array1d_info<N>, value_t> h; ///< array of value_t.
+ mlc::internal::array1d_start_<value_t> wc_start; ///< First coefficient.
private:
- value_t g[N]; /// \brief array of value_t.
- value_t ih[N]; /// \brief array of value_t.
- value_t ig[N]; /// \brief array of value_t.
+ value_t g[N]; ///< Array of value_t.
+ value_t ih[N]; ///< Array of value_t.
+ value_t ig[N]; /// Array of value_t.
enum {
size_ = N
};
@@ -474,10 +474,10 @@
{
public:
- typedef I original_im_t; ///< \brief Exact of the image.
- typedef oln_value_type(I) original_im_value_t; ///< \brief Original data type of the image.
- typedef typename mute<I, ntg::float_d>::ret trans_im_t; ///< \brief Type of the transformed image.
- typedef typename K::self_t coeffs_t; ///< \brief Data type of coefficients.
+ typedef I original_im_t; ///< Exact of the image.
+ typedef oln_value_type(I) original_im_value_t; ///< Original data type of the image.
+ typedef typename mute<I, ntg::float_d>::ret trans_im_t; ///< Type of the transformed image.
+ typedef typename K::self_t coeffs_t; ///< Data type of coefficients.
/*!
** \brief Constructor from an image.
Index: olena/oln/transforms/fft.hh
--- olena/oln/transforms/fft.hh Tue, 16 Mar 2004 12:11:53 +0100 palma_g (oln/i/36_fft.hh 1.4.1.9 640)
+++ olena/oln/transforms/fft.hh Tue, 16 Mar 2004 15:25:00 +0100 palma_g (oln/i/36_fft.hh 1.4.1.9 640)
@@ -46,7 +46,7 @@
namespace internal {
- /// \brief dispatch traits for fftw
+ /// Dispatch traits for fftw
enum fft_dispatch { fft_cplx, fft_real };
/*!
--
Giovanni Palma
EPITA - promo 2005 - membre d'EpX - LRDE
Mob. : +33 (0)6 60 97 31 74
2
1
Index: olena/ChangeLog
from Simon Odou <simon(a)lrde.epita.fr>
* olena/oln/io/base.hh: Add comments.
* olena/oln/io/readable.hh: Likewise.
* olena/oln/io/se_neighborhood.hh: Likewise.
* olena/oln/io/se_window.hh: Likewise.
* olena/oln/io/image_base.hh: Likewise.
* olena/oln/io/image_write.hh: Likewise.
* olena/oln/io/stream_wrapper.hh: Likewise.
* olena/oln/io/utils.hh: Likewise.
* olena/oln/io/image_read.hh: Likewise.
* olena/oln/core/abstract/image.hh: Likewise.
* olena/oln/core/bkd_iter1d.hh: Correct comments.
* olena/oln/core/bkd_iter2d.hh: Likewise.
* olena/oln/core/bkd_iter3d.hh: Likewise.
* olena/oln/core/fwd_iter1d.hh: Likewise.
* olena/oln/core/fwd_iter2d.hh: Likewise.
* olena/oln/core/fwd_iter3d.hh: Likewise.
* olena/oln/core/abstract/iter1d.hh: Likewise.
* olena/oln/core/abstract/iter2d.hh: Likewise.
* olena/oln/core/abstract/iter3d.hh: Likewise.
* olena/oln/core/abstract/iter.hh: Likewise.
* olena/oln/core/neighborhood1d.hh: Likewise.
* olena/oln/core/neighborhood2d.hh: Likewise.
* olena/oln/core/neighborhood3d.hh: Likewise.
* olena/oln/core/abstract/neighborhood.hh: Likewise.
* olena/oln/core/abstract/struct_elt.hh: Likewise.
* olena/oln/core/window1d.hh: Likewise.
* olena/oln/core/window2d.hh: Likewise.
* olena/oln/core/window3d.hh: Likewise.
* olena/oln/core/abstract/window.hh: Likewise.
* olena/oln/core/w_window1d.hh: Likewise.
* olena/oln/core/w_window2d.hh: Likewise.
* olena/oln/core/w_window3d.hh: Likewise.
* olena/oln/core/abstract/w_window.hh: Likewise.
* olena/oln/core/abstract/window_base.hh: Likewise.
* olena/oln/core/abstract/windownd.hh: Likewise.
* olena/oln/core/abstract/w_windownd.hh: Likewise.
* olena/oln/core/abstract/neighborhoodnd.hh: Likewise.
Index: olena/oln/core/bkd_iter1d.hh
--- olena/oln/core/bkd_iter1d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/38_bkd_iter1d 1.17 640)
+++ olena/oln/core/bkd_iter1d.hh Mon, 15 Mar 2004 18:25:32 +0100 odou_s (oln/d/38_bkd_iter1d 1.17 640)
@@ -100,7 +100,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/bkd_iter2d.hh
--- olena/oln/core/bkd_iter2d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/37_bkd_iter2d 1.17 640)
+++ olena/oln/core/bkd_iter2d.hh Mon, 15 Mar 2004 18:25:31 +0100 odou_s (oln/d/37_bkd_iter2d 1.17 640)
@@ -99,7 +99,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/bkd_iter3d.hh
--- olena/oln/core/bkd_iter3d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/36_bkd_iter3d 1.17 640)
+++ olena/oln/core/bkd_iter3d.hh Mon, 15 Mar 2004 18:25:31 +0100 odou_s (oln/d/36_bkd_iter3d 1.17 640)
@@ -96,7 +96,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/fwd_iter1d.hh
--- olena/oln/core/fwd_iter1d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/21_fwd_iter1d 1.14 640)
+++ olena/oln/core/fwd_iter1d.hh Mon, 15 Mar 2004 18:25:30 +0100 odou_s (oln/d/21_fwd_iter1d 1.14 640)
@@ -98,7 +98,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/fwd_iter2d.hh
--- olena/oln/core/fwd_iter2d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/20_fwd_iter2d 1.14 640)
+++ olena/oln/core/fwd_iter2d.hh Mon, 15 Mar 2004 18:25:30 +0100 odou_s (oln/d/20_fwd_iter2d 1.14 640)
@@ -100,7 +100,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/fwd_iter3d.hh
--- olena/oln/core/fwd_iter3d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/d/19_fwd_iter3d 1.14 640)
+++ olena/oln/core/fwd_iter3d.hh Mon, 15 Mar 2004 18:25:29 +0100 odou_s (oln/d/19_fwd_iter3d 1.14 640)
@@ -97,7 +97,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/abstract/iter1d.hh
--- olena/oln/core/abstract/iter1d.hh Sun, 14 Mar 2004 18:15:46 +0100 van-vl_n (oln/d/10_iter1d.hh 1.18 640)
+++ olena/oln/core/abstract/iter1d.hh Mon, 15 Mar 2004 18:38:07 +0100 odou_s (oln/d/10_iter1d.hh 1.18 640)
@@ -89,7 +89,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -101,7 +101,7 @@
protected:
- const coord ncols_; ///< The number of column of the image you are iterating
+ const coord ncols_; ///< The number of columns of the image you are iterating
/*!
** \brief Get the current point viewed by the iterator.
Index: olena/oln/core/abstract/iter2d.hh
--- olena/oln/core/abstract/iter2d.hh Sun, 14 Mar 2004 18:15:46 +0100 van-vl_n (oln/d/9_iter2d.hh 1.18 640)
+++ olena/oln/core/abstract/iter2d.hh Mon, 15 Mar 2004 18:38:07 +0100 odou_s (oln/d/9_iter2d.hh 1.18 640)
@@ -102,7 +102,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -115,7 +115,7 @@
protected:
const coord nrows_; ///< The number of rows of the image you are iterating.
- const coord ncols_; ///< The number of column of the image you are iterating.
+ const coord ncols_; ///< The number of columns of the image you are iterating.
/*!
** \brief Get the current point viewed by the iterator.
Index: olena/oln/core/abstract/iter3d.hh
--- olena/oln/core/abstract/iter3d.hh Sun, 14 Mar 2004 18:15:46 +0100 van-vl_n (oln/d/8_iter3d.hh 1.18 640)
+++ olena/oln/core/abstract/iter3d.hh Mon, 15 Mar 2004 18:38:06 +0100 odou_s (oln/d/8_iter3d.hh 1.18 640)
@@ -115,7 +115,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -127,9 +127,9 @@
protected:
- const coord nslices_; ///< The number of slice of the image you are iterating.
+ const coord nslices_; ///< The number of slices of the image you are iterating.
const coord nrows_; ///< The number of rows of the image you are iterating.
- const coord ncols_; ///< The number of column of the image you are iterating.
+ const coord ncols_; ///< The number of columns of the image you are iterating.
/*!
** \brief Get the current point viewed by the iterator.
Index: olena/oln/core/abstract/iter.hh
--- olena/oln/core/abstract/iter.hh Mon, 15 Mar 2004 17:40:54 +0100 van-vl_n (oln/c/40_iter.hh 1.20 640)
+++ olena/oln/core/abstract/iter.hh Mon, 15 Mar 2004 18:25:38 +0100 odou_s (oln/c/40_iter.hh 1.20 640)
@@ -359,7 +359,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/neighborhood1d.hh
--- olena/oln/core/neighborhood1d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/37_neighborho 1.16 640)
+++ olena/oln/core/neighborhood1d.hh Mon, 15 Mar 2004 18:32:04 +0100 odou_s (oln/c/37_neighborho 1.16 640)
@@ -57,7 +57,7 @@
** \brief Neighborhood 1 dimension.
**
** It looks like structuring elements but here, when
- ** you add an element, you add his opposite.
+ ** you add an element, you add its opposite.
** Points have 1 dimensions.
**
*/
@@ -140,7 +140,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/neighborhood2d.hh
--- olena/oln/core/neighborhood2d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/36_neighborho 1.17 640)
+++ olena/oln/core/neighborhood2d.hh Mon, 15 Mar 2004 18:32:04 +0100 odou_s (oln/c/36_neighborho 1.17 640)
@@ -58,7 +58,7 @@
** \brief Neighborhood 2 dimensions.
**
** It looks like structuring elements but here, when
- ** you add an element, you add his opposite.
+ ** you add an element, you add its opposite.
** Points have 2 dimensions.
**
*/
@@ -160,7 +160,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/neighborhood3d.hh
--- olena/oln/core/neighborhood3d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/35_neighborho 1.16 640)
+++ olena/oln/core/neighborhood3d.hh Mon, 15 Mar 2004 18:32:02 +0100 odou_s (oln/c/35_neighborho 1.16 640)
@@ -57,7 +57,7 @@
** \brief Neighborhood 3 dimensions.
**
** It looks like structuring elements but here, when
- ** you add an element, you add his opposite.
+ ** you add an element, you add its opposite.
** Points have 3 dimensions.
**
*/
@@ -141,7 +141,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/abstract/neighborhood.hh
--- olena/oln/core/abstract/neighborhood.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/38_neighborho 1.20 640)
+++ olena/oln/core/abstract/neighborhood.hh Mon, 15 Mar 2004 18:37:35 +0100 odou_s (oln/c/38_neighborho 1.20 640)
@@ -56,17 +56,17 @@
** \brief Neighborhood.
**
** It looks like structuring elements but here, when
- ** you add an element, you add his opposite (cf mathematical
+ ** you add an element, you add its opposite (cf mathematical
** definition to know more about).
** This abstract class defines several virtual methods for his
- ** subclasses. His aim is to deal with a set of deplacement points.
+ ** subclasses. Its goal is to deal with a set of deplacement points.
**
*/
template<class Exact>
struct neighborhood : public mlc_hierarchy::any<Exact>
{
typedef Exact exact_type; ///< Set the exact type.
- typedef neighborhood<Exact> self_type; ///< Set his type.
+ typedef neighborhood<Exact> self_type; ///< Set its type.
/*!
** \brief The associate image's type of iterator.
@@ -94,7 +94,7 @@
///< Set the dim of the points of the neighborhood.
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -117,8 +117,8 @@
}
/*!
- ** \brief Get the number of point we get.
- ** \return The number of point.
+ ** \brief Get the number of points.
+ ** \return The number of points.
*/
unsigned
card() const
@@ -210,7 +210,7 @@
/*!
** \brief Set neighborhood to opposite.
**
- ** Each point of neighborhood is assigned to his opposite.
+ ** Each point of neighborhood is assigned to its opposite.
**
*/
void
Index: olena/oln/core/abstract/struct_elt.hh
--- olena/oln/core/abstract/struct_elt.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/25_structelt. 1.21 640)
+++ olena/oln/core/abstract/struct_elt.hh Mon, 15 Mar 2004 18:39:45 +0100 odou_s (oln/c/25_structelt. 1.21 640)
@@ -58,8 +58,8 @@
/*!
** Structuring elements (set of points).
**
- ** This abstract class defines several virtual methods for his
- ** subclasses. His aim is to deal with a set of deplacement points.
+ ** This abstract class defines several virtual methods for its
+ ** subclasses. Its goal is to deal with a set of 'move' points.
*/
template<class Exact>
struct struct_elt : public mlc_hierarchy::any< Exact >
@@ -73,7 +73,7 @@
///< Set the abstract type of hisself.
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -102,8 +102,8 @@
}
/*!
- ** \brief Get the number of point we get.
- ** \return The number of point.
+ ** \brief Get the number of points.
+ ** \return The number of points.
*/
unsigned
card() const
@@ -185,7 +185,7 @@
/*!
** \brief Set structuring elements to opposite.
**
- ** Each point of structuring elements is assigned to his opposite.
+ ** Each point of structuring elements is assigned to its opposite.
*/
exact_type
operator-() const
@@ -200,7 +200,7 @@
/*!
** \brief Set structuring elements to opposite.
**
- ** Each point of structuring elements is assigned to his opposite.
+ ** Each point of structuring elements is assigned to its opposite.
*/
void
sym()
Index: olena/oln/core/window1d.hh
--- olena/oln/core/window1d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/15_window1d.h 1.16 640)
+++ olena/oln/core/window1d.hh Mon, 15 Mar 2004 18:25:28 +0100 odou_s (oln/c/15_window1d.h 1.16 640)
@@ -140,7 +140,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/window2d.hh
--- olena/oln/core/window2d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/14_window2d.h 1.18 640)
+++ olena/oln/core/window2d.hh Mon, 15 Mar 2004 18:25:27 +0100 odou_s (oln/c/14_window2d.h 1.18 640)
@@ -161,7 +161,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/window3d.hh
--- olena/oln/core/window3d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/13_window3d.h 1.17 640)
+++ olena/oln/core/window3d.hh Mon, 15 Mar 2004 18:25:27 +0100 odou_s (oln/c/13_window3d.h 1.17 640)
@@ -140,7 +140,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/abstract/window.hh
--- olena/oln/core/abstract/window.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/16_window.hh 1.18 640)
+++ olena/oln/core/abstract/window.hh Mon, 15 Mar 2004 18:25:36 +0100 odou_s (oln/c/16_window.hh 1.18 640)
@@ -74,7 +74,7 @@
friend class struct_elt<exact_type>;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/w_window1d.hh
--- olena/oln/core/w_window1d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/19_w_window1d 1.17 640)
+++ olena/oln/core/w_window1d.hh Mon, 15 Mar 2004 18:25:27 +0100 odou_s (oln/c/19_w_window1d 1.17 640)
@@ -164,7 +164,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/w_window2d.hh
--- olena/oln/core/w_window2d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/18_w_window2d 1.6.1.12 640)
+++ olena/oln/core/w_window2d.hh Mon, 15 Mar 2004 18:25:26 +0100 odou_s (oln/c/18_w_window2d 1.6.1.12 640)
@@ -183,7 +183,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/w_window3d.hh
--- olena/oln/core/w_window3d.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/17_w_window3d 1.17 640)
+++ olena/oln/core/w_window3d.hh Mon, 15 Mar 2004 18:25:26 +0100 odou_s (oln/c/17_w_window3d 1.17 640)
@@ -170,7 +170,7 @@
}
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/core/abstract/w_window.hh
--- olena/oln/core/abstract/w_window.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/c/20_w_window.h 1.15 640)
+++ olena/oln/core/abstract/w_window.hh Mon, 15 Mar 2004 18:25:36 +0100 odou_s (oln/c/20_w_window.h 1.15 640)
@@ -76,7 +76,7 @@
friend class struct_elt<exact_type>;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
Index: olena/oln/io/base.hh
--- olena/oln/io/base.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/20_base.hh 1.8 640)
+++ olena/oln/io/base.hh Mon, 15 Mar 2004 16:27:40 +0100 odou_s (oln/b/20_base.hh 1.8 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -36,10 +36,21 @@
namespace oln {
+ /*! \namespace io
+ ** \brief io namespace.
+ */
namespace io {
+ /*! \namespace internal
+ ** \brief abstract internal.
+ */
namespace internal {
+ /*!
+ ** \brief Read anything from a file.
+ **
+ ** The "good" read function is called by template specialization.
+ */
template<typename T>
bool
read_any(T& output, const std::string& name)
@@ -47,6 +58,11 @@
return read(output, name);
}
+ /*!
+ ** \brief Write anything to a file.
+ **
+ ** The "good" write function is called by template specialization.
+ */
template<typename T>
bool
write_any(const T& input, const std::string& name)
@@ -58,6 +74,16 @@
// aliases
+ /*
+ ** \brief Load object from a file. This could be an image but also
+ ** a window or a neighborhood.
+ ** \arg name The name of the file.
+ ** \return The new object.
+ **
+ ** Here is the external interface.
+ ** If you would like some examples to know how to use that, go to
+ ** oln::abstract::iter
+ */
inline
internal::anything
load(const std::string& name)
@@ -65,6 +91,15 @@
return internal::anything(name);
}
+ /*
+ ** \brief Load object from a file. This could be an image but also
+ ** a window or a neighborhood.
+ ** \arg output The object to write to a file.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ **
+ ** Here is the external interface. Depending of T, work is dispatched.
+ */
template<class T>
bool
load(T& output, std::string name)
@@ -72,6 +107,17 @@
return internal::read_any(output, name);
}
+ /*
+ ** \brief Writing object to a file. This could be an image but also
+ ** a window or a neighborhood.
+ ** \arg input The object to read.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ **
+ ** Here is the external interface. Depending of T, work is dispatched.
+ ** If you would like some examples to know how to use that, go to
+ ** oln::abstract::iter
+ */
template< typename T >
bool
save(const T& input, const std::string& name)
Index: olena/oln/io/readable.hh
--- olena/oln/io/readable.hh Thu, 09 Oct 2003 16:21:55 +0200 burrus_n (oln/b/13_readable.h 1.12 640)
+++ olena/oln/io/readable.hh Mon, 15 Mar 2004 16:24:00 +0100 odou_s (oln/b/13_readable.h 1.12 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,30 +41,56 @@
template<typename T>
bool
- read_any(T& output, const std::string& name);
+ read_any(T& output, const std::string& name); //forward declaration
+ /*!
+ ** \brief Anything.
+ **
+ ** This class is called by oln::load and just keep the filename to load.
+ ** As soon as you will use the operator = on it, assign will be called
+ ** and it will read the file.
+ ** If you would like some examples to know how to use that, go to
+ ** oln::abstract::iter
+ */
class anything
{
public:
- // FIXME: these constructors are required by swig
+ /*!
+ ** \brief Constructor
+ ** \todo FIXME: these constructors are required by swig
+ */
anything() : str_() {}
+
+ /*!
+ ** \brief Constructor
+ */
anything(const anything& rhs) : str_(rhs.str_) {}
+ /*!
+ ** \brief Constructor
+ */
anything(const std::string& str) : str_(str) {}
+ /*!
+ ** \brief Constructor
+ */
anything(const char* c) : str_(c) {}
+ /*!
+ ** \brief This function will be called when applied to an operator =
+ ** and load the file (str_ is the filename).
+ */
template< typename T >
T&
assign(T& output) const
{
read_any(output, str_);
- // FIXME: call output.clear()?
+ ///< \todo FIXME: call output.clear()?
return output;
}
private:
- std::string str_;
+ std::string str_; ///< The filename to load.
};
} // end of namespace internal
Index: olena/oln/io/se_neighborhood.hh
--- olena/oln/io/se_neighborhood.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/i/47_se_neighbo 1.13 640)
+++ olena/oln/io/se_neighborhood.hh Mon, 15 Mar 2004 15:40:37 +0100 odou_s (oln/i/47_se_neighbo 1.13 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -39,6 +39,12 @@
namespace internal {
+ /*!
+ ** \brief Read a neighborhood from a file.
+ ** \arg output The new neighborhood.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
read(neighborhood2d& output, const std::string& name)
{
@@ -81,6 +87,12 @@
return true;
}
+ /*!
+ ** \brief Write a neighborhood to a file.
+ ** \arg input The neighborhood to write.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
write(const neighborhood2d& input, const std::string& name)
{
Index: olena/oln/io/se_window.hh
--- olena/oln/io/se_window.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/i/46_se_window. 1.14 640)
+++ olena/oln/io/se_window.hh Mon, 15 Mar 2004 15:45:24 +0100 odou_s (oln/i/46_se_window. 1.14 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,13 +46,14 @@
namespace internal {
- // FIXME: this code should be factorized.
+ ///< \todo FIXME: this code should be factorized.
- /*----------------.
- | read (window1d) |
- `----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Read a window (1 dimension) from a file.
+ ** \arg output The new window.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
read(window1d& output, const std::string& name)
{
@@ -70,11 +71,12 @@
return true;
}
- /*----------------.
- | read (window2d) |
- `----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Read a window (2 dimensions) from a file.
+ ** \arg output The new window.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
read(window2d& output, const std::string& name)
{
@@ -97,11 +99,12 @@
return true;
}
- /*----------------.
- | read (window3d) |
- `----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Read a window (3 dimensions) from a file.
+ ** \arg output The new window.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
read(window3d& output, const std::string& name)
{
@@ -121,11 +124,12 @@
return true;
}
- /*-----------------.
- | write (window1d) |
- `-----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Write a window (1 dimension) to a file.
+ ** \arg input The window to write.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
write(const window1d& input, const std::string& name)
{
@@ -139,11 +143,12 @@
return true;
}
- /*-----------------.
- | write (window2d) |
- `-----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Write a window (2 dimensions) to a file.
+ ** \arg input The window to write.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
write(const window2d& input, const std::string& name)
{
@@ -157,11 +162,12 @@
return true;
}
- /*-----------------.
- | write (window3d) |
- `-----------------*/
-
- // FIXME: put it in a .cc file ?
+ /*!
+ ** \brief Write a window (3 dimensions) to a file.
+ ** \arg input The window to write.
+ ** \arg name The name of the file.
+ ** \return True if successful.
+ */
inline bool
write(const window3d& input, const std::string& name)
{
Index: olena/oln/core/abstract/image.hh
--- olena/oln/core/abstract/image.hh Mon, 15 Mar 2004 17:40:54 +0100 van-vl_n (oln/t/25_image.hh 1.26 600)
+++ olena/oln/core/abstract/image.hh Mon, 15 Mar 2004 19:34:49 +0100 odou_s (oln/t/25_image.hh 1.26 600)
@@ -34,9 +34,14 @@
# include <oln/core/abstract/point.hh>
# include <oln/core/abstract/iter.hh>
-
+/*! \namespace oln
+** \brief oln namespace.
+*/
namespace oln {
+ /*! \namespace oln::abstract
+ ** \brief oln::abstract namespace.
+ */
namespace abstract {
// fwd_decl
Index: olena/oln/io/image_base.hh
--- olena/oln/io/image_base.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/41_image_base 1.4 600)
+++ olena/oln/io/image_base.hh Mon, 15 Mar 2004 17:55:14 +0100 odou_s (oln/t/41_image_base 1.4 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -39,21 +39,30 @@
namespace internal {
- /*---------------------.
- | image default reader |
- `---------------------*/
-
+ /*!
+ ** \brief Reader identifiers.
+ **
+ ** They are used recursively: each time a ReadId fails, then
+ ** try with ReadId - 1.
+ */
enum reader_id { ReadNone = 0,
ReadPnmPlain = 1,
ReadPnmRaw = 2,
ReadAny = 2 };
- // Default reader
-
+ /*!
+ ** \brief Read an image of type reader_id.
+ ** \param F The reader identifier.
+ **
+ ** In fact, do nothing because of the type of reader.
+ ** Used when an errors occurs on others types of reader.
+ ** \see reader_id
+ */
template<reader_id F, class I>
struct image_reader
{
+ ///< Do nothing because of the type of reader.
static const std::string&
name()
{
@@ -61,12 +70,14 @@
return name_;
}
+ ///< Do nothing because of the type of reader.
static bool
knows_ext(const std::string&)
{
return false;
}
+ ///< Do nothing because of the type of reader.
static bool
read(std::istream&, I&)
{
@@ -74,21 +85,32 @@
}
};
- /*---------------------.
- | image default writer |
- `---------------------*/
+ /*!
+ ** \brief Writer identifiers.
+ **
+ ** They are used recursively: each time a WriteId fails, then
+ ** try with WriteId - 1.
+ */
enum writer_id { WriteNone = 0,
WritePnmPlain = 1,
WritePnmRaw = 2,
WriteAny = 2 };
- // Default writer
+ /*!
+ ** \brief Write an image of type writer_id.
+ ** \param F The writer identifier.
+ **
+ ** In fact, do nothing because of the type of writer.
+ ** Used when an errors occurs on others types of writer.
+ ** \see writer_id
+ */
template<writer_id F, class I>
struct image_writer
{
+ ///< Do nothing because of the type of writer.
static const std::string&
name()
{
@@ -96,12 +118,14 @@
return name_;
}
+ ///< Do nothing because of the type of writer.
static bool
knows_ext(const std::string&)
{
return false;
}
+ ///< Do nothing because of the type of writer.
static bool
write(std::ostream&, const I&)
{
Index: olena/oln/io/image_write.hh
--- olena/oln/io/image_write.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/42_image_writ 1.9 600)
+++ olena/oln/io/image_write.hh Mon, 15 Mar 2004 18:10:40 +0100 odou_s (oln/t/42_image_writ 1.9 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -50,16 +50,20 @@
namespace internal {
- /*------------.
- | try_writers |
- `------------*/
-
- // Try writers recursively
-
+ /*!
+ ** \brief Image's writer.
+ ** \param W Type of writer.
+ */
template< writer_id W, typename T >
struct try_writers
{
- // Try to deduce the file format from the extension
+ /*!
+ ** \brief Write object on the stream.
+ ** Try do deduce the image format from the extension.
+ ** \arg input The object to read.
+ ** \arg out The stream.
+ ** \arg ext The extension's filename.
+ */
static bool
by_extension(const T& input, std::ostream& out, const std::string& ext)
{
@@ -70,7 +74,11 @@
::by_extension(input, out, ext);
}
- // Try to match the file format referring to the data only
+ /*!
+ ** \brief Try to match the file format referring to the data only.
+ ** \arg input The object to read.
+ ** \arg out The stream.
+ */
static bool
by_data(const T& input, std::ostream& out, const std::string& ext)
{
@@ -86,17 +94,30 @@
}
};
- // End of try_writers loop
+ /*!
+ ** \brief Reader for image of type None.
+ **
+ ** In fact, do nothing because of the type of writer.
+ ** Used when an errors occurs on others types of writer.
+ */
template< typename T >
struct try_writers<WriteNone, T>
{
+ /*!
+ ** \brief Write object on the stream.
+ ** Try do deduce the image format from the extension.
+ */
static bool
by_extension(const T&, std::ostream&, const std::string&)
{
return false;
}
+ /*!
+ ** \brief Write object on the stream.
+ ** Try to match the file format referring to the data only.
+ */
static bool
by_data(const T&, std::ostream&, const std::string&)
{
@@ -104,14 +125,19 @@
}
};
- /*----------------------.
- | write(image, filename) |
- `----------------------*/
-
- // Writers trier functor, helper for stream_wrappers
-
+ /*!
+ ** \brief Writers trier functor, helper for stream_wrappers.
+ */
struct writers_trier
{
+ /*!
+ ** \brief Writers trier functor, helper for stream_wrappers.
+ ** \arg output The new object.
+ ** \arg in The stream to read from.
+ ** \arg ext The extension.
+ **
+ ** First try to write by extension, then by data.
+ */
template <class T>
static bool
doit(const T& input, std::ostream& out, const std::string ext)
@@ -123,8 +149,13 @@
}
};
- // Write images
+ /*!
+ ** \brief Write an image (2 dimensions) to a file.
+ ** \arg input The image to write to file.
+ ** \arg name The filename.
+ ** \return True if successful.
+ */
template <class E, unsigned N>
inline bool
write(const abstract::image_with_dim<N, E>& input,
@@ -143,9 +174,17 @@
return false;
}
- // Mono-dimensional images is a special case of bi-dimensional
- // images.
-
+ /*!
+ ** \brief Write an image (1 dimension) to a file.
+ ** \arg input The image to write to file.
+ ** \arg name The filename.
+ ** \return True if successful.
+ **
+ ** In fact, real work is not done here : this function calls 'write' for
+ ** images of 2 dimensions:
+ ** Mono-dimensional images is a special case of bi-dimensional
+ ** images.
+ */
template <class E>
inline bool
write(const abstract::image_with_dim<1, E>& input,
Index: olena/oln/io/stream_wrapper.hh
--- olena/oln/io/stream_wrapper.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/43_stream_wra 1.3.1.1 600)
+++ olena/oln/io/stream_wrapper.hh Mon, 15 Mar 2004 18:12:30 +0100 odou_s (oln/t/43_stream_wra 1.3.1.1 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,8 +41,12 @@
namespace internal {
- // stream wrappers
-
+ /*!
+ ** \brief Stream identifiers.
+ **
+ ** They are used recursively: each time a StreamId fails, then
+ ** try with StreamId - 1.
+ */
enum stream_id { StreamNone = 0,
StreamFile = 1,
StreamGz = 2,
@@ -81,15 +85,16 @@
{}
};
- /*---------------------------.
- | stream_wrappers_find_files |
- `---------------------------*/
-
- // Find files compatible with the given root, extension free filename
-
+ /*!
+ ** \brief Find files compatible with the given root, extension free
+ ** filename
+ */
template <stream_id W>
struct stream_wrappers_find_files
{
+ /*!
+ ** \brief Just a functor.
+ */
static void
doit(std::list<std::string>& names, const std::string& name)
{
@@ -99,8 +104,9 @@
}
};
- // End of the loop
-
+ /*!
+ ** \brief Do nothing because of the type of stream.
+ */
template <>
struct stream_wrappers_find_files<StreamNone>
{
@@ -109,16 +115,20 @@
{}
};
- /*-----------------------.
- | try_stream_wrappers_in |
- `-----------------------*/
-
- // Try stream wrappers recursively
- // On each potential stream format, try to read using Reader
+ /*!
+ ** \brief Read a stream.
+ ** \param W The type of stream
+ ** \param Reader The real reader of this stream.
+ */
template<stream_id W, typename T, class Reader>
struct try_stream_wrappers_in
{
+
+ /*!
+ ** \brief Open file as a stream, take extension and call the "real" reader.
+ ** If the extension is not known, reiterate with a stream_id - 1.
+ */
static bool
by_extension(T& output, const std::string& name, const std::string& ext)
{
@@ -138,8 +148,15 @@
::by_extension(output, name, ext);
}
- // FIXME: it sounds strange to read wrapped file without
- // matching its extension.
+ /*!
+ ** \brief Open file as a stream, take extension and call the "real" reader.
+ ** If the extension is not known, reiterate with a stream_id - 1.
+ ** \arg output The new object.
+ ** \arg name The filename.
+ **
+ ** \todo FIXME: it sounds strange to read wrapped file without
+ ** matching its extension.
+ */
static bool
by_data(T& output, const std::string& name)
{
@@ -157,17 +174,23 @@
}
};
- // End of loop
-
+ /*!
+ ** \brief Read a stream of type None.
+ **
+ ** In fact, do nothing because of the type of stream.
+ ** Used when an errors occurs on others types of stream.
+ */
template< typename T, class Reader >
struct try_stream_wrappers_in<StreamNone, T, Reader>
{
+ ///< Read s stream of type None by extension.
static bool
by_extension(T&, const std::string&, const std::string&)
{
return false;
}
+ ///< Read a stream of type None by data.
static bool
by_data(T&, const std::string&)
{
@@ -175,16 +198,20 @@
}
};
- /*------------------------.
- | try_stream_wrappers_out |
- `------------------------*/
-
- // Try stream wrappers recursively
- // On each potential stream format, try to write using the given Writer
+ /*!
+ ** \brief Write a stream.
+ ** \param W The type of stream
+ ** \param Writer The "real" writer of this stream.
+ */
template<stream_id W, typename T, class Writer>
struct try_stream_wrappers_out
{
+
+ /*!
+ ** \brief Open file as a stream, take extension and call the "real" writer.
+ ** If the extension is not known, reiterate with a stream_id - 1.
+ */
static bool
by_extension(const T& input,
const std::string& name,
@@ -208,11 +235,16 @@
}
};
- // End of loop
-
+ /*!
+ ** \brief Write a stream of type None.
+ **
+ ** In fact, do nothing because of the type of stream.
+ ** Used when an errors occurs on others types of stream.
+ */
template< typename T, class Reader >
struct try_stream_wrappers_out<StreamNone, T, Reader>
{
+ ///< Do nothing because of the type of stream.
static bool
by_extension(const T&, const std::string&, const std::string&)
{
Index: olena/oln/io/utils.hh
--- olena/oln/io/utils.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/44_utils.hh 1.3 600)
+++ olena/oln/io/utils.hh Mon, 15 Mar 2004 16:00:47 +0100 odou_s (oln/t/44_utils.hh 1.3 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -38,8 +38,17 @@
namespace internal {
+ /*!
+ ** \brief Utils for io (get extension of a file).
+ */
struct utils
{
+
+ /*!
+ ** \brief Return the extension of a filename.
+ ** \arg name The filename.
+ ** \return The extension (lower case).
+ */
static std::string
extension(const std::string& name)
{
@@ -53,6 +62,7 @@
}
return ext;
}
+
};
} // end of namespace internal
Index: olena/oln/io/image_read.hh
--- olena/oln/io/image_read.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/45_image_read 1.9 600)
+++ olena/oln/io/image_read.hh Mon, 15 Mar 2004 18:10:52 +0100 odou_s (oln/t/45_image_read 1.9 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -50,16 +50,20 @@
namespace internal {
- /*------------.
- | try_readers |
- `------------*/
-
- // Try readers recursively
-
+ /*!
+ ** \brief Image's reader.
+ ** \param R Type of reader.
+ */
template< reader_id R, typename T >
struct try_readers
{
- // Try to deduce the file format from the extension
+ /*!
+ ** \brief Read an object from a stream.
+ ** Try do deduce the image format from the extension.
+ ** \arg output The new object to write.
+ ** \arg in The stream.
+ ** \arg ext The extension's filename.
+ */
static bool
by_extension(T& output, std::istream& in, const std::string& ext)
{
@@ -71,7 +75,12 @@
::by_extension(output, in, ext);
}
- // Try to match the file format referring to the data only
+ /*!
+ ** \brief Read an object from a stream.
+ ** Try to match the file format referring to the data only.
+ ** \arg output The new object to write.
+ ** \arg in The stream.
+ */
static bool
by_data(T& output, std::istream& in)
{
@@ -82,17 +91,29 @@
}
};
- // End of try_readers loop
-
+ /*!
+ ** \brief Reader for image of type None.
+ **
+ ** In fact, do nothing because of the type of reader.
+ ** Used when an errors occurs on others types of reader.
+ */
template< typename T >
struct try_readers<ReadNone, T>
{
+ /*!
+ ** \brief Read an object from a stream.
+ ** Try do deduce the image format from the extension.
+ */
static bool
by_extension(T&, std::istream&, const std::string&)
{
return false;
}
+ /*!
+ ** \brief Read an object from a stream.
+ ** Try to match the file format referring to the data only.
+ */
static bool
by_data(T&, std::istream&)
{
@@ -100,14 +121,19 @@
}
};
- /*----------------------.
- | read(image, filename) |
- `----------------------*/
-
- // Readers trier functor, helper for stream_wrappers
-
+ /*!
+ ** \brief Readers trier functor, helper for stream_wrappers.
+ */
struct readers_trier
{
+ /*!
+ ** \brief Readers trier functor, helper for stream_wrappers.
+ ** \arg output The new object.
+ ** \arg in The stream to read from.
+ ** \arg ext The extension.
+ **
+ ** First try to read by extension, then by data.
+ */
template <class T>
static bool
doit(T& output, std::istream& in, const std::string ext)
@@ -119,16 +145,23 @@
}
};
- // Read images
-
+ /*!
+ ** \brief Read an image (2 dimensions) from a file.
+ ** \arg output Where to write the new image.
+ ** \arg name The filename.
+ ** \return True if successful.
+ **
+ ** Try to read first by extension and then by data.
+ ** If you want to know more about, see
+ ** oln::io::internal::try_stream_wrappers_in
+ */
template <unsigned N, class E>
inline bool
read(abstract::image_with_dim<N,E>& output, const std::string& name)
{
mlc::is_true<N == 2 || N == 3>::ensure();
- // FIXME: E or abstract::image_with_dim<N,E> ?
- // E is convenient.
+ ///< \todo FIXME: E or abstract::image_with_dim<N,E> ? E is convenient.
typedef try_stream_wrappers_in<StreamAny, E, readers_trier>
stream_trier;
@@ -170,6 +203,17 @@
return false;
}
+ /*!
+ ** \brief Read an image (1 dimension) from a file.
+ ** \arg output Where to write the new image.
+ ** \arg name The filename.
+ ** \return True if successful.
+ **
+ ** In fact, real work is not done here : this function calls 'read' for
+ ** images of 2 dimensions:
+ ** Mono-dimensional images is a special case of bi-dimensional
+ ** images.
+ */
template <class E>
inline bool
read(abstract::image_with_dim<1, E>& output, const std::string& name)
Index: olena/oln/core/abstract/window_base.hh
--- olena/oln/core/abstract/window_base.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/u/3_window_bas 1.10 640)
+++ olena/oln/core/abstract/window_base.hh Mon, 15 Mar 2004 18:41:40 +0100 odou_s (oln/u/3_window_bas 1.10 640)
@@ -135,7 +135,7 @@
// friend class window_base_friend_traits<Sup>::ret;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -160,8 +160,8 @@
}
/*!
- ** \brief Get the number of point we get.
- ** \return The number of point.
+ ** \brief Get the number of points.
+ ** \return The number of points.
*/
unsigned
card_() const
@@ -226,7 +226,7 @@
/*!
** \brief Set a set of point to opposite.
**
- ** Each point of the set of point is assigned to his opposite.
+ ** Each point of the set of point is assigned to its opposite.
*/
void
sym_()
@@ -262,7 +262,7 @@
** \brief Used only by sub-classes
** \arg size The number of point.
**
- ** Set the number of point this object will get.
+ ** Set the number of points this object will get.
** Used only by sub-classes
*/
window_base(unsigned size) : super_type(), dp_(), delta_(0)
Index: olena/oln/core/abstract/windownd.hh
--- olena/oln/core/abstract/windownd.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/u/4_windownd.h 1.8 640)
+++ olena/oln/core/abstract/windownd.hh Mon, 15 Mar 2004 18:43:03 +0100 odou_s (oln/u/4_windownd.h 1.8 640)
@@ -73,7 +73,7 @@
friend class window<exact_type>;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -111,7 +111,7 @@
/*!
** \brief Construct a w_window of 'size' elements.
- ** \arg size The number of element to reserve for the window.
+ ** \arg size The number of elements to reserve for the window.
*/
windownd(unsigned size) : super_type(size)
{}
Index: olena/oln/core/abstract/w_windownd.hh
--- olena/oln/core/abstract/w_windownd.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/u/5_w_windownd 1.7 640)
+++ olena/oln/core/abstract/w_windownd.hh Mon, 15 Mar 2004 18:43:21 +0100 odou_s (oln/u/5_w_windownd 1.7 640)
@@ -75,7 +75,7 @@
friend class w_window<exact_type>;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -154,7 +154,7 @@
/*!
** \brief Construct a w_window of 'size' elements.
- ** \arg size The number of element to reserve for the window.
+ ** \arg size The number of elements to reserve for the window.
*/
w_windownd(unsigned size) : super_type(size)
{
Index: olena/oln/core/abstract/neighborhoodnd.hh
--- olena/oln/core/abstract/neighborhoodnd.hh Fri, 12 Mar 2004 17:51:04 +0100 odou_s (oln/u/6_neighborho 1.7 640)
+++ olena/oln/core/abstract/neighborhoodnd.hh Mon, 15 Mar 2004 18:35:11 +0100 odou_s (oln/u/6_neighborho 1.7 640)
@@ -50,10 +50,10 @@
namespace abstract {
/*!
- ** \brief Neighborhoodnd.
+ ** \brief Neighborhood N dimensions.
**
** It looks like structuring elements but here, when
- ** you add an element, you add his opposite.
+ ** you add an element, you add its opposite.
** Points have N dimensions.
**
*/
@@ -75,7 +75,7 @@
friend class neighborhood<exact_type>;
/*!
- ** \brief Return his type in a string.
+ ** \brief Return its type in a string.
** \return The type in a string.
**
** Very useful to debug.
@@ -107,14 +107,14 @@
}
/*!
- ** \brief Construct a neighborhoodnd.
+ ** \brief Construct a neighborhood N dimensions.
*/
neighborhoodnd() : super_type()
{}
/*!
** \brief Construct a neighborhood of 'size' elements.
- ** \arg size The number of element to reserve for the neighborhood.
+ ** \arg size The number of elements to reserve for the neighborhood.
*/
neighborhoodnd(unsigned size) : super_type(size)
{}
--
Simon Odou
simon(a)lrde.epita.fr
2
2
Index: olena/ChangeLog
from Niels Van Vliet <niels(a)lrde.epita.fr>
* integre/ntg/real/behavior.hh: Change the unsafe::get<T>::check().
* integre/ntg/utils/cast.hh: Change cast::force().
* olena/oln/convert/value_to_point.hh: Fix value_to_point<bin>.
* olena/oln/utils/histogram.hh: Fix hisogram<bin>.
* olena/oln/morpho/fast_morpho.hxx: Histogram to abstract histogram.
* olena/oln/morpho/hit_or_miss.inc: Enable code in the doc.
* olena/oln/morpho/top_hat.inc: Likewise.
* olena/oln/morpho/opening.inc: Likewise.
* olena/oln/morpho/dilation.hh: Likewise.
* olena/oln/morpho/erosion.hh: Likewise.
* olena/oln/morpho/dilation.hh: Likewise.
* olena/tests/morpho/tests/edoc: Add tests.
* olena/oln/morpho/attribute_closing_opening_map.hh: Rename images.
* olena/oln/morpho/extrema.hxx: Add doc.
* olena/oln/morpho/closing.inc: Remove fixme.
Index: olena/oln/morpho/closing.inc
--- olena/oln/morpho/closing.inc Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/44_closing.in 1.17 640)
+++ olena/oln/morpho/closing.inc Thu, 18 Mar 2004 17:23:19 +0100
van-vl_n (oln/44_closing.in 1.17 640)
@@ -56,9 +56,6 @@
** \arg input Input image to close.
** \arg se Structuring element to use.
**
-** \warning This code is the same for morpho and morpho::fast
-** namespaces.
-**
** \code
** #include <oln/basics2d.hh>
** #include <oln/morpho/closing.hh>
@@ -69,7 +66,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
-** save(oln::morpho::closing(im1, oln::win_c8p()), IMG_OUT
"oln_morpho_closing.pbm");
+** save(oln::morpho::closing(im1, oln::win_c8p()),
+** IMG_OUT "oln_morpho_closing.pbm");
** return 0;
** }
** \endcode
Index: olena/oln/morpho/dilation.hh
--- olena/oln/morpho/dilation.hh Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/b/5_dilation.h 1.18 640)
+++ olena/oln/morpho/dilation.hh Thu, 18 Mar 2004 17:23:08 +0100
van-vl_n (oln/b/5_dilation.h 1.18 640)
@@ -76,8 +76,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** save(oln::morpho::dilation(im1, oln::win_c8p()), IMG_OUT
"oln_morpho_dilation.pbm");
- ** return 0;
+ ** save(oln::morpho::dilation(im1, oln::win_c8p()),
+ ** IMG_OUT "oln_morpho_dilation.pbm");
** }
** \endcode
**
@@ -124,8 +124,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** save(oln::morpho::n_dilation(im1, oln::win_c8p(), 5), IMG_OUT
"oln_morpho_n_dilation.pbm");
- ** return 0;
+ ** save(oln::morpho::n_dilation(im1, oln::win_c8p(), 5),
+ ** IMG_OUT "oln_morpho_n_dilation.pbm");
** }
** \endcode
**
@@ -158,7 +158,8 @@
dilation(const abstract::non_vectorial_image<I>& input,
const abstract::struct_elt<E>& se)
{
- return fast_morpho<I, E, utils::histogram_max>(input, se);
+ return fast_morpho<I, E, utils::histogram_max<oln_value_type(I)> >
+ (input, se);
}
}
} // end of morpho
Index: olena/oln/morpho/erosion.hh
--- olena/oln/morpho/erosion.hh Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/b/4_erosion.hh 1.20 640)
+++ olena/oln/morpho/erosion.hh Thu, 18 Mar 2004 17:22:50 +0100 van-vl_n
(oln/b/4_erosion.hh 1.20 640)
@@ -68,8 +68,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** save(oln::morpho::erosion(im1, oln::win_c8p()), IMG_OUT
"oln_morpho_erosion.pbm");
- ** return 0;
+ ** save(oln::morpho::erosion(im1, oln::win_c8p()),
+ ** IMG_OUT "oln_morpho_erosion.pbm");
** }
** \endcode
**
@@ -117,8 +117,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** save(oln::morpho::n_erosion(im1, oln::win_c8p(), 5), IMG_OUT
"oln_morpho_n_erosion.pbm");
- ** return 0;
+ ** save(oln::morpho::n_erosion(im1, oln::win_c8p(), 5),
+ ** IMG_OUT "oln_morpho_n_erosion.pbm");
** }
** \endcode
**
@@ -170,8 +170,8 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** save(oln::morpho::erosion(im1, oln::win_c8p()), IMG_OUT
"oln_morpho_fast_erosion.pbm");
- ** return 0;
+ ** save(oln::morpho::fast::erosion(im1, oln::win_c8p()),
+ ** IMG_OUT "oln_morpho_fast_erosion.pbm");
** }
** \endcode
**
@@ -180,16 +180,16 @@
** =>
** \image html oln_morpho_fast_erosion.png
** \image latex oln_morpho_fast_erosion.png
- ** \todo FIXME: Correct this function and make the example use it.
*/
template<class I, class E>
oln_concrete_type(I)
erosion(const abstract::non_vectorial_image<I>& input,
const abstract::struct_elt<E>& se)
{
- return fast_morpho<I, E, utils::histogram_min>(input, se);
- }
+ return fast_morpho<I, E, utils::histogram_min<oln_value_type(I)> >
+ (input, se);
}
+ } // end of fast
} // end of morpho
Index: olena/oln/morpho/extrema.hxx
--- olena/oln/morpho/extrema.hxx Mon, 15 Mar 2004 17:40:54 +0100
van-vl_n (oln/j/4_extrema.hx 1.16 640)
+++ olena/oln/morpho/extrema.hxx Thu, 18 Mar 2004 17:22:12 +0100
van-vl_n (oln/j/4_extrema.hx 1.16 640)
@@ -106,9 +106,10 @@
** im_type light(oln::load(IMG_IN "lena.pgm"));
** bin_im_type minima(oln::load(IMG_IN "map.pbm"));
**
-** oln::save(oln::morpho::sequential::minima_imposition(light,
minima, oln::neighb_c4()),
+** oln::save(oln::morpho::sequential::minima_imposition(light,
+** minima,
+** oln::neighb_c4()),
** IMG_OUT "oln_morpho_sequential_minima_imposition.pgm");
-** return 0;
** }
** \endcode
** \image html lena_pgm.png
@@ -164,7 +165,6 @@
**
** oln::save(oln::morpho::sequential::regional_minima(im,
oln::neighb_c4()),
** IMG_OUT "oln_morpho_sequential_regional_minima.pgm");
-** return 0;
** }
** \endcode
** \image html lena_pgm.png
Index: olena/oln/morpho/extrema_killer.hh
--- olena/oln/morpho/extrema_killer.hh Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/e/19_extrema_ki 1.7.1.4.1.13 640)
+++ olena/oln/morpho/extrema_killer.hh Thu, 18 Mar 2004 16:53:10 +0100
van-vl_n (oln/e/19_extrema_ki 1.7.1.4.1.13 640)
@@ -321,6 +321,8 @@
** implementation is based on stak. Guichard and Morel, Image
** iterative smoothing and PDE's. Book in preparation. p 265.
**
+ ** \see oln::morpho::fast::card_closing
+ **
** \param I Image exact type.
** \param N Neighborhood exact type.
**
@@ -446,6 +448,8 @@
** implementation is based on stak. Guichard and Morel, Image
** iterative smoothing and PDE's. Book in preparation. p 265.
**
+ ** \see oln::morpho::fast::card_opening.
+ **
** \param I Image exact type.
** \param N Neighborhood exact type.
**
Index: olena/oln/morpho/fast_morpho.hxx
--- olena/oln/morpho/fast_morpho.hxx Mon, 15 Mar 2004 17:40:54 +0100
van-vl_n (oln/45_fast_morph 1.21 640)
+++ olena/oln/morpho/fast_morpho.hxx Thu, 18 Mar 2004 17:20:37 +0100
van-vl_n (oln/45_fast_morph 1.21 640)
@@ -117,7 +117,7 @@
template<class I, class E1, class E2, class H>
// inline
void
- hist_update(H& hist,
+ hist_update(utils::abstract::histogram<H>& hist,
const abstract::non_vectorial_image<I>& input,
const oln_point_type(I)& p,
const abstract::struct_elt<E1>& se_rem,
@@ -284,6 +284,8 @@
/*!
** \brief Fast morpho algorithm.
**
+ ** \todo FIXME: This algorithm should be moved to the
+ ** namespace oln::morpho::fast.
**
** \code
** #include <oln/basics2d.hh>
@@ -295,21 +297,21 @@
** typedef oln::image2d<ntg::bin> im_type;
**
** im_type im1(oln::load(IMG_IN "object.pbm"));
- ** //save(oln::morpho::fast_morpho<im_type, oln::win_c8p(),
utils::histogram_min>
- ** // (im1, oln::win_c8p()), IMG_OUT
"oln_morpho_fast_morpho.pbm");
- ** save(im1, IMG_OUT "oln_morpho_fast_morpho.pbm");
- ** return 0;
+ ** save(oln::morpho::fast_morpho<im_type, oln::window2d,
+ ** oln::utils::histogram_min<ntg::bin> >
+ ** (im1, oln::win_c8p()),
+ ** IMG_OUT "oln_morpho_fast_morpho.pbm");
** }
** \endcode
- **
** \image html object_pbm.png
** \image latex object_pbm.png
** =>
** \image html oln_morpho_fast_morpho.png
** \image latex oln_morpho_fast_morpho.png
- ** \todo FIXME: Correct this function and make the example use it.
+ **
+ ** \todo FIXME: add tests.
*/
- template<class I, class E, template<typename, typename> class H>
+ template<class I, class E, class H>
oln_concrete_type(I)
fast_morpho(const abstract::non_vectorial_image<I>& input,
const abstract::struct_elt<E>& se)
@@ -350,7 +352,7 @@
const typename I::size_type size = input.size();
// Initialize the histogram with the values around the first point.
- H<oln_value_type(I),unsigned> hist;
+ H hist;
oln_point_type(I) p;
// oln_iter_type(E) dp(se);
@@ -364,7 +366,7 @@
output[p] = hist.res(); // First point.
internal::fast_morpho_inner<1, E::dim, const I,
- const typename I::size_type, H<oln_value_type(I),unsigned>,
+ const typename I::size_type, H,
const E,oln_point_type(I),oln_concrete_type(I)>::doit(input.exact(),
size, hist,
se_add, se_rem,
se_add_back, se_rem_back,
Index: olena/oln/morpho/hit_or_miss.inc
--- olena/oln/morpho/hit_or_miss.inc Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/42_hit_or_mis 1.22 640)
+++ olena/oln/morpho/hit_or_miss.inc Thu, 18 Mar 2004 17:18:51 +0100
van-vl_n (oln/42_hit_or_mis 1.22 640)
@@ -64,9 +64,9 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-**
oln::save(oln::morpho::hit_or_miss(oln::convert::bound<ntg::int_u8>(),
im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss
+** (oln::convert::bound<ntg::int_u8>(), im1, mywin, mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss.pbm");
-** return 0;
** }
** \endcode
**
@@ -76,7 +76,6 @@
** \image html oln_morpho_fast_hit_or_miss.png
** \image latex oln_morpho_fast_hit_or_miss.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class C, class B, class I, class E1, class E2>
typename mute<I, typename convoutput<C, B,oln_value_type(I)>::ret>::ret
@@ -128,9 +127,8 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-** oln::save(oln::morpho::hit_or_miss(im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss(im1, mywin, mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss_overload.pbm");
-** return 0;
** }
** \endcode
**
@@ -140,7 +138,6 @@
** \image html oln_morpho_fast_hit_or_miss_overload.png
** \image latex oln_morpho_fast_hit_or_miss_overload.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class I, class E1, class E2>
oln_concrete_type(I)
@@ -194,9 +191,8 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-** oln::save(oln::morpho::hit_or_miss_opening(im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss_opening(im1, mywin, mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss_opening.pbm");
-** return 0;
** }
** \endcode
**
@@ -206,7 +202,6 @@
** \image html oln_morpho_fast_hit_or_miss_opening.png
** \image latex oln_morpho_fast_hit_or_miss_opening.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class I, class E1, class E2>
oln_concrete_type(I)
@@ -256,9 +251,8 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-** oln::save(oln::morpho::hit_or_miss_opening_bg(im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss_opening_bg(im1, mywin,
mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss_opening_bg.pbm");
-** return 0;
** }
** \endcode
**
@@ -268,7 +262,6 @@
** \image html oln_morpho_fast_hit_or_miss_opening_bg.png
** \image latex oln_morpho_fast_hit_or_miss_opening_bg.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class I, class E1, class E2>
oln_concrete_type(I)
@@ -324,9 +317,8 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-** oln::save(oln::morpho::hit_or_miss_closing(im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss_closing(im1, mywin, mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss_closing.pbm");
-** return 0;
** }
** \endcode
**
@@ -336,7 +328,6 @@
** \image html oln_morpho_fast_hit_or_miss_closing.png
** \image latex oln_morpho_fast_hit_or_miss_closing.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class I, class E1, class E2>
oln_concrete_type(I)
@@ -389,9 +380,8 @@
** .add(-1,0);
** oln::window2d mywin2 = - mywin;
**
-** oln::save(oln::morpho::hit_or_miss_closing_bg(im1, mywin, mywin2),
+** oln::save(oln::morpho::fast::hit_or_miss_closing_bg(im1, mywin,
mywin2),
** IMG_OUT
"oln_morpho_fast_hit_or_miss_closing_bg.pbm");
-** return 0;
** }
** \endcode
**
@@ -401,7 +391,6 @@
** \image html oln_morpho_fast_hit_or_miss_closing_bg.png
** \image latex oln_morpho_fast_hit_or_miss_closing_bg.png
**
-** \todo FIXME: Histogram problems (fast version do not work).
*/
template<class I, class E1, class E2>
oln_concrete_type(I)
Index: olena/oln/morpho/opening.inc
--- olena/oln/morpho/opening.inc Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/40_opening.in 1.15 640)
+++ olena/oln/morpho/opening.inc Thu, 18 Mar 2004 16:47:27 +0100
van-vl_n (oln/40_opening.in 1.15 640)
@@ -49,9 +49,8 @@
**
** im_type im(oln::load(IMG_IN "object.pbm"));
**
-** oln::save(oln::morpho::opening(im, oln::win_c8p()),
+** oln::save(oln::morpho::fast::opening(im, oln::win_c8p()),
** IMG_OUT
"oln_morpho_fast_opening.pbm");
-** return 0;
** }
** \endcode
**
@@ -61,7 +60,6 @@
** \image html oln_morpho_fast_opening.png
** \image latex oln_morpho_fast_opening.png
**
-** \todo FIXME: Histogram problems (fast version do not compile).
*/
template<class I, class E>
oln_concrete_type(I)
Index: olena/oln/morpho/top_hat.inc
--- olena/oln/morpho/top_hat.inc Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/39_top_hat.in 1.15 640)
+++ olena/oln/morpho/top_hat.inc Thu, 18 Mar 2004 17:46:14 +0100
van-vl_n (oln/39_top_hat.in 1.15 640)
@@ -48,11 +48,11 @@
**
** im_type im1(oln::load(IMG_IN "lena256.pgm"));
**
-**
oln::save(oln::morpho::fast::white_top_hat(oln::convert::bound<ntg::int_u8>(),
+** oln::save(oln::morpho::fast::white_top_hat
+** (oln::convert::bound<ntg::int_u8>(),
** im1,
** oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_white_top_hat.pbm");
-** return 0;
** }
** \endcode
**
@@ -94,7 +94,6 @@
** oln::save(oln::morpho::fast::white_top_hat(im1,
** oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_white_top_hat_overload.pbm");
-** return 0;
** }
** \endcode
**
@@ -136,11 +135,11 @@
**
** im_type im1(oln::load(IMG_IN "lena256.pgm"));
**
-**
oln::save(oln::morpho::fast::black_top_hat(oln::convert::bound<ntg::int_u8>(),
+** oln::save(oln::morpho::fast::black_top_hat
+** (oln::convert::bound<ntg::int_u8>(),
** im1,
** oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_black_top_hat.pbm");
-** return 0;
** }
** \endcode
**
@@ -183,7 +182,6 @@
** oln::save(oln::morpho::fast::black_top_hat(im1,
** oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_black_top_hat_overload.pbm");
-** return 0;
** }
** \endcode
**
@@ -229,11 +227,11 @@
**
** im_type im1(oln::load(IMG_IN "lena256.pgm"));
**
-**
oln::save(oln::morpho::fast::self_complementary_top_hat(oln::convert::bound<ntg::int_u8>(),
+** oln::save(oln::morpho::fast::self_complementary_top_hat
+** (oln::convert::bound<ntg::int_u8>(),
** im1,
**
oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_self_complementary_top_hat.pbm");
-** return 0;
** }
** \endcode
**
@@ -274,7 +272,6 @@
** oln::save(oln::morpho::fast::self_complementary_top_hat(im1,
**
oln::win_c8p()),
** IMG_OUT
"oln_morpho_fast_self_complementary_top_hat_overload.pbm");
-** return 0;
** }
** \endcode
**
@@ -318,11 +315,11 @@
**
** im_type im1(oln::load(IMG_IN "lena256.pgm"));
**
-**
oln::save(oln::morpho::fast::top_hat_contrast_op(oln::convert::bound<ntg::int_u8>(),
+** oln::save(oln::morpho::fast::top_hat_contrast_op
+** (oln::convert::bound<ntg::int_u8>(),
** im1,
**
oln::win_c8p()),
** IMG_OUT "oln_morpho_fast_top_hat_contrast_op.pbm");
-** return 0;
** }
** \endcode
**
@@ -366,11 +363,9 @@
**
** im_type im1(oln::load(IMG_IN "lena256.pgm"));
**
-** //oln::save(oln::morpho::fast::top_hat_contrast_op(im1,
-** // oln::win_c8p()),
-** // IMG_OUT
"oln_morpho_fast_top_hat_contrast_op_overload.pbm");
-** oln::save(im1, IMG_OUT
"oln_morpho_fast_top_hat_contrast_op_overload.pbm");
-** return 0;
+** oln::save(oln::morpho::fast::top_hat_contrast_op(im1,
+** oln::win_c8p()),
+** IMG_OUT "oln_morpho_fast_top_hat_contrast_op_overload.pbm");
** }
** \endcode
**
Index: integre/ntg/real/behavior.hh
--- integre/ntg/real/behavior.hh Thu, 27 Nov 2003 11:26:27 +0100
burrus_n (oln/g/31_behaviour. 1.13.1.15.1.1 640)
+++ integre/ntg/real/behavior.hh Thu, 18 Mar 2004 16:08:00 +0100
van-vl_n (oln/g/31_behaviour. 1.13.1.15.1.1 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development
Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development
Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -107,7 +107,7 @@
template <class P>
static storage_type
check (const P& p)
- { return p; }
+ { return storage_type(p); }
};
static std::string
Index: integre/ntg/utils/cast.hh
--- integre/ntg/utils/cast.hh Wed, 28 Jan 2004 16:28:44 +0100 palma_g
(oln/i/26_cast.hh 1.3.1.12 640)
+++ integre/ntg/utils/cast.hh Thu, 18 Mar 2004 16:13:26 +0100 van-vl_n
(oln/i/26_cast.hh 1.3.1.12 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development
Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development
Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -77,7 +77,7 @@
const Tdest
force(const Tsrc& val)
{
- return (Tdest)val;
+ return ntg_unsafe_type(Tdest)(val);
}
/*------.
Index: olena/oln/utils/histogram.hh
--- olena/oln/utils/histogram.hh Mon, 15 Mar 2004 17:40:54 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.9 640)
+++ olena/oln/utils/histogram.hh Wed, 17 Mar 2004 18:24:55 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.9 640)
@@ -30,14 +30,22 @@
# include <oln/core/image1d.hh>
+
# include <oln/core/image3d.hh>
# include <oln/convert/value_to_point.hh>
# include <oln/core/abstract/image.hh>
+# include <ntg/core/pred_succ.hh>
+
# include <vector>
+/// Return the underlying counter type of \a H.
+# define oln_cpt_type(H) mlc_exact_type(H)::cpt_type
+/// Return the underlying counter type of \a H.
+# define oln_cpt_type_(H) mlc_exact_type_(H)::cpt_type
+
namespace oln {
/// \brief Utilities, such as statistics.
namespace utils {
@@ -49,7 +57,8 @@
struct img_max_size
{
private:
- typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type ensure_type;
+ typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
+ ensure_type;
public:
typedef image1d_size size_type;
typedef T comp_type;
@@ -83,22 +92,29 @@
};
} // end of namespace internal
+ /// Traits for oln::utils::abstract::histogram hierarchy.
+ template <class Exact>
+ struct hist_traits
+ {
+ };
+
+
/// \brief Abstract utilities.
namespace abstract
{
- /*! Abstract base class for historgram.
+ /*! Abstract base class for histogram.
**
** \see oln::histogram
*/
- template<class T,
- typename CPT,
- class Exact = mlc::final>
+ template<class Exact = mlc::final>
class histogram: public mlc_hierarchy::any<Exact>
{
public:
- typedef histogram<T, CPT, Exact> self_type;
- typedef Exact exact_type;
- typedef CPT cpt_type;
+ typedef typename mlc::exact_vt<histogram<Exact>,
+ Exact>::ret exact_type;
+ typedef typename hist_traits<exact_type>::cpt_type cpt_type;
+ typedef typename hist_traits<exact_type>::value_type value_type;
+
/// Put the number of occurrence of every value to zero.
void
clear()
@@ -106,14 +122,14 @@
this->exact().clear_impl();
}
/// Read the number of occurrence of \a v.
- const CPT&
- operator[](const T &v)const
+ const cpt_type&
+ operator[](const value_type &v)const
{
return this->exact().at(v);
}
/// Read or write the number of occurrence of \a v.
- CPT&
- operator[](const T &v)
+ cpt_type&
+ operator[](const value_type &v)
{
return this->exact().at(v);
}
@@ -130,6 +146,30 @@
};
} // end of namespace abstract
+ template<typename T,
+ typename CPT = unsigned,
+ class V2P = oln::convert::value_to_point<T>,
+ class Exact = mlc::final>
+ class histogram;
+
+ /// Traits for oln::utils::abstract::histogram hierarchy.
+ template <typename T,
+ typename CPT,
+ class V2P,
+ class Exact>
+ struct hist_traits<histogram<T, CPT, V2P, Exact> >
+ {
+ typedef CPT cpt_type; ///< Counter type
+ typedef T value_type; ///< Value of the input image
+ typedef V2P value_to_point_type; ///< Class that convert a value to
+ /// a point
+ typedef typename value_to_point_type::result_type point_type;
+ ///< Point type of the internal image.
+ enum {dim = point_type::dim}; ///< Dimension of the histogram.
+ typedef typename dim_traits<dim, CPT>::img_type img_type;
+ ///< Type of the internal image.
+ };
+
/*! Histogram.
**
** This histogram uses an image of unsigned to store the value.
@@ -168,26 +208,30 @@
** \endcode
*/
template<typename T,
- typename CPT = unsigned,
- class V2P = oln::convert::value_to_point<T>,
- class Exact = mlc::final>
+ typename CPT,
+ class V2P,
+ class Exact>
class histogram: public abstract::histogram
- <T, CPT, typename mlc::exact_vt<histogram<T, CPT, V2P, Exact>,
Exact>::ret>
+ <typename mlc::exact_vt<histogram<T, CPT, V2P, Exact>, Exact>::ret>
{
public:
- typedef histogram<T, CPT, V2P, Exact> self_type;
- typedef Exact exact_type;
- typedef T input_type;
- typedef V2P value_to_point_type;
- typedef CPT cpt_type;
- typedef typename value_to_point_type::result_type point_type;
- enum {dim = value_to_point_type::result_type::dim};
- typedef abstract::histogram<T, CPT, self_type> upper_type;
- typedef typename dim_traits<dim, CPT>::img_type img_type;
+ typedef typename mlc::exact_vt<histogram<T, CPT, V2P, Exact>,
+ Exact>::ret exact_type;
+ typedef typename hist_traits<exact_type>::value_type value_type;
+ typedef typename hist_traits<exact_type>::cpt_type cpt_type;
+ typedef typename hist_traits<exact_type>::value_to_point_type
+ value_to_point_type;
+ typedef typename hist_traits<exact_type>::point_type point_type;
+ enum {dim = hist_traits<exact_type>::dim};
+ typedef typename hist_traits<exact_type>::img_type img_type;
- /// Empty histogram. The function Init(image) should be used
after this constructor.
+ /*! \brief Empty histogram.
+ **
+ ** \note The function Init(image) should be used after this
+ ** constructor.
+ */
histogram(const value_to_point_type & c2p = value_to_point_type()):
- v2p_(c2p), img_(internal::img_max_size<input_type>()())
+ v2p_(c2p), img_(internal::img_max_size<value_type>()())
{
clear();
}
@@ -196,7 +240,7 @@
template <class I>
histogram(const oln::abstract::image<I> & input,
const value_to_point_type & v2p = value_to_point_type()):
- v2p_(v2p), img_(internal::img_max_size<input_type>()())
+ v2p_(v2p), img_(internal::img_max_size<value_type>()())
{
clear();
init(input);
@@ -208,18 +252,18 @@
{
typename img_type::iter_type it(img_ );
for_all(it)
- img_[it] = ntg_zero_val(CPT);
+ img_[it] = ntg_zero_val(cpt_type);
}
/// operator[] should be called.
- const CPT&
+ const cpt_type&
at(const T &v)const
{
return img_[v2p_(v)];
}
/// operator[] should be called.
- CPT&
- at(const T &v)
+ cpt_type&
+ at(const value_type &v)
{
return img_[v2p_(v)];
}
@@ -248,49 +292,68 @@
/*! Minimum value of an histogram.
**
- ** It return the smaller value within the image used to build the
histogram.
- **
- ** \warning If there is no min an assertion will fail at the end of
the loop.
+ ** It return the smaller value within the image used to build the
+ ** histogram.
**
- ** \note It can be slow when the histogram is sparse because it
iterate over a
- ** large range of 0. Use histogram_min or histogram_minmax instead.
+ ** \note It can be slow when the histogram is sparse because it iterate
+ ** over a large range of 0. Use \a histogram_min or \a histogram_minmax
+ ** instead.
** \see histogram_min
*/
- template< typename T, typename CPT, class Exact>
- inline T
- min(const abstract::histogram<T, CPT, Exact>& hist)
- {
- typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
ensure_type;
-
- T i;
- for (i = ntg_min_val(T); i <= ntg_max_val(T); ++i)
- if (hist[i] > ntg_zero_val(CPT))
+ template<class T>
+ inline oln_value_type(T)
+ min(const abstract::histogram<T>& hist)
+ {
+ typedef typename ntg_is_a(oln_value_type(T),
+ ntg::non_vectorial)::ensure_type ensure_type;
+
+ oln_value_type(T) i;
+ for (i = ntg_min_val(oln_value_type(T));
+ i != ntg_max_val(oln_value_type(T));
+ i = ntg::succ(i))
+ if (hist[i] > ntg_zero_val(oln_cpt_type(T)))
break;
return i;
}
/*! Maximum value of an histogram.
**
- ** It return the higher value within the image used to build the
histogram.
+ ** It return the higher value within the image used to build the
+ ** histogram.
**
- ** \warning If there is no min an assertion will fail at the end of
the loop.
- **
- ** \note It can be slow when the histogram is sparse because it
iterate over a
- ** large range of 0. Use histogram_max or histogram_minmax instead.
+ ** \note It can be slow when the histogram is sparse because it
+ ** iterate over a large range of 0. Use histogram_max or
+ ** histogram_minmax instead.
** \see histogram_max
*/
- template< typename T, typename CPT, class Exact>
- inline T
- max(const abstract::histogram<T, CPT, Exact>& hist)
- {
- typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
ensure_type;
-
- T i;
- for (i = ntg_max_val(T); i >= ntg_min_val(T); --i)
- if (hist[i] > ntg_zero_val(CPT))
+ template<class T>
+ inline oln_value_type(T)
+ max(const abstract::histogram<T>& hist)
+ {
+ typedef typename ntg_is_a(oln_value_type(T),
+ ntg::non_vectorial)::ensure_type ensure_type;
+
+ oln_value_type(T) i;
+ for (i = ntg_max_val(oln_value_type(T));
+ i != ntg_min_val(oln_value_type(T));
+ i = ntg::pred(i))
+ if (hist[i] > ntg_zero_val(oln_cpt_type(T)))
break;
return i;
}
+ template< typename T,
+ typename CPT = unsigned,
+ class V2P = convert::value_to_point<T>,
+ class Exact = mlc::final>
+ class histogram_minmax;
+
+ template <typename T,
+ typename CPT,
+ class V2P,
+ class Exact>
+ struct hist_traits<histogram_minmax<T, CPT, V2P, Exact> >
+ : public hist_traits<histogram<T, CPT, V2P, Exact> >
+ {};
/*! Build the histogram and has quick min and max functions.
**
** The idea behind the min- and max-specialized histogram is to
@@ -307,217 +370,269 @@
** \see histogram_max
*/
template< typename T,
- typename CPT = unsigned,
- class V2P = convert::value_to_point<T>,
- class Exact = mlc::final>
+ typename CPT,
+ class V2P,
+ class Exact>
class histogram_minmax : public histogram
<T, CPT, V2P,
- typename mlc::exact_vt<histogram_minmax<T, CPT, V2P, Exact>,
Exact>::ret>
+ typename mlc::exact_vt<histogram_minmax<T, CPT, V2P, Exact>,
+ Exact>::ret>
{
private:
- typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
ensure_type;
- protected:
- /// Maintain the worst min and max.
- void
- adjust(const T &idx)
- {
- if (idx > max_)
- max_ = idx;
- if (idx < min_)
- min_ = idx;
- }
+ typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
+ ensure_type;
public:
- typedef histogram_minmax<T, CPT, V2P, Exact> self_type;
- typedef Exact exact_type;
- typedef histogram<T, CPT, V2P, histogram_minmax<T, CPT, V2P,
Exact> > upper_type;
- typedef V2P value_to_point_type;
+ typedef typename mlc::exact_vt<histogram_minmax<T, CPT, V2P, Exact>,
+ Exact>::ret exact_type;
+ typedef typename hist_traits<exact_type>::value_type value_type;
+ typedef typename hist_traits<exact_type>::cpt_type cpt_type;
+ typedef typename hist_traits<exact_type>::value_to_point_type
+ value_to_point_type;
+ typedef typename hist_traits<exact_type>::point_type point_type;
+ enum {dim = hist_traits<exact_type>::dim};
+ typedef typename hist_traits<exact_type>::img_type img_type;
+ typedef histogram<T, CPT, V2P, exact_type> upper_type;
histogram_minmax(const value_to_point_type & v2p =
value_to_point_type()) :
upper_type(v2p),
- min_(ntg_min_val(T)), max_(ntg_max_val(T)) {}
+ min_(ntg_min_val(value_type)), max_(ntg_max_val(value_type)) {}
template <class I>
histogram_minmax(const oln::abstract::image<I> & input,
const value_to_point_type & v2p = value_to_point_type()) :
upper_type(input, v2p),
- min_(ntg_min_val(T)), max_(ntg_max_val(T)) {}
+ min_(ntg_min_val(value_type)), max_(ntg_max_val(value_type)) {}
/// operator[] should be called.
- const CPT&
- at(const T& i) const
+ const cpt_type&
+ at(const value_type& i) const
{
adjust(i);
return img_[v2p_(i)];
}
/// operator[] should be called.
- CPT&
- at(const T& i)
+ cpt_type&
+ at(const value_type& i)
{
adjust(i);
return img_[v2p_(i)];
}
/// Quick function min.
- T
+ value_type
min()
{
- for (; min_ <= ntg_max_val(T); ++min_)
- if (img_[v2p_(min_)] > ntg_zero_val(CPT))
+ for (; min_ != ntg_max_val(value_type); min_ = ntg::succ(min_))
+ if (img_[v2p_(min_)] > ntg_zero_val(cpt_type))
break;
return min_;
}
/// Quick function max.
- T
+ value_type
max()
{
- for (; max_ > 0; --max_)
- if (img_[v2p_(max_)] > ntg_zero_val(CPT))
+ for (; max_ != ntg_min_val(value_type); max_ = ntg::pred(max_))
+ if (img_[v2p_(max_)] > ntg_zero_val(cpt_type))
break;
return max_;
}
protected:
- T min_, max_; ///< Indices of min and max elements.
+ /// Maintain the worst min and max.
+ void
+ adjust(const value_type &idx)
+ {
+ if (idx > max_)
+ max_ = idx;
+ if (idx < min_)
+ min_ = idx;
+ }
+ value_type min_, max_; ///< Indices of min and max elements.
};
+
+
+ template< typename T,
+ typename CPT = unsigned,
+ class V2P = convert::value_to_point<T>,
+ class Exact = mlc::final>
+ class histogram_min;
+
+ template <typename T,
+ typename CPT,
+ class V2P,
+ class Exact>
+ struct hist_traits<histogram_min<T, CPT, V2P, Exact> >
+ : public hist_traits<histogram<T, CPT, V2P, Exact> >
+ {};
+
/*! Build the histogram and has quick min function.
**
** \see histogram_minmax
*/
template< typename T,
- typename CPT = unsigned,
- class V2P = convert::value_to_point<T>,
- class Exact = mlc::final>
+ typename CPT,
+ class V2P,
+ class Exact>
class histogram_min : public histogram<T, CPT, V2P,
typename mlc::exact_vt<histogram_min<T, CPT, V2P, Exact>,
Exact>::ret>
{
private:
- typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
ensure_type;
- protected:
- /// Maintain the worst min.
- void
- adjust(const T& idx)
- {
- if (idx < min_)
- min_ = idx;
- }
- public:
- typedef histogram_min<T, CPT, V2P, Exact> self_type;
- typedef Exact exact_type;
- typedef V2P value_to_point_type;
- typedef histogram<T, CPT, V2P, histogram_min<T, CPT, V2P, Exact>
> upper_type;
+ typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
+ ensure_type;
+ public:
+ typedef typename mlc::exact_vt<histogram_min<T, CPT, V2P, Exact>,
+ Exact>::ret exact_type;
+ typedef typename hist_traits<exact_type>::value_type value_type;
+ typedef typename hist_traits<exact_type>::cpt_type cpt_type;
+ typedef typename hist_traits<exact_type>::value_to_point_type
+ value_to_point_type;
+ typedef typename hist_traits<exact_type>::point_type point_type;
+ enum {dim = hist_traits<exact_type>::dim};
+ typedef typename hist_traits<exact_type>::img_type img_type;
+ typedef histogram<T, CPT, V2P, exact_type> upper_type;
histogram_min(const value_to_point_type & v2p =
value_to_point_type()) :
- upper_type(v2p), min_(ntg_min_val(T)) {}
+ upper_type(v2p), min_(ntg_min_val(value_type)) {}
template <class I>
histogram_min(const oln::abstract::image<I> & input,
const value_to_point_type & v2p = value_to_point_type()) :
- upper_type(input, v2p), min_(ntg_min_val(T)) {}
+ upper_type(input, v2p), min_(ntg_min_val(value_type)) {}
/// operator[] should be called.
- const CPT&
- at(const T& i) const
+ const cpt_type&
+ at(const value_type& i) const
{
return img_[v2p_(i)];
}
/// operator[] should be called.
- CPT&
- at(const T& i)
+ cpt_type&
+ at(const value_type& i)
{
adjust(i);
return img_[v2p_(i)];
}
/// Quick function min.
- T
+ value_type
min()
{
- for (; min_ <= ntg_max_val(T); ++min_)
- if (img_[v2p_(min_)] > ntg_zero_val(CPT))
+ for (; min_ != ntg_max_val(value_type); min_ = succ(min_))
+ if (img_[v2p_(min_)] > ntg_zero_val(cpt_type))
break;
return min_;
}
/// Return the min.
- T
+ value_type
res()
{
return min();
}
protected:
- T min_; ///< Index of the worst min element.
+ /// Maintain the worst min.
+ void
+ adjust(const value_type& idx)
+ {
+ if (idx < min_)
+ min_ = idx;
+ }
+ value_type min_; ///< Index of the worst min element.
};
+ template< typename T,
+ typename CPT = unsigned,
+ class V2P = convert::value_to_point<T>,
+ class Exact = mlc::final>
+ class histogram_max;
+
+ template <typename T,
+ typename CPT,
+ class V2P,
+ class Exact>
+ struct hist_traits<histogram_max<T, CPT, V2P, Exact> >
+ : public hist_traits<histogram<T, CPT, V2P, Exact> >
+ {};
+
/*! Build the histogram and has quick max function.
**
** \see histogram_minmax
*/
template< typename T,
- typename CPT = unsigned,
- class V2P = convert::value_to_point<T> ,
- class Exact = mlc::final>
+ typename CPT,
+ class V2P,
+ class Exact>
class histogram_max : public histogram<T, CPT, V2P,
typename mlc::exact_vt<histogram_max<T, CPT, V2P, Exact>,
Exact>::ret>
{
- protected:
- /// Maintain the worst max.
- void
- adjust(const T& idx)
- {
- if (idx > max_)
- max_ = idx;
- }
+ private:
+ typedef typename ntg_is_a(T, ntg::non_vectorial)::ensure_type
+ ensure_type;
public:
- typedef histogram_max<T, CPT, V2P, Exact> self_type;
- typedef Exact exact_type;
- typedef V2P value_to_point_type;
- typedef histogram<T, CPT, V2P, histogram_max<T, CPT, V2P, Exact>
> upper_type;
+ typedef typename mlc::exact_vt<histogram_max<T, CPT, V2P, Exact>,
+ Exact>::ret exact_type;
+ typedef typename hist_traits<exact_type>::value_type value_type;
+ typedef typename hist_traits<exact_type>::cpt_type cpt_type;
+ typedef typename hist_traits<exact_type>::value_to_point_type
+ value_to_point_type;
+ typedef typename hist_traits<exact_type>::point_type point_type;
+ enum {dim = hist_traits<exact_type>::dim};
+ typedef typename hist_traits<exact_type>::img_type img_type;
+ typedef histogram<T, CPT, V2P, exact_type> upper_type;
histogram_max(const value_to_point_type & v2p =
value_to_point_type()) :
- upper_type(v2p),max_(ntg_max_val(T)) {}
+ upper_type(v2p),max_(ntg_max_val(value_type)) {}
template <class I>
histogram_max(const oln::abstract::image<I> & input,
const value_to_point_type & v2p = value_to_point_type()) :
- upper_type(input, v2p),max_(ntg_max_val(T)) {}
+ upper_type(input, v2p),max_(ntg_max_val(value_type)) {}
/// operator[] should be called.
- const CPT&
- at(const T& i) const
+ const cpt_type&
+ at(const value_type& i) const
{
return img_[v2p_(i)];
}
/// operator[] should be called.
- CPT&
- at(const T& i)
+ cpt_type&
+ at(const value_type& i)
{
adjust(i);
return img_[v2p_(i)];
}
/// Quick function max.
- T
+ value_type
max()
{
- for (; max_ > 0; --max_)
- if (img_[v2p_(max_)] > ntg_zero_val(CPT))
+ for (; max_ != ntg_min_val(value_type); max_ = ntg::pred(max_))
+ if (img_[v2p_(max_)] > ntg_zero_val(cpt_type))
break;
return max_;
}
/// Return the max.
- T
+ value_type
res()
{
return max();
}
protected:
- T max_; ///< Index of the worst max element.
+
+ /// Maintain the worst max.
+ void
+ adjust(const value_type& idx)
+ {
+ if (idx > max_)
+ max_ = idx;
+ }
+ value_type max_; ///< Index of the worst max element.
};
/// Minimum non-zero value of an histogram.
@@ -563,7 +678,8 @@
{
typedef oln_value_type(I) val;
- typedef typename ntg_is_a(val, ntg::non_vectorial)::ensure_type
ensure_type;
+ typedef typename ntg_is_a(val, ntg::non_vectorial)::ensure_type
+ ensure_type;
// check the size
precondition(v.size() == im.npoints());
@@ -575,7 +691,8 @@
// with the histogram we can know the number of each color and
// then calculate an array of pointer for quick access to each
// value of the image
- const ntg_cumul_type(val) card = ntg_max_val(val) -
ntg_min_val(val) + 1;
+ const ntg_cumul_type(val) card = ntg_max_val(val)
+ - ntg_min_val(val) + 1;
std::vector<oln_point_type(I)* > ptr(card);
ptr[0] = &(v[0]);
for (ntg_cumul_type(val) i = 1; i < card; ++i)
@@ -588,7 +705,8 @@
*(ptr[unsigned(im[p] - ntg_min_val(val))]++) = p;
}
- /*! Inverted sort of the values of an image, and store the result
in a vector
+ /*! Inverted sort of the values of an image, and store the result
+ ** in a vector
**
** This sort is efficient.
** \arg im Image non_vectorial.
@@ -603,13 +721,15 @@
{
typedef oln_value_type(I) val;
- typedef typename ntg_is_a(val, ntg::non_vectorial)::ensure_type
ensure_type;
+ typedef typename ntg_is_a(val, ntg::non_vectorial)::ensure_type
+ ensure_type;
precondition(v.size() == im.npoints());
utils::histogram<val> histo(im);
- const ntg_cumul_type(val) card = ntg_max_val(val) -
ntg_min_val(val) + 1;
+ const ntg_cumul_type(val) card = ntg_max_val(val)
+ - ntg_min_val(val) + 1;
std::vector<oln_point_type(I)* > ptr(card);
ptr[card - 1] = &(v[0]);
Index: olena/tests/morpho/tests/edoc
--- olena/tests/morpho/tests/edoc Sun, 03 Aug 2003 19:36:17 +0200
burrus_n (oln/f/13_edoc.cc 1.4.1.5 640)
+++ olena/tests/morpho/tests/edoc Thu, 18 Mar 2004 16:34:08 +0100
van-vl_n (oln/f/13_edoc.cc 1.4.1.5 640)
@@ -10,6 +10,8 @@
#include <oln/morpho/dilation.hh>
#include <oln/morpho/opening.hh>
#include <oln/morpho/closing.hh>
+#include <oln/morpho/hit_or_miss.hh>
+#include <oln/morpho/top_hat.hh>
#include <oln/level/compare.hh>
@@ -27,13 +29,12 @@
fail = true; \
}
+template <class I>
bool
-check()
+check_bin_or_int_u8(const oln::image2d<I> &lena)
{
bool fail = false;
- image2d<int_u8> lena(rdata("lena128.pgm"));
-
std::cout << "erosion ... " << std::flush;
if (level::is_equal(morpho::erosion(lena, win_c4p()),
morpho::fast::erosion(lena, win_c4p())))
@@ -52,5 +53,53 @@
morpho::fast::closing(lena, win_c4p())))
OK_OR_FAIL;
+ std::cout << "closing ... " << std::flush;
+ if (level::is_equal(morpho::closing(lena, win_c4p()),
+ morpho::fast::closing(lena, win_c4p())))
+ OK_OR_FAIL;
+
+ //FIXME: value are only tested indirectly (this function is tested by
+ // fast::erosion and fast::dilatation).
+ oln::morpho::fast_morpho<oln::image2d<I>, oln::window2d,
oln::utils::histogram_min<I> >
+ (lena, oln::win_c4p());
+
+ oln::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);
+ oln::window2d mywin2 = - mywin;
+
+ std::cout << "hit_or_miss ... " << std::flush;
+ if
(level::is_equal(morpho::hit_or_miss(oln::convert::bound<ntg::int_u8>(),
+ lena, mywin, mywin2),
+ morpho::fast::hit_or_miss(oln::convert::bound<ntg::int_u8>(),
+ lena, mywin, mywin2)))
+ OK_OR_FAIL;
+
+ return fail;
+}
+
+bool
+check()
+{
+ bool fail = false;
+
+ image2d<int_u8> lena(rdata("lena128.pgm"));
+ std::cout << "int_u8..." << std::flush;
+
+ if (!check_bin_or_int_u8(lena))
+ OK_OR_FAIL;
+
+ std::cout << "top hat contrast ... " << std::flush;
+ if (level::is_equal(morpho::top_hat_contrast_op(lena, win_c4p()),
+ morpho::fast::top_hat_contrast_op(lena, win_c4p())))
+ OK_OR_FAIL;
+
+ image2d<bin> obj(rdata("object.pbm"));
+ std::cout << "bin..." << std::flush;
+ if (!check_bin_or_int_u8(obj))
+ OK_OR_FAIL;
+
return fail;
}
Index: olena/oln/convert/value_to_point.hh
--- olena/oln/convert/value_to_point.hh Sat, 13 Mar 2004 17:45:05 +0100
van-vl_n (oln/j/43_value_to_p 1.3 644)
+++ olena/oln/convert/value_to_point.hh Mon, 15 Mar 2004 18:44:05 +0100
van-vl_n (oln/j/43_value_to_p 1.3 644)
@@ -64,12 +64,36 @@
typedef point1d result_type;
typedef Argument_type argument_type;
- template <class input_type>
+ /// This class has bee made because of the lake of operator-- in
ntg::bin
+ template <typename O, typename I>
+ struct doit_binary
+ {
+ static
+ O
+ doit(const I &input)
+ {
+ return input ? O(1) : O(0);
+ }
+ };
+ /// This class has bee made because of the lake of operator-- in
ntg::bin
+ template <typename O, typename I>
+ struct doit_not_binary
+ {
+ static
+ O
+ doit(const I &input)
+ {
+ return O(input - ntg_min_val(I));
+ }
+ };
+
result_type
- doit(const input_type &input) const
+ doit(const argument_type &input) const
{
- result_type r(input - ntg_min_val(input_type));
- return r;
+ typedef typename mlc::if_<ntg_is_a(argument_type, ntg::binary)::ret,
+ doit_binary<result_type, argument_type>,
+ doit_not_binary<result_type, argument_type> >::ret doit_type;
+ return doit_type::doit(input);
}
};
@@ -92,11 +116,11 @@
typedef typename ntg::color<3, Qbits, S> argument_type;
result_type
- operator()(const argument_type &input) const
+ doit(const argument_type &input) const
{
result_type r;
for (unsigned i = 0; i < 3; ++i)
- r.nth(i) = input[i];
+ r.nth(i) = oln::coord(input[i]);
return r;
}
};
Index: olena/oln/morpho/attribute_closing_opening_map.hh
--- olena/oln/morpho/attribute_closing_opening_map.hh Mon, 15 Mar 2004
17:40:54 +0100 van-vl_n (oln/j/49_attribute_ 1.8 600)
+++ olena/oln/morpho/attribute_closing_opening_map.hh Thu, 18 Mar 2004
17:24:51 +0100 van-vl_n (oln/j/49_attribute_ 1.8 600)
@@ -255,15 +255,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::card_closing(im1,
oln::neighb_c4(), 200);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_card_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_card_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_card_closing.png
- ** \image latex oln_morpho_fast_card_closing.png
+ ** \image html oln_morpho_slow_card_closing.png
+ ** \image latex oln_morpho_slow_card_closing.png
**
*/
xxx_closing_map_decl(card);
@@ -282,15 +281,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::card_opening(im1,
oln::neighb_c4(), 200);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_card_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_card_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_card_opening.png
- ** \image latex oln_morpho_fast_card_opening.png
+ ** \image html oln_morpho_slow_card_opening.png
+ ** \image latex oln_morpho_slow_card_opening.png
**
*/
xxx_opening_map_decl(card);
@@ -309,15 +307,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::integral_closing(im1,
oln::neighb_c4(), 200);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_integral_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_integral_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_integral_closing.png
- ** \image latex oln_morpho_fast_integral_closing.png
+ ** \image html oln_morpho_slow_integral_closing.png
+ ** \image latex oln_morpho_slow_integral_closing.png
**
*/
xxx_closing_map_decl(integral);
@@ -336,15 +333,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::integral_opening(im1,
oln::neighb_c4(), 200);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_integral_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_integral_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_integral_opening.png
- ** \image latex oln_morpho_fast_integral_opening.png
+ ** \image html oln_morpho_slow_integral_opening.png
+ ** \image latex oln_morpho_slow_integral_opening.png
**
*/
xxx_opening_map_decl(integral);
@@ -363,15 +359,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::height_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_height_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_height_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_height_opening.png
- ** \image latex oln_morpho_fast_height_opening.png
+ ** \image html oln_morpho_slow_height_opening.png
+ ** \image latex oln_morpho_slow_height_opening.png
**
*/
xxx_opening_map_decl(height);
@@ -391,15 +386,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::height_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_height_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_height_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_height_closing.png
- ** \image latex oln_morpho_fast_height_closing.png
+ ** \image html oln_morpho_slow_height_closing.png
+ ** \image latex oln_morpho_slow_height_closing.png
**
*/
xxx_closing_map_decl(height);
@@ -420,15 +414,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::maxvalue_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_maxvalue_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_maxvalue_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_maxvalue_closing.png
- ** \image latex oln_morpho_fast_maxvalue_closing.png
+ ** \image html oln_morpho_slow_maxvalue_closing.png
+ ** \image latex oln_morpho_slow_maxvalue_closing.png
**
*/
xxx_closing_map_decl(maxvalue);
@@ -448,15 +441,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::maxvalue_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_maxvalue_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_maxvalue_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_maxvalue_opening.png
- ** \image latex oln_morpho_fast_maxvalue_opening.png
+ ** \image html oln_morpho_slow_maxvalue_opening.png
+ ** \image latex oln_morpho_slow_maxvalue_opening.png
**
*/
xxx_opening_map_decl(maxvalue);
@@ -476,15 +468,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::minvalue_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_minvalue_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_minvalue_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_minvalue_opening.png
- ** \image latex oln_morpho_fast_minvalue_opening.png
+ ** \image html oln_morpho_slow_minvalue_opening.png
+ ** \image latex oln_morpho_slow_minvalue_opening.png
**
*/
xxx_opening_map_decl(minvalue);
@@ -504,15 +495,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::minvalue_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_minvalue_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_minvalue_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_minvalue_closing.png
- ** \image latex oln_morpho_fast_minvalue_closing.png
+ ** \image html oln_morpho_slow_minvalue_closing.png
+ ** \image latex oln_morpho_slow_minvalue_closing.png
**
*/
xxx_closing_map_decl(minvalue);
@@ -532,15 +522,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::ball_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_ball_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_ball_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_ball_opening.png
- ** \image latex oln_morpho_fast_ball_opening.png
+ ** \image html oln_morpho_slow_ball_opening.png
+ ** \image latex oln_morpho_slow_ball_opening.png
**
*/
xxx_opening_im_map_decl(ball);
@@ -560,15 +549,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::ball_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_ball_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_ball_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_ball_closing.png
- ** \image latex oln_morpho_fast_ball_closing.png
+ ** \image html oln_morpho_slow_ball_closing.png
+ ** \image latex oln_morpho_slow_ball_closing.png
**
*/
xxx_closing_im_map_decl(ball);
@@ -588,15 +576,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::dist_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_dist_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_dist_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_dist_opening.png
- ** \image latex oln_morpho_fast_dist_opening.png
+ ** \image html oln_morpho_slow_dist_opening.png
+ ** \image latex oln_morpho_slow_dist_opening.png
**
*/
xxx_opening_im_map_decl(dist);
@@ -616,15 +603,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::dist_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_dist_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_dist_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_dist_closing.png
- ** \image latex oln_morpho_fast_dist_closing.png
+ ** \image html oln_morpho_slow_dist_closing.png
+ ** \image latex oln_morpho_slow_dist_closing.png
**
*/
xxx_closing_im_map_decl(dist);
@@ -644,15 +630,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::cube_closing(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_cube_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_cube_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_cube_closing.png
- ** \image latex oln_morpho_fast_cube_closing.png
+ ** \image html oln_morpho_slow_cube_closing.png
+ ** \image latex oln_morpho_slow_cube_closing.png
**
*/
xxx_closing_im_map_decl(cube);
@@ -672,15 +657,14 @@
**
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::cube_opening(im1,
oln::neighb_c4(), 5);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_cube_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_cube_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_cube_opening.png
- ** \image latex oln_morpho_fast_cube_opening.png
+ ** \image html oln_morpho_slow_cube_opening.png
+ ** \image latex oln_morpho_slow_cube_opening.png
**
*/
xxx_opening_im_map_decl(cube);
@@ -701,15 +685,14 @@
** lambda[0] = lambda[1] = 50;
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::box_closing(im1, oln::neighb_c4(),
lambda);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_box_closing.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_box_closing.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_box_closing.png
- ** \image latex oln_morpho_fast_box_closing.png
+ ** \image html oln_morpho_slow_box_closing.png
+ ** \image latex oln_morpho_slow_box_closing.png
**
*/
xxx_closing_im_map_decl(box);
@@ -730,15 +713,14 @@
** lambda[0] = lambda[1] = 50;
** im_type im1(oln::load(IMG_IN "lena128.pgm"));
** im1 = oln::morpho::slow::box_opening(im1, oln::neighb_c4(),
lambda);
- ** oln::save(im1, IMG_OUT "oln_morpho_fast_box_opening.ppm");
- ** return 0;
+ ** oln::save(im1, IMG_OUT "oln_morpho_slow_box_opening.ppm");
** }
** \endcode
** \image html lena128_pgm.png
** \image latex lena128_pgm.png
** =>
- ** \image html oln_morpho_fast_box_opening.png
- ** \image latex oln_morpho_fast_box_opening.png
+ ** \image html oln_morpho_slow_box_opening.png
+ ** \image latex oln_morpho_slow_box_opening.png
**
*/
xxx_opening_im_map_decl(box);
2
1
La section de Tiger pour la documentation a du sens pour Vaucanson et
Olena.
http://www.lrde.epita.fr/~akim/compil/assignments.html#Documentation-Style
2004-03-18 Akim Demaille <akim(a)epita.fr>
* assignments.texi (T3 Goals): More.
(T5 Goals): Traits are now part of...
(T3 Goals): these.
(Documentation Style): More about useless words/comments.
--- /home/akim/www/compil/assignments.txt 2004-03-17 10:39:27.000000000 +0100
+++ assignments.txt 2004-03-18 11:44:38.000000000 +0100
@@ -5,7 +5,7 @@
The Tiger Compiler Project
**************************
- This document, last edited on March 17, 2004, details the various tasks
+ This document, last edited on March 18, 2004, details the various tasks
the "Compilation" students must complete. It is available under various
forms:
- Assignments in a single HTML file(1).
@@ -1617,10 +1617,51 @@
End comments with a period.
+ -- Rule: Be concise
For documentation as for any other kind of writing, the shorter, the
better: hunt useless words. *Note The Elements of Style::, for an
excellent set of writing guidelines.
+ Here are a few samples of things to avoid:
+ Documenting the definition instead of the object of the definition
+ Don't write:
+
+ /// Declaration of the Foo class.
+ class Foo
+ {
+ ...
+ };
+
+ Of course you're documentation the definition of the entities!
+ "Declaration of the" is totally useless, just use `/// Foo
+ class'. But read bellow.
+
+ Don't qualify obvious entity kinds.
+ Don't write:
+
+ /// Foo class.
+ class Foo
+ {
+ public:
+ /// Construct a Foo object.
+ Foo (Bar &bar)
+ ...
+ };
+
+ It is so obvious that you're documentation the class and the
+ constructor that you should not write it down. Instead of
+ documenting the _kind_ of an entity (class, function, namespace,
+ destructor...), document its _goal_.
+
+ /// Wrapper around Bar objects.
+ class Foo
+ {
+ public:
+ /// Bind to \a bar.
+ Foo (Bar &bar)
+ ...
+ };
+
-- Rule: Use the Imperative
Use the imperative when documenting, as if you were giving order to the
function or entity you are describing. When describing a function,
1
0
Index: olena/ChangeLog
from Giovanni Palma <giovanni(a)lrde.epita.fr>
* oln/transforms/fft.hh: Add comments.
* oln/transforms/dwt.hh: Likewise.
* oln/transforms/wavelet_coeffs.hh: Likewise.
Index: olena/oln/transforms/dwt.hh
--- olena/oln/transforms/dwt.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/i/35_dwt.hh 1.2.1.4.1.10 600)
+++ olena/oln/transforms/dwt.hh Tue, 16 Mar 2004 10:21:44 +0100 palma_g (oln/i/35_dwt.hh 1.2.1.4.1.10 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,9 @@
namespace oln {
+ /*!
+ ** \brief Transform algorithm implementation.
+ */
namespace transforms {
// macros used to define all the wavelets coefficients
@@ -58,6 +61,9 @@
init(); \
}
+ /*!
+ ** \brief type of dwt to perform.
+ */
typedef enum {
dwt_std,
dwt_non_std
@@ -65,34 +71,47 @@
} // end of namespace transforms
+ /*!
+ ** \brief internal stuff.
+ */
namespace internal
{
-
+ /// \brief Value of ln(2).
static const ntg::float_d ln_2_ = 0.6931471805599453092;
- //
- // wavelet_coeffs_<T, N, Self>
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief Wavelet coefficient data structure.
+ **
+ ** \param T Coefficients data type.
+ ** \param N Number of coefficients.
+ ** \param Self Self type.
+ */
template <class T, unsigned N, class Self>
struct wavelet_coeffs_
{
- typedef T value_t;
- typedef Self self_t;
+ typedef T value_t; ///< \brType of data used.
+ typedef Self self_t; ///< \brief Self type.
public:
// accessors
+ /// \brief Accessor to ith element of g.
const value_t getG(unsigned i) const { return g[i]; }
+ /// \brief Accessor to ith element of ig.
const value_t getInvG(unsigned i) const { return ig[i]; }
+ /// \brief Accessor to ith element of h.
const value_t getH(unsigned i) const { return h[i]; }
+ /// \brief Accessor to ith element of ih.
const value_t getInvH(unsigned i) const { return ih[i]; }
-
+ /// \brief Give the size of the arrays.
const unsigned size() const { return size_; }
protected:
-
+ /*!
+ ** \brief Initialization method.
+ **
+ ** Fill coefficients.
+ */
void init()
{
for (unsigned i = 0; i < size_; i += 2) {
@@ -105,28 +124,46 @@
}
}
+ /*!
+ ** \brief Constructor.
+ */
wavelet_coeffs_(){}
+ /*!
+ ** \brief Destructor.
+ **
+ ** Its aim is to check N is pair.
+ */
~wavelet_coeffs_()
{
mlc::is_false<N % 2>::ensure();
}
- mlc::array1d< mlc::array1d_info<N>, value_t> h;
- mlc::internal::array1d_start_<value_t> wc_start;
+ mlc::array1d< mlc::array1d_info<N>, value_t> h; /// \brief array of value_t.
+ mlc::internal::array1d_start_<value_t> wc_start; /// \brief First coefficient.
private:
- value_t g[N];
- value_t ih[N];
- value_t ig[N];
+ value_t g[N]; /// \brief array of value_t.
+ value_t ih[N]; /// \brief array of value_t.
+ value_t ig[N]; /// \brief array of value_t.
enum {
size_ = N
};
};
- // _dwt_transform_step
-
+ /*!
+ ** \brief Step of a dwt transform.
+ **
+ ** \param I Exact type of the input image.
+ ** \param K type of coefficients.
+ **
+ ** \arg im Image to process.
+ ** \arg p_ Point to work on.
+ ** \arg d Component d of p.
+ ** \arg n Step number.
+ ** \arg coeffs Coefficients.
+ */
template <class I, class K>
void dwt_transform_step_(abstract::image<I>& im,
const oln_point_type(I)& p_,
@@ -169,8 +206,18 @@
delete[] tmp;
}
- // _dwt_transform_inv_step
-
+ /*!
+ ** \brief Step of a dwt invert transform.
+ **
+ ** \param I Exact type of the input image.
+ ** \param K type of coefficients.
+ **
+ ** \arg im Image to process.
+ ** \arg p_ Point to work on.
+ ** \arg d Component d of p.
+ ** \arg n Step number.
+ ** \arg coeffs Coefficients.
+ */
template <class I, class K>
void dwt_transform_inv_step_(abstract::image<I>& im,
const oln_point_type(I)& p_,
@@ -217,16 +264,28 @@
}
// Functions used to iterate over all dimensions except one
-
+ /*!
+ ** \brief Enum to know if you go in forward or backward order.
+ */
typedef enum {
dwt_fwd,
dwt_bwd
} dwt_transform_dir_;
+ /*!
+ ** \brief Functions used to iterate over all dimensions except one.
+ **
+ ** \param dim Number of dimension to treat.
+ ** \param skip Dimension to skip.
+ ** \param current Current dimension.
+ */
template <unsigned dim, unsigned skip,
unsigned current = dim>
struct dim_skip_iterate_rec_
{
+ /*!
+ ** \brief Iterate over all dimensions except one.
+ */
template <class I, class K>
static void doit(abstract::image<I>& im,
oln_point_type(I)& p,
@@ -249,9 +308,24 @@
}
};
+ /*!
+ ** \brief Specialization of dim_skip_iterate_rec_ with current
+ ** dimension set to 0.
+ **
+ ** \param dim Number of dimension to process.
+ ** \param skip Dimension to skip.
+ */
template <unsigned dim, unsigned skip>
struct dim_skip_iterate_rec_<dim, skip, 0>
{
+ /*!
+ ** \brief Iterate over all dimensions except one.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ **
+ ** It is leaf call, thus you can call a dwt transform step.
+ */
template <class I, class K>
static void doit(abstract::image<I>& im,
oln_point_type(I)& p,
@@ -275,9 +349,21 @@
}
};
+ /*!
+ ** \brief Iterate over all dimensions except one.
+ **
+ ** \param dim Number of dimension to process.
+ ** \param skip Dimension to skip.
+ */
template <unsigned dim, unsigned skip>
struct dim_iterate_rec_
{
+ /*!
+ ** \brief Iterate over all dimensions except one.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ */
template <class I, class K>
static void doit(abstract::image<I>& im,
oln_point_type(I)& p,
@@ -291,9 +377,24 @@
}
};
+ /*!
+ ** \brief Specialization of dim_iterate_rec_ with skip dimension
+ ** set to 0.
+ **
+ ** \param dim Number of dimension to process.
+ */
template <unsigned dim>
struct dim_iterate_rec_<dim, 0>
{
+
+ /*!
+ ** \brief Iterate over all dimensions except one.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ **
+ ** End of recursion.
+ */
template <class I, class K>
static void doit(abstract::image<I>& ,
oln_point_type(I)& ,
@@ -306,6 +407,12 @@
}
};
+ /*!
+ ** \brief Internal dwt transform function.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ */
template <class I, class K>
void dwt_transform_(abstract::image<I>& im,
const unsigned l1,
@@ -326,6 +433,12 @@
}
}
+ /*!
+ ** \brief Internal dwt invert transform function.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ */
template <class I, class K>
void dwt_transform_inv_(abstract::image<I>& im,
const unsigned l1,
@@ -350,21 +463,29 @@
namespace transforms {
- //
- // dwt<T, K>
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief Object to compute dwt transforms.
+ **
+ ** \param I Exact type of the image to process.
+ ** \param K Type of coefficients.
+ */
template <class I, class K>
class dwt
{
public:
- typedef I original_im_t;
- typedef oln_value_type(I) original_im_value_t;
- typedef typename mute<I, ntg::float_d>::ret trans_im_t;
- typedef typename K::self_t coeffs_t;
-
+ typedef I original_im_t; ///< \brief Exact of the image.
+ typedef oln_value_type(I) original_im_value_t; ///< \brief Original data type of the image.
+ typedef typename mute<I, ntg::float_d>::ret trans_im_t; ///< \brief Type of the transformed image.
+ typedef typename K::self_t coeffs_t; ///< \brief Data type of coefficients.
+
+ /*!
+ ** \brief Constructor from an image.
+ **
+ ** Initialization of dwt transform.
+ **
+ ** \arg im Image to process.
+ */
dwt(const original_im_t& im) : original_im(im)
{
ntg_is_a(original_im_value_t, ntg::real)::ensure();
@@ -384,16 +505,33 @@
trans_im = trans_im_t(im.size());
}
+ /*!
+ ** \brief Accessor to the transformed image.
+ **
+ ** Const version.
+ */
const trans_im_t transformed_image() const
{
return trans_im;
}
+ /*!
+ ** \brief Accessor to the transformed image.
+ **
+ ** Non const version.
+ */
trans_im_t& transformed_image()
{
return trans_im;
}
+ /*!
+ ** \brief Compute the dwt transform.
+ **
+ ** \arg t Type of the transform (standard or non standard)
+ ** \arg normalized Do you want a normalized result ?
+ ** \arg l Level.
+ */
trans_im_t transform(dwt_transform_type t = dwt_non_std,
bool normalized = true, unsigned l = 0)
{
@@ -407,6 +545,7 @@
}
oln_iter_type(trans_im_t) it(trans_im);
+
if (normalized) {
norm = pow(sqrt(2), original_im_t::dim * l);
for_all(it)
@@ -426,6 +565,11 @@
return trans_im;
}
+ /*!
+ ** \brief Compute the invert dwt transform.
+ **
+ ** \arg l Level.
+ */
trans_im_t transform_inv(unsigned l = 0)
{
if (l == 0)
@@ -435,6 +579,7 @@
trans_im_t new_im(trans_im.size());
oln_iter_type(trans_im_t) it(trans_im);
+
if (norm != 1) {
for_all(it)
new_im[it] = trans_im[it] * norm;
@@ -451,6 +596,13 @@
return new_im;
}
+ /*!
+ ** \brief Compute the invert dwt transform.
+ **
+ ** \param T1 Data type you want the output image contains.
+ **
+ ** \arg l Level.
+ */
template <class T1>
typename mute<I, T1>::ret transform_inv(unsigned l = 0)
{
@@ -460,6 +612,7 @@
typename mute<I, T1>::ret new_im(tmp_im.size());
oln_iter_type(trans_im_t) it(tmp_im);
+
for_all(it)
new_im[it] = (tmp_im[it] >= ntg_inf_val(T1) ?
(tmp_im[it] <= ntg_sup_val(T1) ?
@@ -471,14 +624,14 @@
private:
- const original_im_t& original_im;
- trans_im_t trans_im;
- const coeffs_t coeffs;
- unsigned im_size;
- unsigned max_level;
- unsigned current_level;
- ntg::float_d norm;
- dwt_transform_type transform_type;
+ const original_im_t& original_im; ///< The original image.
+ trans_im_t trans_im; ///< The transformed image.
+ const coeffs_t coeffs; ///< The coefficients.
+ unsigned im_size; ///< Size of the image.
+ unsigned max_level; ///< Higher level.
+ unsigned current_level; ///< Current level.
+ ntg::float_d norm; ///< Norm.
+ dwt_transform_type transform_type; ///< Type of transform wanted.
};
} // end of namespace transforms
Index: olena/oln/transforms/fft.hh
--- olena/oln/transforms/fft.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/i/36_fft.hh 1.4.1.8 600)
+++ olena/oln/transforms/fft.hh Tue, 16 Mar 2004 11:56:19 +0100 palma_g (oln/i/36_fft.hh 1.4.1.8 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,46 +46,73 @@
namespace internal {
- // dispatch traits for fftw
-
+ /// \brief dispatch traits for fftw
enum fft_dispatch { fft_cplx, fft_real };
+ /*!
+ ** \brief fft trait.
+ */
template <class T>
struct fft_trait
{
void ensure() { ntg_is_a(T, ntg::real)::ensure(); }
- static const fft_dispatch which = fft_real;
- typedef fftw_real fftw_input;
+ static const fft_dispatch which = fft_real; ///< Real dispatch.
+ typedef fftw_real fftw_input; ///< Type of input.
};
+ /*!
+ ** \brief fft trait.
+ **
+ ** \specialization for ntg::cplx<R, T>
+ */
template <ntg::cplx_representation R, class T>
struct fft_trait<ntg::cplx<R, T> >
{
- static const fft_dispatch which = fft_cplx;
- typedef fftw_complex fftw_input;
+ static const fft_dispatch which = fft_cplx; ///< Complex dispatch.
+ typedef fftw_complex fftw_input; ///< Type of input.
};
- //
- // _fft<ntg::cplx_representation, T>
- //
- //////////////////////////////////////
-
+ /*!
+ ** _fft<ntg::cplx_representation, T>
+ **
+ ** \param T Data type.
+ ** \param R type of representation.
+ */
template <class T, ntg::cplx_representation R>
class _fft
{
public:
-
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** Const version.
+ */
const image2d<ntg::cplx<R, ntg::float_d> > transformed_image() const
{
return trans_im;
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** Non const version.
+ */
image2d<ntg::cplx<R, ntg::float_d> >& transformed_image()
{
return trans_im;
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** |T[p]|.
+ **
+ ** \param T1 Data type of the resulting image.
+ **
+ ** \arg ordered Kind of traversal.
+ */
template <class T1>
image2d<T1> transformed_image_magn(bool ordered = true) const
{
@@ -110,11 +137,30 @@
return new_im;
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** |T[p]|.
+ **
+ ** \arg ordered Kind of traversal.
+ */
image2d<T> transformed_image_magn(bool ordered = true) const
{
return transformed_image_magn<T>(ordered);
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a clipped value of |T[p]|.\n
+ **
+ ** \param T1 Data type of the resulting image.
+ **
+ ** \arg clip Value used for clipping.
+ ** \arg ordered Kind of traversal.
+ */
template <class T1>
image2d<T1> transformed_image_clipped_magn(const ntg::float_d clip,
bool ordered = true) const
@@ -158,24 +204,63 @@
return new_im;
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a clipped value of |T[p]|.\n
+ **
+ ** \arg clip Value used for clipping.
+ ** \arg ordered Kind of traversal.
+ */
image2d<T> transformed_image_clipped_magn(const ntg::float_d clip,
bool ordered = true) const
{
return transformed_image_clipped_magn<T>(clip, ordered);
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a clipped value of |T[p]|.\n
+ **
+ ** \param T1 Data type of the resulting image.
+ **
+ ** \arg ordered Kind of traversal.
+ */
template <class T1>
image2d<T1> transformed_image_clipped_magn(bool ordered = true) const
{
return transformed_image_clipped_magn<T1>(1, ordered);
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a clipped value of |T[p]|.\n
+ **
+ ** \param T1 Data type of the resulting image.
+ **
+ ** \arg ordered Kind of traversal.
+ */
image2d<T> transformed_image_clipped_magn(bool ordered = true) const
{
return transformed_image_clipped_magn<T>(1, ordered);
}
// FIXME: Find a more elegant way to fix range interval on a and b.
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a log translated value of |T[p]| on interval [a; b].\n
+ **
+ ** \arg a Lower bound.
+ ** \arg b Upper bound.
+ ** \arg ordered Kind of traversal.
+ */
template <class T1>
image2d<T1> transformed_image_log_magn(const ntg::range<ntg::float_d,
ntg::bounded_u<0, 1000>,
@@ -213,6 +298,16 @@
}
// FIXME: Find a more elegant way to fix boundaries of a and b.
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a log translated value of |T[p]| on interval [a; b].\n
+ **
+ ** \arg a Lower bound.
+ ** \arg b Upper bound.
+ ** \arg ordered Kind of traversal.
+ */
image2d<T> transformed_image_log_magn(const ntg::range<ntg::float_d,
ntg::bounded_u<0, 1000>,
ntg::saturate> a,
@@ -224,17 +319,40 @@
return transformed_image_log_magn<T>(a, b, ordered);
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a log translated value of |T[p]| on interval [1; 100].\n
+ **
+ ** \param T1 Data type of the resulting image.
+ **
+ ** \arg ordered Kind of traversal.
+ */
template <class T1>
image2d<T1> transformed_image_log_magn(bool ordered = true) const
{
return transformed_image_log_magn<T1>(1, 100, ordered);
}
+ /*!
+ ** \brief Accessor to transformed image.
+ **
+ ** For each point p of the transformed image T, you get
+ ** a log translated value of |T[p]| on interval [1; 100].\n
+ **
+ ** \arg ordered Kind of traversal.
+ */
image2d<T> transformed_image_log_magn(bool ordered = true) const
{
return transformed_image_log_magn<T>(1, 100, ordered);
}
+ /*!
+ ** \brief Destructor.
+ **
+ ** Let memory free for other big images !!!
+ */
~_fft()
{
delete [] in;
@@ -245,11 +363,11 @@
protected:
- typename fft_trait<T>::fftw_input *in;
- fftw_complex *out;
- fftwnd_plan p;
- fftwnd_plan p_inv;
- image2d<ntg::cplx<R, ntg::float_d> > trans_im;
+ typename fft_trait<T>::fftw_input *in; ///< Input image.
+ fftw_complex *out; ///< Complex image.
+ fftwnd_plan p; ///< Plan.
+ fftwnd_plan p_inv; ///< inverted plan.
+ image2d<ntg::cplx<R, ntg::float_d> > trans_im; ///< Transformed image.
};
@@ -257,22 +375,37 @@
namespace transforms {
+ /*!
+ ** \brief fft class declaration.
+ **
+ ** \param T Data type.
+ ** \param R Complex representation kind.
+ ** \param which Dispatch.
+ */
template <class T,
ntg::cplx_representation R = ntg::polar,
internal::fft_dispatch which = internal::fft_trait<T>::which >
class fft;
- //
- // fft<T, ntg::cplx_representation, fft_real>
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief fft specialization for fft real dispatch.
+ **
+ ** \param T Data type.
+ ** \param R Complex representation kind.
+ */
template <class T, ntg::cplx_representation R>
class fft<T, R, internal::fft_real> : public internal::_fft<T, R>
{
public:
+ /*!
+ ** \brief Constructor.
+ **
+ ** Initialization of data in order to compute the fft.
+ **
+ ** \arg original_im Image to process.
+ */
fft(const image2d<T>& original_im)
{
this->in = new fftw_real[original_im.nrows() * original_im.ncols()];
@@ -291,6 +424,9 @@
this->trans_im = image2d<ntg::cplx<R, ntg::float_d> >(original_im.size());
}
+ /*!
+ ** \brief Compute and return the transform.
+ */
image2d<ntg::cplx<R, ntg::float_d> > transform()
{
rfftwnd_one_real_to_complex(this->p, this->in, this->out);
@@ -313,6 +449,11 @@
return this->trans_im;
}
+ /*!
+ ** \brief Compute and return the invert transform.
+ **
+ ** \param T1 Data type of output image.
+ */
template <class T1>
image2d<T1> transform_inv()
{
@@ -343,6 +484,9 @@
return new_im;
}
+ /*!
+ ** \brief Compute and return the invert transform.
+ */
image2d<T> transform_inv()
{
return transform_inv<T>();
@@ -350,17 +494,25 @@
};
- //
- // fft<T, ntg::cplx_representation, fft_cplx>
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief fft specialization for fft complex dispatch.
+ **
+ ** \param T Data type.
+ ** \param R Complex representation kind.
+ */
template <class T, ntg::cplx_representation R>
class fft<T, R, internal::fft_cplx> : public internal::_fft<T, R>
{
public:
+ /*!
+ ** \brief Constructor.
+ **
+ ** Initialization of data in order to compute the fft.
+ **
+ ** \arg original_im Image to process.
+ */
template <ntg::cplx_representation R1>
fft(const image2d<ntg::cplx<R1, T> >& original_im)
{
@@ -384,6 +536,9 @@
this->trans_im = image2d<ntg::cplx<ntg::rect, ntg::float_d> >(original_im.size());
}
+ /*!
+ ** \brief Compute and return the transform.
+ */
image2d<ntg::cplx<R, ntg::float_d> > transform()
{
fftwnd_one(this->p, this->in, this->out);
@@ -402,6 +557,11 @@
return this->trans_im;
}
+ /*!
+ ** \brief Compute and return the invert transform.
+ **
+ ** \param T1 Data type of output image.
+ */
template <class T1>
image2d<ntg::cplx<R, T1> > transform_inv()
{
@@ -424,6 +584,9 @@
return new_im;
}
+ /*!
+ ** \brief Compute and return the invert transform.
+ */
image2d<ntg::cplx<R, T> > transform_inv()
{
return transform_inv<T>();
Index: olena/oln/transforms/wavelet_coeffs.hh
--- olena/oln/transforms/wavelet_coeffs.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/i/34_wavelet_co 1.7 600)
+++ olena/oln/transforms/wavelet_coeffs.hh Tue, 16 Mar 2004 10:25:12 +0100 palma_g (oln/i/34_wavelet_co 1.7 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -39,11 +39,9 @@
namespace transforms {
- //
- // Haar wavelet coefficients
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief Haar wavelet coefficients
+ */
Wavelet_coeffs_definition(haar, ntg::float_d, 2)
{
const ntg::float_d sqrt_2 = sqrt(2);
@@ -55,11 +53,11 @@
};
- //
- // Daubechies wavelet coefficients
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Four coefficients version.
+ */
Wavelet_coeffs_definition(daub4, ntg::float_d, 4)
{
const ntg::float_d sqrt_3 = sqrt(3);
@@ -73,6 +71,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Six coefficients version.
+ */
Wavelet_coeffs_definition(daub6, ntg::float_d, 6)
{
Wavelet_coeffs_begin
@@ -85,6 +88,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Eight coefficients version.
+ */
Wavelet_coeffs_definition(daub8, ntg::float_d, 8)
{
Wavelet_coeffs_begin
@@ -99,6 +107,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Ten coefficients version.
+ */
Wavelet_coeffs_definition(daub10, ntg::float_d, 10)
{
Wavelet_coeffs_begin
@@ -115,6 +128,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Twelve coefficients version.
+ */
Wavelet_coeffs_definition(daub12, ntg::float_d, 12)
{
Wavelet_coeffs_begin
@@ -133,6 +151,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Daubechies wavelet coefficients
+ **
+ ** Twenty coefficients version.
+ */
Wavelet_coeffs_definition(daub20, ntg::float_d, 20)
{
Wavelet_coeffs_begin
@@ -160,11 +183,11 @@
};
- //
- // Coifman wavelet coefficients
- //
- //////////////////////////////////////
-
+ /*!
+ ** \brief Coifman wavelet coefficients
+ **
+ ** Six coefficients version.
+ */
Wavelet_coeffs_definition(coiflet2, ntg::float_d, 6)
{
const ntg::float_d sqrt_2 = sqrt(2);
@@ -180,6 +203,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Coifman wavelet coefficients
+ **
+ ** Twelve coefficients version.
+ */
Wavelet_coeffs_definition(coiflet4, ntg::float_d, 12)
{
Wavelet_coeffs_begin
@@ -198,6 +226,11 @@
Wavelet_coeffs_end
};
+ /*!
+ ** \brief Coifman wavelet coefficients
+ **
+ ** Eighteen coefficients version.
+ */
Wavelet_coeffs_definition(coiflet6, ntg::float_d, 18)
{
Wavelet_coeffs_begin
--
Giovanni Palma
EPITA - promo 2005 - membre d'EpX - LRDE
Mob. : +33 (0)6 60 97 31 74
2
2
Index: olena/ChangeLog
from Niels Van Vliet <niels(a)lrde.epita.fr>
* olena/oln/arith/internal/opdecls.hh: Clean doc.
* olena/oln/arith/ops.hh: Likewise.
* olena/oln/convert/conversion.hh: Likewise.
* olena/oln/convol/convolution.hh: Likewise.
* olena/oln/convol/fast_gaussian.hh: Likewise.
* olena/oln/convol/fast_gaussian.hxx: Likewise.
* olena/oln/core/abstract/dpoint.hh: Likewise.
* olena/oln/core/abstract/iter.hh: Likewise.
* olena/oln/level/cc.hh: Likewise.
* olena/oln/math/macros.hh: Likewise.
* olena/oln/morpho/extrema.hh: Likewise.
* olena/oln/morpho/extrema.hxx: Likewise.
* olena/oln/morpho/fast_morpho.hxx: Likewise.
* olena/oln/topo/dmap.hh: Likewise.
* olena/oln/utils/histogram.hh: Likewise.
* olena/oln/topo/tarjan/union.hh: Likewise.
* olena/oln/topo/inter-pixel/internal/dir.hh: Likewise.
* olena/oln/core/abstract/image.hh: Likewise.
* olena/oln/core/impl/image_array.hh: Likewise.
* olena/oln/convert/abstract/conversion.hh: Likewise.
* olena/oln/snakes/snakes_base.hh: Likewise.
* olena/oln/morpho/attributes.hh: Likewise.
* olena/oln/morpho/attribute_closing_opening_map.hh: Likewise.
Index: olena/oln/arith/internal/opdecls.hh
--- olena/oln/arith/internal/opdecls.hh Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/b/22_opdecls.hh 1.17 640)
+++ olena/oln/arith/internal/opdecls.hh Mon, 15 Mar 2004 15:41:45 +0100
van-vl_n (oln/b/22_opdecls.hh 1.18 640)
@@ -33,12 +33,10 @@
** Operations are defined between two images and between one image and
** one constant value (with the cst suffix).
** The two main components are:
-** \n
-** 1) Define functors for each operations, taking two values and
+** -# Define functors for each operations, taking two values and
** returning the result.
-**\n
-** 2) Define front-end functions applying a functor on the whole image.
-** 3 versions are defined, leaving the possibility to specify the
+** -# Define front-end functions applying a functor on the whole image.
+** -# Versions are defined, leaving the possibility to specify the
** return type automatically, manually or using a conversion (from
** convert).
**
Index: olena/oln/arith/ops.hh
--- olena/oln/arith/ops.hh Sat, 13 Mar 2004 17:58:18 +0100 van-vl_n
(oln/b/23_ops.hh 1.5.1.2.1.9 640)
+++ olena/oln/arith/ops.hh Mon, 15 Mar 2004 16:12:16 +0100 van-vl_n
(oln/b/23_ops.hh 1.5.1.2.1.10 640)
@@ -39,7 +39,7 @@
namespace oln {
/*!
- ** \brief Namespace for arithmetic.
+ ** \brief Arithmetic implementation.
*/
namespace arith {
Index: olena/oln/convert/conversion.hh
--- olena/oln/convert/conversion.hh Sat, 13 Mar 2004 17:45:05 +0100
van-vl_n (oln/21_conversion 1.17 640)
+++ olena/oln/convert/conversion.hh Mon, 15 Mar 2004 17:15:47 +0100
van-vl_n (oln/21_conversion 1.18 640)
@@ -37,7 +37,8 @@
namespace oln {
/*!
- ** \brief Namespace for conversion (for example cast, color, or
neighborhood to window).
+ ** \brief Conversion implementation (for example cast, color, or
+ ** neighborhood to window).
*/
namespace convert {
@@ -56,7 +57,7 @@
typedef typename abstract::conversion<ConvType, Base>::template
output<InputType>::ret ret;
};
- /// namespace internal, should not be used by end user.
+ /// \brief Internal purpose only.
namespace internal {
/*! Compose a conversion C and an adaptable unary function UF,
** producing an adaptable unary function.
Index: olena/oln/convol/convolution.hh
--- olena/oln/convol/convolution.hh Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/f/39_convolutio 1.4.1.4.1.6.1.2 640)
+++ olena/oln/convol/convolution.hh Mon, 15 Mar 2004 16:51:22 +0100
van-vl_n (oln/f/39_convolutio 1.4.1.4.1.6.1.3 640)
@@ -37,18 +37,11 @@
namespace oln {
- /*!
- ** \brief convolution namespace.
- **
- ** Set of algorithms related to convolution.
+ /*! \brief Algorithms related to convolution.
*/
namespace convol {
- /*!
- ** \brief oln::convol::slow namespace.
- **
- ** The algorithms you can find here are slow. This mean there are
- ** only basic applications of the definitions.
+ /*! \brief Convolution algorithms.
*/
namespace slow {
Index: olena/oln/convol/fast_gaussian.hh
--- olena/oln/convol/fast_gaussian.hh Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/26_fast_gauss 1.6.1.6.1.5 640)
+++ olena/oln/convol/fast_gaussian.hh Mon, 15 Mar 2004 16:08:49 +0100
van-vl_n (oln/26_fast_gauss 1.6.1.6.1.6 640)
@@ -41,10 +41,10 @@
namespace oln {
namespace convol {
/*!
- ** \brief oln::convol::fast namespace.
+ ** \brief Implementation of algorithms for large structuring elements.
**
** The algorithms you can find here are fast. This mean these ones
- ** are evolved versions.
+ ** are evolved versions for large structuring elements.
*/
namespace fast {
Index: olena/oln/convol/fast_gaussian.hxx
--- olena/oln/convol/fast_gaussian.hxx Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/25_fast_gauss 1.7.1.8.1.8 640)
+++ olena/oln/convol/fast_gaussian.hxx Mon, 15 Mar 2004 17:30:37 +0100
van-vl_n (oln/25_fast_gauss 1.7.1.8.1.9 640)
@@ -38,10 +38,7 @@
namespace oln {
namespace convol {
namespace fast {
- /*!
- ** \brief oln::convol::fast::internal namespace.
- **
- ** You can find here function used for fast algorithms.
+ /*! \brief Internal purpose only.
*/
namespace internal {
Index: olena/oln/core/abstract/dpoint.hh
--- olena/oln/core/abstract/dpoint.hh Thu, 11 Mar 2004 17:12:19 +0100
thivol_d (oln/d/28_dpoint.hh 1.19 640)
+++ olena/oln/core/abstract/dpoint.hh Mon, 15 Mar 2004 17:32:25 +0100
van-vl_n (oln/d/28_dpoint.hh 1.20 640)
@@ -247,11 +247,8 @@
} // end of abstract
- /*! \namespace oln::internal
- ** \brief internal namespace.
+ /*! \brief Internal purpose only.
*/
-
-
namespace internal
{
Index: olena/oln/core/abstract/iter.hh
--- olena/oln/core/abstract/iter.hh Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/c/40_iter.hh 1.19 640)
+++ olena/oln/core/abstract/iter.hh Mon, 15 Mar 2004 16:50:54 +0100
van-vl_n (oln/c/40_iter.hh 1.20 640)
@@ -36,9 +36,7 @@
namespace oln {
- /*!
- ** \namespace oln::abstract
- ** \brief oln::abstract namespace.
+ /*! \brief Abstract class implementation.
*/
namespace abstract {
template<class Exact>
@@ -136,7 +134,7 @@
** \endcode
**
** You can iterate not only image but windows. This example make a
binary
- ** dilatation to show you how use them:
+ ** dilatation to show you how to use them:
** \code
** #include <oln/basics2d.hh>
** #include <ntg/all.hh>
Index: olena/oln/level/cc.hh
--- olena/oln/level/cc.hh Mon, 15 Mar 2004 15:32:27 +0100 van-vl_n
(oln/e/20_cc.hh 1.11.1.13 640)
+++ olena/oln/level/cc.hh Mon, 15 Mar 2004 16:54:36 +0100 van-vl_n
(oln/e/20_cc.hh 1.11.1.14 640)
@@ -49,8 +49,7 @@
# include <mlc/is_a.hh>
namespace oln {
- /*! \namespace oln::level
- ** \brief level namespace.
+ /*! \brief Level algorithm implementation.
*/
namespace level {
Index: olena/oln/math/macros.hh
--- olena/oln/math/macros.hh Mon, 15 Mar 2004 15:32:27 +0100 van-vl_n
(oln/b/21_macros.hh 1.6.1.13 640)
+++ olena/oln/math/macros.hh Mon, 15 Mar 2004 16:55:15 +0100 van-vl_n
(oln/b/21_macros.hh 1.6.1.14 640)
@@ -33,7 +33,7 @@
namespace oln {
- /*! Useful functions.
+ /*! \brief Useful functions.
**
** \todo FIXME: I'm not proud of the code below
** think it could be better...
Index: olena/oln/morpho/extrema.hh
--- olena/oln/morpho/extrema.hh Fri, 12 Mar 2004 13:29:59 +0100 palma_g
(oln/38_extrema.hh 1.13 640)
+++ olena/oln/morpho/extrema.hh Mon, 15 Mar 2004 16:56:53 +0100 van-vl_n
(oln/38_extrema.hh 1.14 640)
@@ -35,29 +35,19 @@
namespace oln {
namespace morpho {
- /*!
- ** \brief oln::morpho::sure namespace.
- **
- ** Namespace where you can find reference algorithms, i.e. those
- ** that are sure.
+ /*! \brief Reference algorithm implementation: sure but slow.
*/
namespace sure {
# include <oln/morpho/extrema.hxx>
}
- /*!
- ** \brief oln::morpho::sequential namespace.
- **
- ** Namespace where you can find sequential algorithms.
+ /*! \brief Sequential algorithm implementation.
*/
namespace sequential {
# include <oln/morpho/extrema.hxx>
}
- /*!
- ** \brief oln::morpho::hybrid namespace.
- **
- ** Namespace where you can find hybrid algorithms.
+ /*! \brief Hybrid (sure and sequential) algorithm implementation.
*/
namespace hybrid {
# include <oln/morpho/extrema.hxx>
Index: olena/oln/morpho/extrema.hxx
--- olena/oln/morpho/extrema.hxx Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/j/4_extrema.hx 1.15 640)
+++ olena/oln/morpho/extrema.hxx Mon, 15 Mar 2004 16:28:44 +0100
van-vl_n (oln/j/4_extrema.hx 1.16 640)
@@ -26,7 +26,7 @@
// Public License.
/*!
-** \brief internal namespace
+** \brief Internal purpose only.
*/
namespace internal {
Index: olena/oln/morpho/fast_morpho.hxx
--- olena/oln/morpho/fast_morpho.hxx Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/45_fast_morph 1.20 640)
+++ olena/oln/morpho/fast_morpho.hxx Mon, 15 Mar 2004 17:14:49 +0100
van-vl_n (oln/45_fast_morph 1.21 640)
@@ -40,9 +40,7 @@
namespace oln {
namespace morpho {
- /*!
- ** \brief oln::morpho::internal namespace
- ** Internal stuff.
+ /*! \brief Internal purpose only.
*/
namespace internal {
Index: olena/oln/topo/dmap.hh
--- olena/oln/topo/dmap.hh Mon, 15 Mar 2004 15:32:27 +0100 van-vl_n
(oln/p/2_dmap.hh 1.10 640)
+++ olena/oln/topo/dmap.hh Mon, 15 Mar 2004 17:12:39 +0100 van-vl_n
(oln/p/2_dmap.hh 1.11 640)
@@ -44,7 +44,7 @@
namespace oln {
- /// Namespce topo.
+ /// \brief Topological algorithms.
namespace topo {
/*! Chamfer mask.
**
Index: olena/oln/utils/histogram.hh
--- olena/oln/utils/histogram.hh Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.8 640)
+++ olena/oln/utils/histogram.hh Mon, 15 Mar 2004 17:18:31 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.9 640)
@@ -39,10 +39,10 @@
# include <vector>
namespace oln {
- /// Namespace for utilities, such as statistic.
+ /// \brief Utilities, such as statistics.
namespace utils {
- /// Function within this namespace should not be used outside this
file.
+ /// \brief Internal purpose only.
namespace internal {
//! Return the size of the space needed to explore the type T.
template <typename T>
@@ -83,7 +83,7 @@
};
} // end of namespace internal
- /// Namespace for abstract utilities.
+ /// \brief Abstract utilities.
namespace abstract
{
/*! Abstract base class for historgram.
Index: olena/oln/morpho/attribute_closing_opening.hh
--- olena/oln/morpho/attribute_closing_opening.hh Sun, 14 Mar 2004
19:03:34 +0100 van-vl_n (oln/q/49_attribute_ 1.21 640)
+++ olena/oln/morpho/attribute_closing_opening.hh Mon, 15 Mar 2004
17:33:39 +0100 van-vl_n (oln/q/49_attribute_ 1.22 640)
@@ -32,24 +32,16 @@
namespace oln {
- /*! \namespace oln::morpho
- ** \brief oln::morpho namespace
+ /*! \brief Algorithm based on morphological mathematic.
*/
namespace morpho {
- /*!
- ** \brief oln::morpho::fast namespace
- **
- ** In this namespace, you will find fast algorithms, but with
intensive memory usage
+ /*! \brief Algorithm enhanced for large structuring elements.
*/
namespace fast {
- /*!
- ** \brief oln::morpho::fast::tarjan namespace
+ /*! \brief oln::morpho::tarjan implementation.
*/
namespace tarjan {
- /*!
- ** \brief oln::morpho::fast::tarjan::internal namespace
- **
- ** Internal usage only.
+ /*! \brief Internal purpose only.
*/
namespace internal {
Index: olena/oln/topo/tarjan/union.hh
--- olena/oln/topo/tarjan/union.hh Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/r/33_union.hh 1.10 640)
+++ olena/oln/topo/tarjan/union.hh Mon, 15 Mar 2004 16:59:55 +0100
van-vl_n (oln/r/33_union.hh 1.11 640)
@@ -35,7 +35,7 @@
namespace oln {
namespace topo {
- /// Namespace Tarjan
+ /// \brief FIXME: depreciated, use oln::morpho::tarjan
namespace tarjan {
struct empty_class
Index: olena/oln/topo/inter-pixel/node.hh
--- olena/oln/topo/inter-pixel/node.hh Sun, 14 Mar 2004 19:03:34 +0100
van-vl_n (oln/r/46_node.hh 1.6 640)
+++ olena/oln/topo/inter-pixel/node.hh Mon, 15 Mar 2004 16:37:40 +0100
van-vl_n (oln/r/46_node.hh 1.7 640)
@@ -33,7 +33,7 @@
namespace oln {
namespace topo {
- /// Namespace for inter pixel,
+ /// oln::topo::inter_pixel::interpixel implementation.
namespace inter_pixel {
/*! Inter pixel node.
**
Index: olena/oln/topo/inter-pixel/internal/dir.hh
--- olena/oln/topo/inter-pixel/internal/dir.hh Mon, 15 Mar 2004 15:32:27
+0100 van-vl_n (oln/r/48_dir.hh 1.4 640)
+++ olena/oln/topo/inter-pixel/internal/dir.hh Mon, 15 Mar 2004 17:15:24
+0100 van-vl_n (oln/r/48_dir.hh 1.5 640)
@@ -37,7 +37,7 @@
namespace topo {
namespace inter_pixel {
- /// oln::topo::inter_pixel Internal namespace.
+ /// \brief Internal purpose only.
namespace internal {
/// Provides the enum dir.
template<unsigned Dim>
Index: olena/oln/core/abstract/image.hh
--- olena/oln/core/abstract/image.hh Fri, 12 Mar 2004 20:17:58 +0100
thivol_d (oln/t/25_image.hh 1.25 640)
+++ olena/oln/core/abstract/image.hh Mon, 15 Mar 2004 15:54:27 +0100
van-vl_n (oln/t/25_image.hh 1.26 600)
@@ -37,10 +37,6 @@
namespace oln {
- /*! \namespace abstract
- ** \brief abstract namespace.
- */
-
namespace abstract {
// fwd_decl
Index: olena/oln/core/impl/image_array.hh
--- olena/oln/core/impl/image_array.hh Fri, 12 Mar 2004 20:17:58 +0100
thivol_d (oln/t/30_image_arra 1.15 640)
+++ olena/oln/core/impl/image_array.hh Mon, 15 Mar 2004 16:52:49 +0100
van-vl_n (oln/t/30_image_arra 1.16 600)
@@ -82,11 +82,8 @@
};
- /*! \namespace impl
- **
- ** \brief impl namespace.
+ /*! \brief Representation of the image in memory.
*/
-
namespace impl {
/*! \class image_array
Index: olena/oln/convert/abstract/conversion.hh
--- olena/oln/convert/abstract/conversion.hh Sat, 13 Mar 2004 17:45:05
+0100 van-vl_n (oln/u/31_conversion 1.5 640)
+++ olena/oln/convert/abstract/conversion.hh Mon, 15 Mar 2004 16:52:04
+0100 van-vl_n (oln/u/31_conversion 1.6 640)
@@ -35,7 +35,7 @@
namespace oln {
namespace convert {
/*!
- ** \brief Namespace oln::convert::abstract.
+ ** \brief Base classes for conversion.
*/
namespace abstract {
@@ -54,8 +54,7 @@
template<class Conv>
struct conversion_traits;
- /*!
- ** Namespace oln::convert::abstract::internal, for internal usage
only.
+ /*! \brief Internal purpose only.
*/
namespace internal {
/// Retrieve the result type of a conversion.
@@ -82,7 +81,7 @@
namespace abstract {
/*! Base class for conversion.
**
- ** \note If you write an class inherited from this one, you
+ ** \note If you write an class derived from this one, you
** must write the specialization of the output trait.
*/
template<class Exact, class Base>
Index: olena/oln/snakes/snakes_base.hh
--- olena/oln/snakes/snakes_base.hh Mon, 15 Mar 2004 15:32:27 +0100
van-vl_n (oln/f/50_snakes_bas 1.3 644)
+++ olena/oln/snakes/snakes_base.hh Mon, 15 Mar 2004 17:20:34 +0100
van-vl_n (oln/f/50_snakes_bas 1.4 644)
@@ -32,8 +32,7 @@
namespace oln {
- /*! \namespace oln::snakes
- ** Namespace snakes.
+ /*! \brief oln::snakes::snake implementation.
*/
namespace snakes {
/*! Snake algorithm.
Index: olena/oln/morpho/attributes.hh
--- olena/oln/morpho/attributes.hh Sun, 14 Mar 2004 19:03:34 +0100
van-vl_n (oln/j/45_attributes 1.8 644)
+++ olena/oln/morpho/attributes.hh Mon, 15 Mar 2004 16:58:28 +0100
van-vl_n (oln/j/45_attributes 1.9 644)
@@ -48,8 +48,7 @@
namespace oln {
namespace morpho {
- /*!
- ** \brief oln::morpho::tools namespace
+ /*! \brief Useful tools for morphological math.
*/
namespace tools {
Index: olena/oln/morpho/attribute_closing_opening_map.hh
--- olena/oln/morpho/attribute_closing_opening_map.hh Sun, 14 Mar 2004
18:21:09 +0100 palma_g (oln/j/49_attribute_ 1.7 600)
+++ olena/oln/morpho/attribute_closing_opening_map.hh Mon, 15 Mar 2004
16:57:32 +0100 van-vl_n (oln/j/49_attribute_ 1.8 600)
@@ -46,11 +46,8 @@
{
namespace morpho
{
- /*!
- ** \brief oln::morpho::slow namespace
- **
- ** In this namespace you will find algorithm slower than those you
- ** can find in oln::morpho::fast, but with less memory needs.
+ /*! \brief Algorithm that are slow (but need less memory), or that
are slow
+ ** if it is used with a large structuring element.
*/
namespace slow
{
2
1
from Niels Van Vliet <niels(a)lrde.epita.fr>
* olena/oln/arith/internal/opdecls.hh: Changed doxygen commands
"\{''|attention|warning|bug|note} FIXME" to "\todo FIXME", "\ref" to
"REF: ", "\file *.hh" to "\file oln/full/path/*.hh".
* olena/oln/convert/bound.hh: Likewise.
* olena/oln/convert/nrgbxyz.hh: Likewise.
* olena/oln/convert/rgbnrgb.hh: Likewise.
* olena/oln/convert/rgbxyz.hh: Likewise.
* olena/oln/convol/fast_gaussian.hxx: Likewise.
* olena/oln/level/cc.hh: Likewise.
* olena/oln/level/connected.hh: Likewise.
* olena/oln/level/invert.hh: Likewise.
* olena/oln/math/macros.hh: Likewise.
* olena/oln/morpho/extrema.hxx: Likewise.
* olena/oln/topo/dmap.hh: Likewise.
* olena/oln/topo/dmap.hh: Likewise.
* olena/oln/utils/copy.hh: Likewise.
* olena/oln/utils/histogram.hh: Likewise.
* olena/oln/morpho/attribute_union_find.hh: Likewise.
* olena/oln/topo/tarjan/union.hh: Likewise.
* olena/oln/topo/inter-pixel/inter-pixel.hh: Likewise.
* olena/oln/topo/tarjan/flat-zone.hh: Likewise.
* olena/oln/topo/combinatorial-map/cmap.hh: Likewise.
* olena/oln/topo/inter-pixel/fwd-dir-iter.hh: Likewise.
* olena/oln/topo/inter-pixel/bkd-dir-iter.hh: Likewise.
* olena/oln/topo/inter-pixel/internal/dir.hh: Likewise.
* olena/oln/topo/combinatorial-map/internal/anyfunc.hh: Likewise.
* olena/oln/convert/rgbhsv.hh: Likewise.
* olena/oln/convert/rgbhsl.hh: Likewise.
* olena/oln/convert/rgbhsi.hh: Likewise.
* olena/oln/convert/rgbyuv.hh: Likewise.
* olena/oln/convert/rgbyiq.hh: Likewise.
* olena/oln/snakes/snakes_base.hh: Likewise.
* olena/oln/snakes/node.hh: Likewise.
* olena/oln/snakes/segment.hh: Likewise.
+2004-03-14 Niels Van Vliet <niels(a)lrde.epita.fr>
* olena/oln/topo/dmap.hh: Correct comments.
* olena/oln/topo/tarjan/flat-zone.hh: Likewise.
Index: olena/oln/arith/internal/opdecls.hh
--- olena/oln/arith/internal/opdecls.hh Sat, 13 Mar 2004 17:58:18 +0100
van-vl_n (oln/b/22_opdecls.hh 1.16 640)
+++ olena/oln/arith/internal/opdecls.hh Mon, 15 Mar 2004 13:39:28 +0100
van-vl_n (oln/b/22_opdecls.hh 1.16 640)
@@ -28,7 +28,7 @@
#ifndef OLENA_ARITH_INTERNAL_OPDECLS_HH
# define OLENA_ARITH_INTERNAL_OPDECLS_HH
-/*! \file opdecls.hh
+/*! \file olena/oln/arith/internal/opdecls.hh
**
** Operations are defined between two images and between one image and
** one constant value (with the cst suffix).
Index: olena/oln/convert/bound.hh
--- olena/oln/convert/bound.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/22_bound.hh 1.11 640)
+++ olena/oln/convert/bound.hh Mon, 15 Mar 2004 13:48:54 +0100 van-vl_n
(oln/22_bound.hh 1.11 640)
@@ -37,7 +37,7 @@
/*! Like convert::force, but with saturation.
**
- ** \note FIXME: is this really useful with new types ?
+ ** \todo FIXME: is this really useful with new types ?
*/
template<class Output, class Exact = mlc::final>
struct bound : public abstract::conversion_to_type< Output,
typename mlc::exact_vt<bound<Output, Exact>, Exact>::ret >
Index: olena/oln/convert/nrgbxyz.hh
--- olena/oln/convert/nrgbxyz.hh Sun, 14 Mar 2004 19:03:34 +0100
van-vl_n (oln/16_nrgbxyz.hh 1.14 640)
+++ olena/oln/convert/nrgbxyz.hh Mon, 15 Mar 2004 13:36:36 +0100
van-vl_n (oln/16_nrgbxyz.hh 1.14 640)
@@ -37,9 +37,9 @@
# include <sstream>
-/*! \file nrgbxyz.hh
+/*! \file olena/oln/convert/nrgbxyz.hh
**
-** \ref The formulas used here come from ``Digital Image Processing
+** REF: The formulas used here come from ``Digital Image Processing
** Algorithms and Applications'', I. Pitas; Wiley-Interscience.
*/
Index: olena/oln/convert/rgbnrgb.hh
--- olena/oln/convert/rgbnrgb.hh Sat, 13 Mar 2004 17:45:05 +0100
van-vl_n (oln/17_rgbnrgb.hh 1.12 640)
+++ olena/oln/convert/rgbnrgb.hh Mon, 15 Mar 2004 13:37:10 +0100
van-vl_n (oln/17_rgbnrgb.hh 1.12 640)
@@ -37,8 +37,9 @@
# include <sstream>
-/*! \file rgbnrgb.hh
-** \ref The formulas used here come from ``Digital Image Processing
+/*! \file olena/oln/convert/rgbnrgb.hh
+**
+** REF: The formulas used here come from ``Digital Image Processing
** Algorithms and Applications'', I. Pitas; Wiley-Interscience.
*/
Index: olena/oln/convert/rgbxyz.hh
--- olena/oln/convert/rgbxyz.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/19_rgbxyz.hh 1.13 640)
+++ olena/oln/convert/rgbxyz.hh Mon, 15 Mar 2004 13:37:25 +0100 van-vl_n
(oln/19_rgbxyz.hh 1.13 640)
@@ -37,9 +37,9 @@
# include <sstream>
-/*! \file rgbxyz.hh
+/*! \file olena/oln/convert/rgbxyz.hh
**
-** \ref The formulas used here come from ``Digital Image Processing
+** REF: The formulas used here come from ``Digital Image Processing
** Algorithms and Applications'', I. Pitas; Wiley-Interscience.
*/
Index: olena/oln/convol/fast_gaussian.hxx
--- olena/oln/convol/fast_gaussian.hxx Sun, 14 Mar 2004 18:21:09 +0100
palma_g (oln/25_fast_gauss 1.7.1.8.1.7 640)
+++ olena/oln/convol/fast_gaussian.hxx Mon, 15 Mar 2004 13:43:59 +0100
van-vl_n (oln/25_fast_gauss 1.7.1.8.1.7 640)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development
Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development
Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -49,7 +49,8 @@
** \brief Recursive filter.
**
** Recursive filter, works on a line.
- ** FIXME: Until something clever is designed, the line is
+ **
+ ** \todo FIXME: Until something clever is designed, the line is
** defined by two points (START and FINISH) and a displacement
** dpoint (D).
**
Index: olena/oln/level/cc.hh
--- olena/oln/level/cc.hh Sun, 14 Mar 2004 19:03:34 +0100 van-vl_n
(oln/e/20_cc.hh 1.11.1.12 640)
+++ olena/oln/level/cc.hh Mon, 15 Mar 2004 13:33:21 +0100 van-vl_n
(oln/e/20_cc.hh 1.11.1.12 640)
@@ -63,7 +63,7 @@
** It removes the small (in area) connected components of the upper
** level sets of \a input using \a se as structural element.
**
- ** \ref The implementation uses front propagation.
+ ** REF: The implementation uses front propagation.
**
** \pre the input must be a binary image.
**
Index: olena/oln/level/connected.hh
--- olena/oln/level/connected.hh Thu, 11 Mar 2004 16:11:20 +0100
van-vl_n (oln/30_connected. 1.9.1.12 640)
+++ olena/oln/level/connected.hh Mon, 15 Mar 2004 13:33:30 +0100
van-vl_n (oln/30_connected. 1.9.1.12 640)
@@ -48,7 +48,7 @@
** It removes the small (in area) connected components of the upper
** level sets of \var{input} using \var{se} as structural element.
**
- ** \ref The implementation comes from Cocquerez et Philipp, Analyse
+ ** REF: The implementation comes from Cocquerez et Philipp, Analyse
** d'images, filtrages et segmentations p.62.
**
** \see level::frontp_connected_component
Index: olena/oln/level/invert.hh
--- olena/oln/level/invert.hh Thu, 11 Mar 2004 16:11:20 +0100 van-vl_n
(oln/33_invert.hh 1.5.2.2.1.11 640)
+++ olena/oln/level/invert.hh Mon, 15 Mar 2004 13:44:27 +0100 van-vl_n
(oln/33_invert.hh 1.5.2.2.1.11 640)
@@ -42,7 +42,7 @@
/*! \brief Fctor to invert a value
**
** \see invert.
- ** \note FIXME: the specialisation is done within the class.
+ ** \todo FIXME: the specialisation is done within the class.
*/
template<class T>
struct f_invert : public std::unary_function<const ntg::value<T>&, T>
Index: olena/oln/math/macros.hh
--- olena/oln/math/macros.hh Sat, 13 Mar 2004 17:58:18 +0100 van-vl_n
(oln/b/21_macros.hh 1.6.1.12 640)
+++ olena/oln/math/macros.hh Mon, 15 Mar 2004 13:49:12 +0100 van-vl_n
(oln/b/21_macros.hh 1.6.1.12 640)
@@ -33,10 +33,9 @@
namespace oln {
- /*! \namespace oln:math
- ** useful functions.
+ /*! Useful functions.
**
- ** \note FIXME: I'm not proud of the code below
+ ** \todo FIXME: I'm not proud of the code below
** think it could be better...
**
** \todo FIXME: this code sounds really odd. Why does the operator()
Index: olena/oln/morpho/extrema.hxx
--- olena/oln/morpho/extrema.hxx Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/j/4_extrema.hx 1.14 640)
+++ olena/oln/morpho/extrema.hxx Mon, 15 Mar 2004 13:34:25 +0100
van-vl_n (oln/j/4_extrema.hx 1.14 640)
@@ -93,7 +93,6 @@
** \arg minima_map Minima map image.
** \arg Ng Neighborhood to use.
**
-** \ref foototo
** \code
** #include <oln/basics2d.hh>
** #include <oln/morpho/extrema.hh>
Index: olena/oln/topo/dmap.hh
--- olena/oln/topo/dmap.hh Sun, 14 Mar 2004 22:48:21 +0100 van-vl_n
(oln/p/2_dmap.hh 1.9 640)
+++ olena/oln/topo/dmap.hh Mon, 15 Mar 2004 13:47:34 +0100 van-vl_n
(oln/p/2_dmap.hh 1.9 640)
@@ -32,13 +32,13 @@
# include <oln/basics2d.hh>
# include <oln/core/w_window2d.hh>
-// FIXME: math.h should be included by ntg/config/system.hh
+// \todo FIXME: math.h should be included by ntg/config/system.hh
// # include <math.h>
# include <utility>
-/*! \file dmap.hh
+/*! \file olena/oln/topo/dmap.hh
**
-** \ref B.J.H. Verwer, Local distances for distance transformations
+** REF: B.J.H. Verwer, Local distances for distance transformations
** in two and three dimensions, Pattern Recognition Letters 12 (1991)
671-682
*/
@@ -68,7 +68,7 @@
/*! Produce a chamfer mask 3x3
**
- ** \bug FIXME: This highly not thread safe !
+ ** \todo FIXME: This highly not thread safe !
**
** \verbatim
** Example of oln::topo::mk_chamfer_3x3<1,2>(3) w;
@@ -90,7 +90,7 @@
/*! Produce a chamfer mask 3x3
**
- ** \bug FIXME: This highly not thread safe !
+ ** \todo FIXME: This highly not thread safe !
**
** \verbatim
** Example of oln::topo::mk_chamfer_3x3(1.5, 2.5) w;
Index: olena/oln/utils/copy.hh
--- olena/oln/utils/copy.hh Sat, 13 Mar 2004 21:28:08 +0100 van-vl_n
(oln/i/29_copy.hh 1.8 640)
+++ olena/oln/utils/copy.hh Mon, 15 Mar 2004 13:39:05 +0100 van-vl_n
(oln/i/29_copy.hh 1.8 640)
@@ -28,7 +28,7 @@
#ifndef OLENA_UTILS_COPY_HH
# define OLENA_UTILS_COPY_HH
-/* \file copy.hh
+/* \file olena/oln/utils/copy.hh
**
** \warning This file contains implementations of image's copy
constructors.
**\verbatim
Index: olena/oln/utils/histogram.hh
--- olena/oln/utils/histogram.hh Sat, 13 Mar 2004 21:28:08 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.7 640)
+++ olena/oln/utils/histogram.hh Mon, 15 Mar 2004 13:47:46 +0100
van-vl_n (oln/10_histogram. 1.6.1.14.1.7 640)
@@ -137,7 +137,7 @@
** number of occurrences in an image1d; an image<rgb_8> will store the
** number of occurrences an image3d (because rgb_8 has 3 components).
**
- ** \note FIXME: An image is inside the histogram. This is incorrect
+ ** \todo FIXME: An image is inside the histogram. This is incorrect
** because it is not exactly an image (we do not need any border).
**
** \param T Type of the image.
Index: olena/oln/morpho/attribute_union_find.hh
--- olena/oln/morpho/attribute_union_find.hh Sun, 14 Mar 2004 19:03:34
+0100 van-vl_n (oln/q/50_attribute_ 1.17 640)
+++ olena/oln/morpho/attribute_union_find.hh Mon, 15 Mar 2004 13:45:19
+0100 van-vl_n (oln/q/50_attribute_ 1.17 640)
@@ -49,7 +49,7 @@
** \param ATTRIBUTE Exact type of attribute to use.
** \param Env Type of environment to use.
**
- ** \note FIXME: a similar class is defined in oln/topo/tarjan/union.hh
+ ** \todo FIXME: a similar class is defined in oln/topo/tarjan/union.hh
** (oln::topo::tarjan::tarjan_set).
*/
template<class T, class ATTRIBUTE, class Env = attr_env_type(ATTRIBUTE)>
Index: olena/oln/topo/tarjan/union.hh
--- olena/oln/topo/tarjan/union.hh Sun, 14 Mar 2004 18:15:46 +0100
van-vl_n (oln/r/33_union.hh 1.9 640)
+++ olena/oln/topo/tarjan/union.hh Mon, 15 Mar 2004 13:41:41 +0100
van-vl_n (oln/r/33_union.hh 1.9 640)
@@ -43,7 +43,7 @@
/*! Tarjan set.
**
- ** \attention FIXME: a similar class is defined in
+ ** \todo FIXME: a similar class is defined in
** oln/morpho/attribute_union_find.hh
(oln::morpho::tarjan::tarjan_set).
** The one in morpho is more general. I think that this class should
** be removed.
Index: olena/oln/topo/inter-pixel/inter-pixel.hh
--- olena/oln/topo/inter-pixel/inter-pixel.hh Sun, 14 Mar 2004 19:03:34
+0100 van-vl_n (oln/r/34_inter-pixe 1.14 640)
+++ olena/oln/topo/inter-pixel/inter-pixel.hh Mon, 15 Mar 2004 13:49:42
+0100 van-vl_n (oln/r/34_inter-pixe 1.14 640)
@@ -105,14 +105,14 @@
}
}
- /// FIXME: add doc.
+ /// \todo FIXME: add doc.
const node_type&
operator[](const point_type & p) const
{
return data_[p];
}
- /*! FIXME: add doc.
+ /*! \todo FIXME: add doc.
**
** \pre precondition(data_[in.first].get(in.second) == true)
*/
Index: olena/oln/topo/tarjan/flat-zone.hh
--- olena/oln/topo/tarjan/flat-zone.hh Sun, 14 Mar 2004 22:48:21 +0100
van-vl_n (oln/r/35_flat-zone. 1.11 640)
+++ olena/oln/topo/tarjan/flat-zone.hh Mon, 15 Mar 2004 13:54:17 +0100
van-vl_n (oln/r/35_flat-zone. 1.11 640)
@@ -57,11 +57,11 @@
** IMG_OUT "oln_topo_flat_zone.pgm");
** }
** \endcode
- ** \image html test-cmap_pgm.png width=6cm
- ** \image latex test-cmap_pgm.png width=6cm
+ ** \image html test-cmap_pgm.png "input image" width=6cm
+ ** \image latex test-cmap_pgm.png "input image" width=6cm
** =>
- ** \image html oln_topo_flat_zone.png width=6cm
- ** \image latex oln_topo_flat_zone.png width=6cm
+ ** \image html oln_topo_flat_zone.png "output image" width=6cm
+ ** \image latex oln_topo_flat_zone.png "output image" width=6cm
*/
template <class I>
struct flat_zone
Index: olena/oln/topo/combinatorial-map/cmap.hh
--- olena/oln/topo/combinatorial-map/cmap.hh Sun, 14 Mar 2004 18:15:46
+0100 van-vl_n (oln/r/36_cmap.hh 1.12 640)
+++ olena/oln/topo/combinatorial-map/cmap.hh Mon, 15 Mar 2004 13:41:57
+0100 van-vl_n (oln/r/36_cmap.hh 1.12 640)
@@ -37,9 +37,9 @@
# include <algorithm>
# include <iterator>
-/*! \file cmap.hh
+/*! \file olena/oln/topo/combinatorial-map/cmap.hh
**
-** \attention FIXME: There is some problems in the directory
topo/combinatorial-map/,
+** \todo FIXME: There is some problems in the directory
topo/combinatorial-map/,
** such as non static functions, or the redefinition of the class any.\n
** FIXME: The documentation is not good enough.\n
** FIXME: Real test are missing.
@@ -54,7 +54,7 @@
/*! Combinatorial map.
**
- ** \ref Braquelaire, J. P. and Brun, L. Image Segmentation with
+ ** REF: Braquelaire, J. P. and Brun, L. Image Segmentation with
** Topological Maps and Inter-pixel Representation}, Journal of
** Visual Communication and Image representation, 1998, vol. 9
*/
Index: olena/oln/topo/inter-pixel/fwd-dir-iter.hh
--- olena/oln/topo/inter-pixel/fwd-dir-iter.hh Sun, 14 Mar 2004 18:15:46
+0100 van-vl_n (oln/r/44_fwd-dir-it 1.5 640)
+++ olena/oln/topo/inter-pixel/fwd-dir-iter.hh Mon, 15 Mar 2004 13:46:14
+0100 van-vl_n (oln/r/44_fwd-dir-it 1.5 640)
@@ -69,7 +69,7 @@
/*! Assignment.
**
- ** \bug FIXME: I am not sure that this respect the new paradigm.
+ ** \todo FIXME: I am not sure that this respect the new paradigm.
*/
template<class U>
U
Index: olena/oln/topo/inter-pixel/bkd-dir-iter.hh
--- olena/oln/topo/inter-pixel/bkd-dir-iter.hh Sun, 14 Mar 2004 18:15:46
+0100 van-vl_n (oln/r/45_bkd-dir-it 1.5 640)
+++ olena/oln/topo/inter-pixel/bkd-dir-iter.hh Mon, 15 Mar 2004 13:50:14
+0100 van-vl_n (oln/r/45_bkd-dir-it 1.5 640)
@@ -67,7 +67,7 @@
/*! Assignment.
**
- ** \bug FIXME: I am not sure that this respect the new paradigm.
+ ** \todo FIXME: I am not sure that this respect the new paradigm.
*/
template<class U>
U
Index: olena/oln/topo/inter-pixel/internal/dir.hh
--- olena/oln/topo/inter-pixel/internal/dir.hh Sun, 14 Mar 2004 18:15:46
+0100 van-vl_n (oln/r/48_dir.hh 1.3 640)
+++ olena/oln/topo/inter-pixel/internal/dir.hh Mon, 15 Mar 2004 13:45:43
+0100 van-vl_n (oln/r/48_dir.hh 1.3 640)
@@ -79,7 +79,7 @@
/*! Opposit direction.
**
- ** \note FIXME: no modulus.
+ ** \todo FIXME: no modulus.
*/
static ret
opposite(ret i)
Index: olena/oln/topo/combinatorial-map/internal/anyfunc.hh
--- olena/oln/topo/combinatorial-map/internal/anyfunc.hh Sun, 14 Mar
2004 18:15:46 +0100 van-vl_n (oln/v/3_anyfunc.hh 1.3 600)
+++ olena/oln/topo/combinatorial-map/internal/anyfunc.hh Mon, 15 Mar
2004 13:46:59 +0100 van-vl_n (oln/v/3_anyfunc.hh 1.3 600)
@@ -42,7 +42,7 @@
/*! any
**
- ** \deprecated FIXME: totally obsolete.
+ ** \todo FIXME: totally obsolete.
*/
template <class Inf>
class any
@@ -55,7 +55,7 @@
/*! Function stored in a vector.
**
**
- ** \warning FIXME: It has nothing to do there.
+ ** \todo FIXME: It has nothing to do there.
*/
template <class U, class V, class Inf>
class anyfunc : public any<Inf>
Index: olena/oln/convert/rgbhsv.hh
--- olena/oln/convert/rgbhsv.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/j/35_rgbhsv.hh 1.2 644)
+++ olena/oln/convert/rgbhsv.hh Mon, 15 Mar 2004 13:37:02 +0100 van-vl_n
(oln/j/35_rgbhsv.hh 1.2 644)
@@ -40,8 +40,8 @@
# include <sstream>
-/*! \file rgbhsv.hh
-** \ref The formulas used here come from ``Color Conversion Algorithms''
+/*! \file olena/oln/convert/rgbhsv.hh
+** REF: The formulas used here come from ``Color Conversion Algorithms''
*/
namespace oln {
Index: olena/oln/convert/rgbhsl.hh
--- olena/oln/convert/rgbhsl.hh Sun, 14 Mar 2004 18:21:09 +0100 palma_g
(oln/j/36_rgbhsl.hh 1.3 644)
+++ olena/oln/convert/rgbhsl.hh Mon, 15 Mar 2004 13:39:55 +0100 van-vl_n
(oln/j/36_rgbhsl.hh 1.3 644)
@@ -41,9 +41,9 @@
# include <cstdlib>
# include <sstream>
-/*! \file rgbhsl.hh
+/*! \file olena/oln/convert/rgbhsl.hh
**
-** \ref The formulas used here come from ``Color space conversion''; Paul
+** REF: The formulas used here come from ``Color space conversion''; Paul
** Bourke.
*/
namespace oln {
Index: olena/oln/convert/rgbhsi.hh
--- olena/oln/convert/rgbhsi.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/j/37_rgbhsi.hh 1.2 644)
+++ olena/oln/convert/rgbhsi.hh Mon, 15 Mar 2004 13:36:53 +0100 van-vl_n
(oln/j/37_rgbhsi.hh 1.2 644)
@@ -37,9 +37,9 @@
# include <sstream>
-/*! \file rgbhsi.hh
+/*! \file olena/oln/convert/rgbhsi.hh
**
-** \ref The formulas used here come from ``Digital Image Processing
+** REF: The formulas used here come from ``Digital Image Processing
** Algorithms and Applications'', I. Pitas; Wiley-Interscience.
*/
Index: olena/oln/convert/rgbyuv.hh
--- olena/oln/convert/rgbyuv.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/j/38_rgbyuv.hh 1.2 644)
+++ olena/oln/convert/rgbyuv.hh Mon, 15 Mar 2004 13:37:43 +0100 van-vl_n
(oln/j/38_rgbyuv.hh 1.2 644)
@@ -37,9 +37,9 @@
# include <sstream>
-/*!\file rgbyuv.hh
+/*!\file olena/oln/convert/rgbyuv.hh
**
-** \ref The formulas used here come from ``Colour Space Conversions'',
+** REF: The formulas used here come from ``Colour Space Conversions'',
** IAdrian Ford and Alan Roberts; August 11,1998.
*/
namespace oln {
Index: olena/oln/convert/rgbyiq.hh
--- olena/oln/convert/rgbyiq.hh Sat, 13 Mar 2004 17:45:05 +0100 van-vl_n
(oln/j/39_rgbyiq.hh 1.2 644)
+++ olena/oln/convert/rgbyiq.hh Mon, 15 Mar 2004 13:37:34 +0100 van-vl_n
(oln/j/39_rgbyiq.hh 1.2 644)
@@ -37,9 +37,9 @@
# include <sstream>
-/*! \file rgbyiq.hh
+/*! \file olena/oln/convert/rgbyiq.hh
**
-** \ref The formulas used here come from ``Digital Image Processing
+** REF: The formulas used here come from ``Digital Image Processing
** Algorithms and Applications'', I. Pitas; Wiley-Interscience.
*/
namespace oln {
Index: olena/oln/snakes/snakes_base.hh
--- olena/oln/snakes/snakes_base.hh Thu, 11 Mar 2004 15:41:55 +0100
van-vl_n (oln/f/50_snakes_bas 1.2 644)
+++ olena/oln/snakes/snakes_base.hh Mon, 15 Mar 2004 13:48:14 +0100
van-vl_n (oln/f/50_snakes_bas 1.2 644)
@@ -38,7 +38,7 @@
namespace snakes {
/*! Snake algorithm.
**
- ** \attention FIXME: Do not work due to the function node::energy.
+ ** \todo FIXME: Do not work due to the function node::energy.
** \todo FIXME: Add doc & test.
*/
template <class algorithm>
@@ -64,7 +64,7 @@
ntg::float_s
energy(void) const;
///< Return the snake energy. This is not algorithm-dependant.
- ///< \attention FIXME: Do not work due to the function node::energy
+ ///< \todo FIXME: Do not work due to the function node::energy
public:
int
Index: olena/oln/snakes/node.hh
--- olena/oln/snakes/node.hh Thu, 11 Mar 2004 15:41:55 +0100 van-vl_n
(oln/j/32_node.hh 1.2 644)
+++ olena/oln/snakes/node.hh Mon, 15 Mar 2004 13:48:24 +0100 van-vl_n
(oln/j/32_node.hh 1.2 644)
@@ -36,7 +36,7 @@
/*! A node is a point used in ring.
**
- ** \attention FIXME: Do not work due to the function energy.
+ ** \todo FIXME: Do not work due to the function energy.
*/
template<class I>
class node : public I::point_type
@@ -54,7 +54,7 @@
public:
/*! Return the energy
**
- ** FIXME: not implemented, do not work
+ ** \todo FIXME: not implemented, do not work
*/
inline
ntg::float_s
Index: olena/oln/snakes/segment.hh
--- olena/oln/snakes/segment.hh Thu, 11 Mar 2004 15:41:55 +0100 van-vl_n
(oln/j/34_segment.hh 1.2 644)
+++ olena/oln/snakes/segment.hh Mon, 15 Mar 2004 13:42:29 +0100 van-vl_n
(oln/j/34_segment.hh 1.2 644)
@@ -39,7 +39,7 @@
/*! A segment is a list of node.
**
- ** \attention FIXME: Do not work due to the function node::energy.
+ ** \todo FIXME: Do not work due to the function node::energy.
*/
template <class I>
class segment
2
1
Index: olena/ChangeLog
from Damien Thivolle <damien(a)lrde.epita.fr>
* olena/oln/core/apply.hh: Correct comments.
* olena/oln/core/compose.hh: Correct comments.
* olena/oln/io/file.hh: Add comments.
* olena/oln/io/gz.hh: Likewise.
* olena/oln/io/gz_stream.hh: Likewise.
* olena/oln/io/pnm_read_3d.hh: Likewise.
* olena/oln/io/pnm_read.hh: Likewise.
* olena/oln/io/pnm_write_3d.hh: Likewise.
* olena/oln/io/pnm_write.hh: Likewise.
* olena/oln/io/pnm_common.hh: Likewise.
* olena/oln/io/stream_wrapper.hh: Likewise.
* olena/oln/io/pnm_read_data.hh: Likewise.
* olena/oln/io/pnm_write_data.hh: Likewise.
* olena/oln/io/pnm_read_2d.hh: Likewise.
* olena/oln/io/pnm_write_2d.hh: Likewise.
Index: olena/oln/core/apply.hh
--- olena/oln/core/apply.hh Fri, 12 Mar 2004 20:17:58 +0100 thivol_d (oln/d/39_apply.hh 1.15 600)
+++ olena/oln/core/apply.hh Mon, 15 Mar 2004 18:57:19 +0100 thivol_d (oln/d/39_apply.hh 1.15 600)
@@ -40,9 +40,36 @@
| Unary |
`------*/
- /*! \brief Standard unary \a apply procedure. Apply function f to each
- ** element of input.
+ /*! \brief Standard unary \a apply procedure. Apply a function \a f to each
+ ** element of \a input.
+ **
+ ** Sample of code : Threshold the value of the image.
+ **
+ ** \code
+ ** #include <oln/basics2d.hh>
+ ** #include <oln/level/threshold.hh>
+ ** #include <ntg/all.hh>
+ ** using namespace ntg;
+ ** int main()
+ ** {
+ ** oln::image2d<int_u8> in = oln::load(IMG_IN "lena256.pgm");
+ ** int_u8 th = 127;
+ ** rgb_8 low = rgb_8(100, 0, 0);
+ ** rgb_8 height = rgb_8(0, 200, 255);
+ **
+ ** oln::image2d<rgb_8> out
+ ** = apply(oln::level::threshold<int_u8, rgb_8 >(th, low, height),
+ ** in);
+ ** save(out, IMG_OUT "oln_level_threshold.ppm");
+ ** }
+ ** \endcode
+ ** \image html lena256_pgm.png
+ ** \image latex lena256_pgm.png
+ ** =>
+ ** \image html oln_level_threshold.png
+ ** \image latex oln_level_threshold.png
*/
+
template<class AdaptableUnaryFun, class I> inline
typename mute<I, typename AdaptableUnaryFun::result_type>::ret
apply(AdaptableUnaryFun f, const abstract::image<I>& input)
@@ -55,9 +82,9 @@
}
- /*! \brief Standard unary \a apply procedure. Apply function f to each
- ** element of input, the function is passed as a type
- ** and we build it ourself.
+ /*! \brief Standard unary \a apply procedure. Apply a function \a f to each
+ ** element of \a input, the function is passed as a type
+ ** and is instantiated.
*/
template<class AdaptableUnaryFun, class I> inline
typename mute<I, typename AdaptableUnaryFun::result_type>::ret
@@ -67,10 +94,10 @@
}
- /*! \brief Standard unary \a apply procedure. Apply function f to each
- ** element of input, the function is passed as a type
- ** and we build it ourself. For template functions passed as template-id,
- ** we need to instantiate the function for the type of the abstract::image.
+ /*! \brief Standard unary \a apply procedure. Apply function \a f to each
+ ** element of \a input, the function is passed as a type
+ ** and is instantiated. For template functions passed as template-id,
+ ** one need to instantiate the function for the type of the abstract::image.
*/
template<template<class> class AdaptableUnaryFun,
class I> inline
@@ -91,8 +118,8 @@
** \todo FIXME: Don't we want to name these functions 'apply()' too?
*/
- /*! \brief Standard binary \a apply procedure. Apply function f to each
- ** element of input1 and input2.
+ /*! \brief Standard binary \a apply procedure. Apply function \a f to each
+ ** element of \a input1 and \a input2.
**
** \todo FIXME: Don't we want to name these functions 'apply()' too?
*/
@@ -110,9 +137,9 @@
}
- /*! \brief Standard binary \a apply procedure. Apply function f to each
- ** element of input1 and input2. The function is passed as a type
- ** and we build it ourself.
+ /*! \brief Standard binary \a apply procedure. Apply function \a f to each
+ ** element of \a input1 and \a input2. The function is passed as a type
+ ** and is instantiated.
**
** \todo FIXME: Don't we want to name these functions 'apply()' too?
*/
@@ -123,10 +150,10 @@
return apply2(AdaptableBinaryFun(), input1, input2);
}
- /*! \brief Standard binary \a apply procedure. Apply function f to each
- ** element of input1 and input2. The function is passed as a type
- ** and we build it ourself. For template functions passed as template-id,
- ** we need to instantiate the function for the type of the
+ /*! \brief Standard binary \a apply procedure. Apply function \a f to each
+ ** element of \a input1 and \a input2. The function is passed as a type
+ ** and is instantiated. For template functions passed as template-id,
+ ** one need to instantiate the function for the type of the
** abstract::images.
**
** \todo FIXME: Don't we want to name these functions 'apply()' too?
@@ -143,14 +170,13 @@
}
- /*! \brief Standard binary \a apply procedure. Apply function f to each
- ** element of input1 and input2. The function is passed as a type
- ** and we build it ourself. For template functions passed as template-id,
- ** we need to instantiate the function for the type of the
+ /*! \brief Standard binary \a apply procedure. Apply function \a f to each
+ ** element of \a input1 and \a input2. The function is passed as a type
+ ** and is instantiated. For template functions passed as template-id,
+ ** one need to instantiate the function for the type of the
** abstract::images.
**
** \todo FIXME: Don't we want to name these functions 'apply()' too?\n
- ** FIXME: Workaround for g++-2.95 bug.
*/
template<template <class> class AdaptableBinaryFun,
class I> inline
@@ -168,9 +194,9 @@
| self unary |
`-----------*/
- /*! \brief Main apply_self() function. Note we require a UnaryFun only,
- ** not a AdaptableUnaryFunc, because as we overwrite an abstract::image
- ** we already know the output type.
+ /*! \brief Main \a apply_self() function. Note only a UnaryFun is required,
+ ** not a AdaptableUnaryFunc, because as an abstract::image is overwritten,
+ ** the output type is already known.
*/
template<class UnaryFun, class I> inline
abstract::image<I>& apply_self(UnaryFun f, abstract::image<I>& input)
@@ -181,9 +207,9 @@
}
- /*! \brief Main apply_self() function. Note we require a UnaryFun only,
- ** not a AdaptableUnaryFunc, because as we overwrite an abstract::image
- ** we already know the output type. We instantiate the function ourself.
+ /*! \brief Only a UnaryFun is required,
+ ** not a AdaptableUnaryFunc, because as an abstract::image is overwritten,
+ ** the output type is already known. The function is instantiated.
*/
template<class UnaryFun, class I> inline
abstract::image<I>& apply_self(abstract::image<I>& input)
@@ -192,11 +218,9 @@
}
- /*! \brief Main apply_self() function. Note we require a UnaryFun only,
- ** not a AdaptableUnaryFunc, because as we overwrite an abstract::image
- ** we already know the output type. We instantiate the function ourself.
- **
- ** \todo FIXME: Workaround for g++-2.95 bug.
+ /*! \brief Only a UnaryFun is required,
+ ** not a AdaptableUnaryFunc, because as an abstract::image is overwritten,
+ ** the output type is already know. The function is instantiated.
*/
template<template<class> class UnaryFun, class I> inline
abstract::image<I>& apply_self(abstract::image<I>& input)
@@ -211,7 +235,7 @@
| self binary |
`------------*/
- /*! \brief Main apply2_exact() function.
+ /*! \brief Main \a apply2_exact() function.
**
** \see apply_self()
*/
@@ -226,7 +250,7 @@
}
- /*! \brief We instantiate the function ourself.
+ /*! \brief The function is instantiated.
**
** \see apply_self()
*/
@@ -237,10 +261,8 @@
}
- /*! \brief If the function is passed as a template-id, we
- ** Instantiate it for the type of the input elements.
- **
- ** \todo FIXME: Workaround for g++-2.95 bug.
+ /*! \brief If the function is passed as a template-id, it is
+ ** instantiated for the type of the input elements.
**
** \see apply_self()
*/
@@ -253,9 +275,7 @@
}
- /*! apply2_self() if I1==I2 and the UnaryFun has only one parameter.
- **
- ** \todo FIXME: Workaround for g++-2.95 bug.
+ /*! \brief If \a I1 == \a I2 and the UnaryFun has only one parameter.
**
** \see apply_self()
*/
Index: olena/oln/core/compose.hh
--- olena/oln/core/compose.hh Fri, 12 Mar 2004 20:17:58 +0100 thivol_d (oln/c/22_compose.hh 1.6 600)
+++ olena/oln/core/compose.hh Mon, 15 Mar 2004 14:03:43 +0100 thivol_d (oln/c/22_compose.hh 1.6 600)
@@ -37,7 +37,7 @@
/*! \class compose_uu_
**
** The operator () of this class performs a composition between
- ** two unary functors F1 & F2.
+ ** two unary functors \a F1 & \a F2.
*/
template< class F1, class F2 >
@@ -65,7 +65,7 @@
/*! \class compose_ub_
**
** The operator () of this class performs a composition between
- ** an unary functor F1 and a binary functor F2.
+ ** a unary functor \a F1 and a binary functor \a F2.
*/
@@ -96,7 +96,7 @@
/*! \class compose_bu_
**
** The operator () of this class performs a composition between
- ** a binary functor F1 and an unary functor F2.
+ ** a binary functor \a F1 and an unary functor \a F2.
*/
template< class F1, class F2 >
@@ -126,7 +126,7 @@
}
- /// Compose two unary functors F1 & F2.
+ /// Compose two unary functors \a F1 & \a F2.
template<class UF1, class UF2>
internal::compose_uu_<UF1, UF2>
compose_uu(const UF1& f1, const UF2& f2)
@@ -134,7 +134,7 @@
return internal::compose_uu_<UF1, UF2>(f1, f2);
}
- /// Compose an unary functors F1 with a binary functor F2.
+ /// Compose a unary functor \a F1 with a binary functor \a F2.
template<class UF1, class BF2>
internal::compose_ub_<UF1, BF2>
compose_ub(const UF1& f1, const BF2& f2)
@@ -142,7 +142,7 @@
return internal::compose_ub_<UF1, BF2>(f1, f2);
}
- /// Compose a binary functor F1 and an unary functor F2.
+ /// Compose a binary functor \a F1 and an unary functor \a F2.
template<class BF1, class UF2>
internal::compose_bu_<BF1, UF2>
compose_bu(const BF1& f1, const UF2& f2)
Index: olena/oln/io/file.hh
--- olena/oln/io/file.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/17_file.hh 1.5 600)
+++ olena/oln/io/file.hh Mon, 15 Mar 2004 19:55:12 +0100 thivol_d (oln/b/17_file.hh 1.5 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -40,6 +40,11 @@
namespace internal {
+ /*! \class stream_wrapper<StreamFile>
+ **
+ ** Specialized version for StreamFile.
+ */
+
template<>
struct stream_wrapper<StreamFile>
{
@@ -49,12 +54,14 @@
static const std::string name_("file:"); return name_;
}
+
static bool
knows_ext(const std::string&) // knows all extensions
{
return true;
}
+ /// Open a input stream on the file named \a name. Return 0 on failure.
static std::istream*
wrap_in(std::string& name)
{
@@ -65,6 +72,7 @@
return 0;
}
+ /// Open a output stream on the file named \a name. Return 0 on failure.
static std::ostream*
wrap_out(std::string& name)
{
@@ -75,6 +83,10 @@
return 0;
}
+ /*! \brief Insert in \a names all the files that have the same
+ ** suffix as \a name in the \a name or the current directory.
+ */
+
static void
find(std::list<std::string>& names, const std::string& name)
{
Index: olena/oln/io/gz.hh
--- olena/oln/io/gz.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/f/16_gz.hh 1.6 600)
+++ olena/oln/io/gz.hh Mon, 15 Mar 2004 18:58:29 +0100 thivol_d (oln/f/16_gz.hh 1.6 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -37,9 +37,18 @@
namespace internal {
+
+ /*! \class stream_wrapper<StreamGz>
+ **
+ ** Specialized version for StreamGz.
+ */
+
template<>
struct stream_wrapper<StreamGz>
{
+
+ /// Return "gz:"
+
static const std::string&
name()
{
@@ -47,12 +56,16 @@
return name_;
}
+ /// Return true if \a ext == "gz" or \a ext == "z'
+
static bool
knows_ext(const std::string& ext)
{
return ext == "gz" || ext == "z";
}
+
+ /// Delete the file extension of \a name.
static void
adjust_name(std::string& name)
{
@@ -61,6 +74,10 @@
name.erase(name.rfind('.'));
}
+ /*! \brief Open a input stream on \a name then return it.
+ ** On failure \a wrap_in returns 0.
+ */
+
static std::istream*
wrap_in(std::string& name)
{
@@ -74,6 +91,9 @@
return 0;
}
+ /*! \brief Open a output stream on \a name then return it.
+ ** On failure \a wrap_out returns 0.
+ */
static std::ostream*
wrap_out(std::string& name)
{
Index: olena/oln/io/gz_stream.hh
--- olena/oln/io/gz_stream.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/f/17_gz_stream. 1.9 600)
+++ olena/oln/io/gz_stream.hh Mon, 15 Mar 2004 19:00:02 +0100 thivol_d (oln/f/17_gz_stream. 1.9 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -39,12 +39,21 @@
namespace io {
+ /*! \namespace gz
+ ** \brief gz namespace
+ */
namespace gz {
+
+ /*! \class zfilebuf
+ **
+ ** Performs operation on compressed files.
+ */
class zfilebuf : public std::streambuf
{
public:
+
zfilebuf() : file(0), mode(0), own_file_descriptor(0)
{
inbuf = new char[lenbuf];
@@ -62,6 +71,10 @@
close();
}
+
+ /*! \brief Return a stream on the file \a name regarding
+ ** the opening mode: \a io_mode.
+ */
zfilebuf*
open(const char *name, int io_mode)
{
@@ -107,6 +120,9 @@
return this;
}
+ /*! \brief Attach a stream on \a file_descriptor regarding
+ ** the opening mode: \a io_mode.
+ */
zfilebuf*
attach(int file_descriptor, int io_mode)
{
@@ -152,6 +168,7 @@
return this;
}
+ /// Close the stream.
zfilebuf*
close()
{
@@ -164,6 +181,7 @@
return this;
}
+
int
setcompressionlevel(short comp_level)
{
@@ -176,6 +194,7 @@
return gzsetparams(file, -2, comp_strategy);
}
+ /// Return true if the stream is open, false otherwise.
inline int
is_open() const
{ return (file != 0); }
@@ -186,6 +205,7 @@
return std::streampos(gzseek(file, off, dir));
}
+ /// Flush the buffer associated to the stream.
virtual int
sync()
{
@@ -196,6 +216,9 @@
protected:
+ /*! \brief Return the next character in the stream.
+ ** On failure, \a EOF is returned.
+ */
virtual int
underflow()
{
@@ -218,6 +241,10 @@
return (unsigned char) *gptr();
}
+ /*! \brief Flush the output buffer associated to the stream
+ ** then write \a c. On failure, \a EOF is returned.
+ */
+
virtual int
overflow(int c = EOF)
{
@@ -247,6 +274,7 @@
char *outbuf;
static const int lenbuf = 16 * 1024;
+ /// Flush the output buffer
int
flushbuf()
{
@@ -261,7 +289,7 @@
setp(outbuf, outbuf + lenbuf);
return 0;
}
-
+ /// Fill the input buffer.
int
fillbuf()
{
@@ -273,6 +301,11 @@
};
+ /*! \class zfilestream_common
+ **
+ ** Define an interface for compressed file stream manipulation.
+ */
+
class zfilestream_common : virtual public std::ios
{
friend class zifstream;
@@ -283,6 +316,9 @@
public:
virtual ~zfilestream_common() {}
+ /*! \brief Open the stream on the file descriptor:
+ ** \a fd regarding the opening mode.
+ */
void
attach(int fd, int io_mode)
{
@@ -292,6 +328,9 @@
clear();
}
+ /*! \brief Open the stream on the file named \a name
+ ** regarding the opening mode.
+ */
void
open(const char *name, int io_mode)
{
@@ -301,6 +340,7 @@
clear();
}
+ /// Close the current stream.
void
close()
{
@@ -309,6 +349,7 @@
}
protected:
+ /// Prevent instantiation.
zfilestream_common() : std::ios(zfilestream_common::rdbuf())
{ }
@@ -323,6 +364,11 @@
zfilebuf buffer;
};
+
+ /*! \class zifstream
+ **
+ ** Read only zstream.
+ */
class zifstream : public zfilestream_common, public std::istream
{
public:
@@ -332,12 +378,14 @@
clear(std::ios::badbit);
}
+ /// Open a read only stream on the file named \a name.
zifstream(const char *name, int io_mode = std::ios::in) :
std::istream(zfilestream_common::rdbuf())
{
zfilestream_common::open(name, io_mode);
}
+ /// Open a read only stream on the file descriptor \a fd.
zifstream(int fd, int io_mode = std::ios::in) :
std::istream(zfilestream_common::rdbuf())
{
@@ -356,12 +404,14 @@
clear(std::ios::badbit);
}
+ /// Open a write only stream on the file named \a name.
zofstream(const char *name, int io_mode = std::ios::out) :
std::ostream(zfilestream_common::rdbuf())
{
zfilestream_common::open(name, io_mode);
}
+ /// Open a write only stream on the file descriptor \a fd.
zofstream(int fd, int io_mode = std::ios::out) :
std::ostream(zfilestream_common::rdbuf())
{
@@ -376,12 +426,18 @@
template <class T>
class zomanip;
+ /// Apply a function on \a s via the operator <<.
template <class T>
zofstream&
operator<<(zofstream &s, const zomanip<T> &m) {
return (*m.func)(s, m.val);
}
+
+ /*! \class zomanip
+ **
+ ** Define a pair func / val to perform manipulation on zofstream.
+ */
template<class T> class zomanip
{
friend zofstream &operator<< <T>(zofstream &, const zomanip<T> &);
@@ -392,12 +448,15 @@
T val;
};
+
+ /// Set the compression level of \a s to \a l.
inline zofstream&
setcompressionlevel(zofstream &s, int l) {
(s.rdbuf())->setcompressionlevel(l);
return s;
}
+ /// Set the compression strategy of \a s to \a l.
inline zofstream&
setcompressionstrategy(zofstream &s, int l)
{
@@ -405,12 +464,14 @@
return s;
}
+ /// Specialized version for zomanip<int>
inline zomanip<int>
setcompressionlevel(int l)
{
return zomanip<int>(&setcompressionlevel,l);
}
+ /// Specialized version for zomanip<int>
inline zomanip<int>
setcompressionstrategy(int l)
{
Index: olena/oln/io/pnm_read_3d.hh
--- olena/oln/io/pnm_read_3d.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/11_pnm_read3d 1.13 600)
+++ olena/oln/io/pnm_read_3d.hh Mon, 15 Mar 2004 19:02:17 +0100 thivol_d (oln/b/11_pnm_read3d 1.13 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -47,9 +47,13 @@
| pnm_reader3d (Any) |
`-------------------*/
- // Only PnmRaw images can store more than one 2d image. The
- // format is simple: each slice is stored as a bi-dimensional
- // image.
+ /*! \class pnm_reader<ReadPnmRaw, 3, P, I>
+ **
+ ** Specialized version for 3d image.
+ ** Only PnmRaw images can store more than one 2d image. The
+ ** format is simple: each slice is stored as a bi-dimensional
+ ** image.
+ */
template <pnm_type P, class I>
struct pnm_reader<ReadPnmRaw, 3, P, I>
@@ -70,6 +74,11 @@
return reader_2d::knows_ext(ext);
}
+
+ /*! \brief Initialize \a im and return true if \a in
+ ** is a valid pnm file format, return false otherwise.
+ */
+
static bool
read(std::istream& in, I& im)
{
@@ -114,6 +123,8 @@
}
private:
+
+ /// Function used in \a read method.
static void
to_image3d_(std::list<image2d_type*>& image2d_list, I& output)
{
Index: olena/oln/io/pnm_read.hh
--- olena/oln/io/pnm_read.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/16_pnm_read.h 1.9.1.10 600)
+++ olena/oln/io/pnm_read.hh Mon, 15 Mar 2004 11:58:34 +0100 thivol_d (oln/b/16_pnm_read.h 1.9.1.10 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,6 +46,11 @@
| default pnm_reader |
`-------------------*/
+ /*! \class pnm_reader
+ **
+ ** Default version.
+ */
+
template <reader_id R, unsigned Dim, pnm_type V, class I>
struct pnm_reader
{
@@ -72,11 +77,21 @@
| reader for pnm |
`---------------*/
+ /*! \class image_reader<ReadPnmPlain, I>
+ **
+ ** Specialized version for ReadPnmPlain
+ */
+
template <class I>
struct image_reader<ReadPnmPlain, I>
: public pnm_reader<ReadPnmPlain, I::dim, get_pnm_type<I>::ret, I>
{};
+ /*! \class image_reader<ReadPnmRaw, I>
+ **
+ ** Specialized version for ReadPnmRaw
+ */
+
template <class I>
struct image_reader<ReadPnmRaw, I>
: public pnm_reader<ReadPnmRaw, I::dim, get_pnm_type<I>::ret, I>
Index: olena/oln/io/pnm_write_3d.hh
--- olena/oln/io/pnm_write_3d.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/9_pnm_write3 1.1.1.13 600)
+++ olena/oln/io/pnm_write_3d.hh Mon, 15 Mar 2004 13:45:26 +0100 thivol_d (oln/b/9_pnm_write3 1.1.1.13 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -46,9 +46,13 @@
| pnm_writer3d (Any) |
`-------------------*/
- // Only PnmRaw images can store more than one 2d image. The
- // format is simple: each slice is stored as a bi-dimensional
- // image.
+ /*! \class pnm_writer<WritePnmRaw, 3, P, I>
+ **
+ ** Specialized version for image 3d.
+ ** Only PnmRaw images can store more than one 2d image. The
+ ** format is simple: each slice is stored as a bi-dimensional
+ ** image.
+ */
template <pnm_type P, class I>
struct pnm_writer<WritePnmRaw, 3, P, I>
@@ -69,6 +73,8 @@
return writer_2d::knows_ext(ext);
}
+ /// Write \a im on \a out, then return true.
+
static bool
write(std::ostream& out, const I& im)
{
Index: olena/oln/io/pnm_write.hh
--- olena/oln/io/pnm_write.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/b/15_pnm_write. 1.8.1.13 600)
+++ olena/oln/io/pnm_write.hh Mon, 15 Mar 2004 13:34:40 +0100 thivol_d (oln/b/15_pnm_write. 1.8.1.13 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -41,6 +41,11 @@
| default pnm_writer |
`-------------------*/
+ /*! \class pnm_write
+ **
+ ** Default version.
+ */
+
template <writer_id W, unsigned Dim, pnm_type V, class I>
struct pnm_writer
{
Index: olena/oln/io/pnm_common.hh
--- olena/oln/io/pnm_common.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/t/40_pnm_common 1.4 600)
+++ olena/oln/io/pnm_common.hh Mon, 15 Mar 2004 19:00:49 +0100 thivol_d (oln/t/40_pnm_common 1.4 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -66,6 +66,14 @@
// Return the pnm type associated to an image type
// FIXME: this could be done by using labels images
// eg: read(binary_image_with_dim<2>& ima) { // ... }
+
+ /*! \class get_pnm_type
+ **
+ ** A metaswitch that return the pnm type associated to an image type.
+ **
+ ** \todo FIXME: this could be done by using labels images
+ ** eg: read(binary_image_with_dim<2>& ima) { // ... }
+ */
template <class I>
struct get_pnm_type
{
Index: olena/oln/io/stream_wrapper.hh
--- olena/oln/io/stream_wrapper.hh Mon, 15 Mar 2004 19:40:09 +0100 odou_s (oln/t/43_stream_wra 1.3.1.2 600)
+++ olena/oln/io/stream_wrapper.hh Mon, 15 Mar 2004 19:48:41 +0100 thivol_d (oln/t/43_stream_wra 1.3.1.2 600)
@@ -52,6 +52,16 @@
StreamGz = 2,
StreamAny = 2 };
+ /*! \class stream_wrapper
+ **
+ ** Default version, if you instantiate one, all the
+ ** operations on the stream will fail
+ **
+ ** \see stream_wrapper<StreamFile>
+ **
+ ** \see stream_wrapper<StreamGz>
+ **
+ */
template< stream_id W >
struct stream_wrapper
{
Index: olena/oln/io/pnm_read_data.hh
--- olena/oln/io/pnm_read_data.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/u/9_pnm_read_d 1.5 600)
+++ olena/oln/io/pnm_read_data.hh Mon, 15 Mar 2004 13:34:05 +0100 thivol_d (oln/u/9_pnm_read_d 1.5 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -40,6 +40,12 @@
namespace internal {
+
+ /*! \class pnm_read_data
+ **
+ ** Default version.
+ */
+
template<pnm_type V, reader_id R>
struct pnm_read_data
{
@@ -55,6 +61,14 @@
| pnm read data binary |
`---------------------*/
+ /*! \class pnm_read_data<PnmBinary, ReadPnmPlain>
+ **
+ ** Specialized version for extracting pnm binary 2d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_read_data<PnmBinary, ReadPnmPlain>
{
@@ -79,6 +93,12 @@
}
};
+ /*! \class pnm_read_data<PnmBinary, ReadPnmRaw>
+ **
+ ** Specialized version for extracting pnm binary 2d image
+ ** in raw file.
+ */
+
template <>
struct pnm_read_data<PnmBinary, ReadPnmRaw>
{
@@ -112,6 +132,15 @@
| pnm read data integer |
`----------------------*/
+ /*! \class pnm_read_data<PnmInteger, ReadPnmPlain>
+ **
+ ** Specialized version for extracting pnm integer 2d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
+
template <>
struct pnm_read_data<PnmInteger, ReadPnmPlain>
{
@@ -132,6 +161,15 @@
}
};
+
+ /*! \class pnm_read_data<PnmInteger, ReadPnmRaw>
+ **
+ ** Specialized version for extracting pnm integer 2d image
+ ** in raw file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_read_data<PnmInteger, ReadPnmRaw>
{
@@ -165,6 +203,15 @@
| pnm read data vectorial |
`------------------------*/
+
+ /*! \class pnm_read_data<PnmVectorial, ReadPnmPlain>
+ **
+ ** Specialized version for extracting pnm vectorial 2d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_read_data<PnmVectorial, ReadPnmPlain>
{
@@ -186,6 +233,15 @@
}
};
+
+ /*! \class pnm_read_data<PnmInteger, ReadPnmRaw>
+ **
+ ** Specialized version for extracting pnm integer 2d image
+ ** in raw file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_read_data<PnmVectorial, ReadPnmRaw>
{
Index: olena/oln/io/pnm_write_data.hh
--- olena/oln/io/pnm_write_data.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/u/10_pnm_write_ 1.6 600)
+++ olena/oln/io/pnm_write_data.hh Mon, 15 Mar 2004 13:49:03 +0100 thivol_d (oln/u/10_pnm_write_ 1.6 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -40,6 +40,12 @@
namespace internal {
+
+ /*! \class pnm_write_data
+ **
+ ** Default version
+ */
+
template<pnm_type V, writer_id R>
struct pnm_write_data
{
@@ -55,6 +61,15 @@
| pnm write data binary |
`----------------------*/
+
+ /*! \class pnm_write_data<PnmBinary, WritePnmPlain>
+ **
+ ** Specialized version for writing pnm binary 3d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmBinary, WritePnmPlain>
{
@@ -82,6 +97,14 @@
}
};
+ /*! \class pnm_write_data<PnmBinary, WritePnmRaw>
+ **
+ ** Specialized version for writing pnm binary 3d image
+ ** in raw file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmBinary, WritePnmRaw>
{
@@ -121,6 +144,14 @@
| pnm write data integer |
`-----------------------*/
+ /*! \class pnm_write_data<PnmInteger, WritePnmPlain>
+ **
+ ** Specialized version for writing pnm integer 3d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmInteger, WritePnmPlain>
{
@@ -148,6 +179,14 @@
}
};
+ /*! \class pnm_write_data<PnmInteger, WritePnmRaw>
+ **
+ ** Specialized version for writing pnm integer 3d image
+ ** in raw file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmInteger, WritePnmRaw>
{
@@ -179,6 +218,14 @@
| pnm write data vectorial |
`-------------------------*/
+ /*! \class pnm_write_data<PnmVectorial, WritePnmPlain>
+ **
+ ** Specialized version for writing pnm vectorial 3d image
+ ** in plain file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmVectorial, WritePnmPlain>
{
@@ -209,6 +256,14 @@
}
};
+ /*! \class pnm_write_data<PnmVectorial, WritePnmRaw>
+ **
+ ** Specialized version for writing pnm vectorial 3d image
+ ** in raw file.
+ **
+ ** \todo FIXME: implement an iterator over data
+ */
+
template <>
struct pnm_write_data<PnmVectorial, WritePnmRaw>
{
Index: olena/oln/io/pnm_read_2d.hh
--- olena/oln/io/pnm_read_2d.hh Thu, 07 Aug 2003 02:37:23 +0200 burrus_n (oln/u/43_pnm_read_2 1.4 600)
+++ olena/oln/io/pnm_read_2d.hh Mon, 15 Mar 2004 13:35:15 +0100 thivol_d (oln/u/43_pnm_read_2 1.4 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -43,6 +43,12 @@
| pnm_read_header2d |
`------------------*/
+ /*! \brief Return true if the headers from \a s are valid,
+ ** false otherwise.
+ **
+ ** \todo FIXME: should be in a .cc file ?
+ */
+
// FIXME: should be in a .cc file ?
static bool
pnm_read_header2d(std::istream& s, char type, pnm2d_info& info)
@@ -80,6 +86,12 @@
| pnm_reader (Binary) |
`--------------------*/
+
+ /*! \class pnm_reader<R, 2, PnmBinary, I>
+ **
+ ** Specialized version for PnmBinary (pbm image format).
+ */
+
template <reader_id R, class I>
struct pnm_reader<R, 2, PnmBinary, I>
{
@@ -100,6 +112,10 @@
return ext == "pbm";
}
+ /*! \brief Initialize im and return true if the headers from \a in are valid,
+ ** return false otherwise.
+ */
+
static bool
read(std::istream& in, I& im)
{
@@ -118,6 +134,11 @@
| pnm_reader (Integer) |
`---------------------*/
+ /*! \class pnm_reader<R, 2, PnmInteger, I>
+ **
+ ** Specialized version for PnmInteger (pgm image format).
+ */
+
template <reader_id R, class I>
struct pnm_reader<R, 2, PnmInteger, I>
{
@@ -138,6 +159,11 @@
return ext == "pgm";
}
+ /*! \brief Initialize \a im and return true if \a in is a valid pgm file stream,
+ ** return false otherwise.
+ */
+
+
static bool
read(std::istream& in, I& im)
{
@@ -161,6 +187,11 @@
| pnm_reader (Vectorial) |
`-----------------------*/
+ /*! \brief class pnm_reader<R, 2, PnmVectorial, I>
+ **
+ ** Specialized version for pnm_reader<R, 2, PnmVectorial, I> (ppm image format).
+ */
+
template <reader_id R, class I>
struct pnm_reader<R, 2, PnmVectorial, I>
{
@@ -181,6 +212,10 @@
return ext == "ppm";
}
+ /*! \brief Initialize \a im and return true if \a in is a valid ppm file stream,
+ ** return false otherwise.
+ */
+
static bool
read(std::istream& in, I& im)
{
Index: olena/oln/io/pnm_write_2d.hh
--- olena/oln/io/pnm_write_2d.hh Mon, 03 Nov 2003 21:57:43 +0100 burrus_n (oln/u/44_pnm_write_ 1.5 600)
+++ olena/oln/io/pnm_write_2d.hh Mon, 15 Mar 2004 13:43:51 +0100 thivol_d (oln/u/44_pnm_write_ 1.5 600)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002, 2003 EPITA Research and Development Laboratory
+// Copyright (C) 2001, 2002, 2003, 2004 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -45,6 +45,11 @@
| pnm_write_header2d |
`------------------*/
+ /*! \brief Write headers in \a s output file, then return true.
+ **
+ ** \todo FIXME: should be in a .cc file ?
+ */
+
// FIXME: should be in a .cc file ?
static bool
pnm_write_header2d(std::ostream& s, char type, const pnm2d_info& info)
@@ -62,6 +67,11 @@
| pnm_writer (Binary) |
`--------------------*/
+ /*! \class pnm_writer<W, 2, PnmBinary, I>
+ **
+ ** Specialized version for pbm images.
+ */
+
template <writer_id W, class I>
struct pnm_writer<W, 2, PnmBinary, I>
{
@@ -82,6 +92,10 @@
return ext == "pbm";
}
+ /*! \brief write \a im on \a out according to the pbm format,
+ ** then return true.
+ */
+
static bool
write(std::ostream& out, const I& im)
{
@@ -103,6 +117,11 @@
| pnm_writer (Integer) |
`---------------------*/
+ /*! \class pnm_writer<W, 2, PnmInteger, I>
+ **
+ ** Specialized version for pgm images.
+ */
+
template <writer_id W, class I>
struct pnm_writer<W, 2, PnmInteger, I>
{
@@ -123,6 +142,10 @@
return ext == "pgm";
}
+ /*! \brief Write \a im on \a out according to the pgm format,
+ ** then return true.
+ */
+
static bool
write(std::ostream& out, const I& im)
{
@@ -147,6 +170,11 @@
| pnm_writer (Vectorial) |
`-----------------------*/
+ /*! \class pnm_writer<W, 2, PnmVectorial, I>
+ **
+ ** Specialized version for ppm images.
+ */
+
template <writer_id W, class I>
struct pnm_writer<W, 2, PnmVectorial, I>
{
@@ -167,6 +195,10 @@
return ext == "ppm";
}
+ /*! \brief Write \a im on \a out according to the ppm format,
+ ** then return true.
+ */
+
static bool
write(std::ostream& out, const I& im)
{
--
Damien Thivolle
damien.thivolle(a)lrde.epita.fr
1
0
Index: olena/ChangeLog
from Giovanni Palma <giovanni(a)lrde.epita.fr>
* tests/morpho/tests/attribute: Correct function name problems.
* tests/morpho/tests/area: Likewise.
Index: olena/tests/morpho/tests/area
--- olena/tests/morpho/tests/area Fri, 06 Feb 2004 15:26:24 +0100 van-vl_n (oln/j/44_area 1.1 644)
+++ olena/tests/morpho/tests/area Mon, 15 Mar 2004 16:59:27 +0100 palma_g (oln/j/44_area 1.1 644)
@@ -41,7 +41,7 @@
im(10) = 0;
image1d<int_u8> im2 =
- morpho::tarjan::area_opening(im, neighb_c2(), 2);
+ morpho::fast::card_opening(im, neighb_c2(), 2);
fail = fail ||
im2(0) != 0 ||
@@ -57,7 +57,7 @@
im2(10)!= 0;
image1d<int_u8> im3 =
- morpho::tarjan::area_opening(im, neighb_c2(), 3);
+ morpho::fast::card_opening(im, neighb_c2(), 3);
fail = fail ||
im3(0) != 0 ||
im3(1) != 0 ||
@@ -72,7 +72,7 @@
im3(10)!= 0;
image1d<int_u8> im4 =
- morpho::tarjan::area_opening(im, neighb_c2(), 4);
+ morpho::fast::card_opening(im, neighb_c2(), 4);
fail = fail ||
im4(0) != 0 ||
im4(1) != 0 ||
@@ -111,7 +111,7 @@
im(10) = -4;
image1d<int_s<3> > im2 =
- morpho::tarjan::area_opening(im, neighb_c2(), 2);
+ morpho::fast::card_opening(im, neighb_c2(), 2);
fail = fail ||
im2(0) != -4 ||
@@ -127,7 +127,7 @@
im2(10)!= -4;
image1d<int_s<3> > im3 =
- morpho::tarjan::area_opening(im, neighb_c2(), 3);
+ morpho::fast::card_opening(im, neighb_c2(), 3);
fail = fail ||
im3(0) != -4 ||
im3(1) != -4 ||
@@ -142,7 +142,7 @@
im3(10)!= -4;
image1d<int_s<3> > im4 =
- morpho::tarjan::area_opening(im, neighb_c2(), 4);
+ morpho::fast::card_opening(im, neighb_c2(), 4);
fail = fail ||
im4(0) != -4 ||
im4(1) != -4 ||
@@ -165,7 +165,7 @@
bool fail(false);
image2d<int_u8> lena = load(rdata("lena.pgm"));
- image2d<int_u8> lena5 = morpho::tarjan::area_closing(lena, neighb_c8(), 100);
+ image2d<int_u8> lena5 = morpho::fast::card_closing(lena, neighb_c8(), 100);
unsigned l = 0;
image2d<int_u8>::iter_type it_l(lena5);
Index: olena/tests/morpho/tests/attribute
--- olena/tests/morpho/tests/attribute Wed, 10 Mar 2004 16:20:23 +0100 palma_g (oln/j/51_attribute 1.3 644)
+++ olena/tests/morpho/tests/attribute Mon, 15 Mar 2004 17:04:59 +0100 palma_g (oln/j/51_attribute 1.3 644)
@@ -28,7 +28,7 @@
bool fail(false);
typedef image2d<int_u8> img_type;
- typedef oln::morpho::cart_type<unsigned> area_type;
+ typedef oln::morpho::card_type<unsigned> area_type;
const area_type::lambda_type area = 100;
const neighborhood2d nb = neighb_c8();
// const oln::morpho::NullEnv env;
--
Giovanni Palma
EPITA - promo 2005 - membre d'EpX - LRDE
Mob. : +33 (0)6 60 97 31 74
1
0