aimstil  5.0.5
imageBasicStats.h
Go to the documentation of this file.
1 #ifndef TIL_BASICSTATS_H
2 #define TIL_BASICSTATS_H
3 
4 // includes from BOOST
5 #include "boost/utility/enable_if.hpp"
6 
7 // includes from TIL library
8 #include "til/til_common.h"
9 #include "til/labels.h"
10 
11 // Namespace
12 namespace til {
13 
14 typedef double t_bsprec;
15 
16 
18 template < class TImage >
19 t_bsprec sum(const TImage &im)
20 {
21  t_bsprec res = t_bsprec(0);
22  typename Iterator<TImage>::ConstLinear iIm(im);
23 
24  for (; !iIm.isAtEnd(); ++iIm)
25  {
26  res += t_bsprec(*iIm);
27  }
28  return res;
29 }
30 
31 
33 template < class TImage >
34 t_bsprec mean(const TImage &im)
35 {
36  return sum(im) / im.size();
37 }
38 
39 
40 
43 template < class TImage >
44 t_bsprec varEst(const TImage &im)
45 {
46  t_bsprec meanIm = mean(im);
47  t_bsprec res = t_bsprec(0);
48 
49  typename Iterator<TImage>::ConstLinear iIm(im);
50 
51  for (; !iIm.isAtEnd(); ++iIm)
52  {
53  res += square(*iIm-meanIm);
54  }
55 
56  return res / (im.size()-1);
57 }
58 
59 
60 
63 template < class TImage >
64 typename boost::enable_if<is_Image<TImage>, t_bsprec>::type
65 var(const TImage &im, t_bsprec meanIm)
66 {
67  t_bsprec res = t_bsprec(0);
68 
69  typename Iterator<TImage>::ConstLinear iIm(im);
70 
71  for (; !iIm.isAtEnd(); ++iIm)
72  {
73  res += square(*iIm-meanIm);
74  }
75 
76  return res / im.size();
77 }
78 
79 
80 // Returns the variance of the intensities
81 // (Normalization by size)
82 template < class TImage >
83 INLINE
84 typename boost::enable_if<is_Image<TImage>, t_bsprec>::type
85 var(const TImage &im)
86 {
87  return var(im, mean(im));
88 }
89 
90 
91 
92 /*
93 template < class TImage >
94 typename TImage::value_type max(const ConstPtr<TImage> &im)
95 {
96  typename TImage::ConstLinearIterator iIm(im);
97  typename TImage::value_type res = *iIm;
98 
99  for (;!iIm.isAtEnd(); ++iIm)
100  {
101  if (*iIm > res) res = *iIm;
102  }
103  return res;
104 }
105 */
106 
107 
109 
110 //(NB: all the following -> solved switching to .NET)
111 
112 // NB : returns a double instead of a 'typename TImage::value_type'
113 // because of a VC++6 bug
114 // An other work around would be to use a class, since VC can handle
115 // typenames in return types for class members. However, it is not
116 // convenient for two reasons:
117 // (1) no class name overloading
118 // (2) no template argument deduction, leading to very heavy
119 // expressions, like: maxIm<Image<ushort> >::value(im)
120 // (as opposed to a simple max(im)!)
121 
122 template < class TImage >
123 typename TImage::value_type max(const TImage &im)
124 {
125  typename Iterator<TImage>::ConstLinear iIm(im);
126  typename TImage::value_type res = *iIm;
127 
128  for (;!iIm.isAtEnd(); ++iIm)
129  {
130  if (*iIm > res) res = *iIm;
131  }
132  return res;
133 }
134 
135 
136 // Returns the minimum intensity of the input image
137 template < class TImage >
138 typename boost::enable_if<is_Image<TImage>, typename TImage::value_type>::type
139 min(const TImage &im)
140 {
141  typename Iterator<TImage>::ConstLinear iIm(im);
142  typename TImage::value_type res = *iIm;
143 
144  for (; !iIm.isAtEnd(); ++iIm)
145  {
146  if (*iIm < res) res = *iIm;
147  }
148  return res;
149 }
150 
151 } // namespace
152 
153 
154 #endif
155 
A trait class to assign iterators to image types.
boost::enable_if< is_Image< TImage >, typename TImage::value_type >::type min(const TImage &im)
boost::enable_if< is_Image< TImage >, t_bsprec >::type var(const TImage &im, t_bsprec meanIm)
Returns the variance of the intensities of the input image (Normalization by size) ...
t_bsprec varEst(const TImage &im)
Returns the estimated variance of the intensities of the input image.
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
General macros, definitions and functions.
Defines empty classes that serves as labels.
t_bsprec sum(const TImage &im)
Computes the sum of the intensities of the input image.
#define INLINE
Definition: til_common.h:26
TImage::value_type max(const TImage &im)
Returns the maximum intensity of the input image.
t_bsprec mean(const TImage &im)
Returns the mean of the intensities of the input image.
double t_bsprec
void square(const TImage &in, TImage &out)
Definition: imageArith.h:310