aimstil  5.0.5
StructureTensor.h
Go to the documentation of this file.
1 #ifndef TIL_STRUCTURETENSOR_H
2 #define TIL_STRUCTURETENSOR_H
3 
4 
5 // Standard library includes
6 
7 #include <vector>
8 
9 
10 // Local includes
11 
12 #include "til/til_common.h"
13 
14 
15 // Namespace
16 
17 namespace til {
18 
19 
20 typedef double t_structtensprec;
21 
22 template <class TImage1, class TImage2>
24 {
25  private:
26 
27  TImage2 m_kernel;
28 
29  // Image derivatives
30 
31  TImage1 m_imdx;
32  TImage1 m_imdy;
33  TImage1 m_imdz;
34 
35 
36  public:
37 
38  // Constructors and destructor
39 
41  virtual ~StructureTensor() {};
42 
43  void setImages(
44  TImage1 &imdx,
45  TImage1 &imdy,
46  TImage1 &imdz,
47  TImage2 &kernel)
48  {
49  similarityCheck(imdx, kernel);
50  similarityCheck(imdy, kernel);
51  similarityCheck(imdz, kernel);
52 
53  m_imdx = imdx;
54  m_imdy = imdy;
55  m_imdz = imdz;
56 
57  m_kernel = kernel;
58  }
59 
60  std::vector<t_structtensprec> compute();
61 };
62 
63 
64 template <class TImage1, class TImage2>
65 std::vector<t_structtensprec> StructureTensor<TImage1,TImage2>::compute()
66 {
67 
68  t_structtensprec dxx, dxy, dxz, dyy, dyz, dzz;
69 
70  dxx = dxy = dxz = dyy = dyz = dzz = 0.0;
71 
72 
73  typename Iterator<TImage2>::ConstLinear ikernel(m_kernel);
74  typename Iterator<TImage1>::ConstLinear idx(m_imdx);
75  typename Iterator<TImage1>::ConstLinear idy(m_imdy);
76  typename Iterator<TImage1>::ConstLinear idz(m_imdz);
77 
78  for (; !ikernel.isAtEnd(); ++ikernel, ++idx, ++idy, ++idz)
79  {
80  dxx += *ikernel**idx**idx;
81  dxy += *ikernel**idx**idy;
82  dxz += *ikernel**idx**idz;
83  dyy += *ikernel**idy**idy;
84  dyz += *ikernel**idy**idz;
85  dzz += *ikernel**idz**idz;
86  }
87 
88  std::vector<t_structtensprec> res;
89 
90  res.push_back(dxx);
91  res.push_back(dxy);
92  res.push_back(dxz);
93  res.push_back(dyy);
94  res.push_back(dyz);
95  res.push_back(dzz);
96 
97  return res;
98 }
99 
100 
101 } // namespace
102 
103 #endif
104 
A trait class to assign iterators to image types.
void setImages(TImage1 &imdx, TImage1 &imdy, TImage1 &imdz, TImage2 &kernel)
void similarityCheck(const TImage1 &im1, const TImage2 &im2)
Check whether both images are allocated and have the same size and voxel size.
Definition: imageTools.h:75
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
std::vector< t_structtensprec > compute()
General macros, definitions and functions.
double t_structtensprec