ITK
4.3.0
Insight Segmentation and Registration Toolkit
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
ITK
Modules
Core
Common
include
itkVectorImageNeighborhoodAccessorFunctor.h
Go to the documentation of this file.
1
/*=========================================================================
2
*
3
* Copyright Insight Software Consortium
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0.txt
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*
17
*=========================================================================*/
18
#ifndef __itkVectorImageNeighborhoodAccessorFunctor_h
19
#define __itkVectorImageNeighborhoodAccessorFunctor_h
20
21
#include "
itkVariableLengthVector.h
"
22
#include "
itkImageBoundaryCondition.h
"
23
#include "
itkImageBase.h
"
24
25
namespace
itk
26
{
40
template
<
class
TImage >
41
class
VectorImageNeighborhoodAccessorFunctor
42
{
43
public
:
44
typedef
TImage
ImageType
;
45
typedef
typename
ImageType::PixelType
PixelType
;
46
typedef
typename
ImageType::InternalPixelType
InternalPixelType
;
47
typedef
unsigned
int
VectorLengthType
;
48
typedef
typename
ImageType::OffsetType
OffsetType
;
49
50
typedef
Neighborhood
<
InternalPixelType
*,
51
TImage ::ImageDimension >
NeighborhoodType
;
52
53
typedef
ImageBoundaryCondition< ImageType >
const
54
*
ImageBoundaryConditionConstPointerType
;
55
56
VectorImageNeighborhoodAccessorFunctor
(
VectorLengthType
length):
57
m_VectorLength
(length),
m_OffsetMultiplier
(length - 1),
m_Begin
(
NULL
) {}
58
VectorImageNeighborhoodAccessorFunctor
():
59
m_VectorLength
(0),
m_OffsetMultiplier
(0),
m_Begin
(
NULL
) {}
60
74
inline
void
SetBegin
(
const
InternalPixelType
*begin)
75
{ this->
m_Begin
=
const_cast<
InternalPixelType
*
>
( begin ); }
77
85
inline
PixelType
Get
(
const
InternalPixelType
*pixelPointer)
const
86
{
87
return
PixelType
(pixelPointer + ( pixelPointer -
m_Begin
) *
m_OffsetMultiplier
,
m_VectorLength
);
88
}
89
91
inline
void
Set
(
InternalPixelType
* & pixelPointer,
const
PixelType
& p)
const
92
{
93
InternalPixelType
*truePixelPointer =
94
pixelPointer + ( pixelPointer -
m_Begin
) *
m_OffsetMultiplier
;
95
96
for
(
VectorLengthType
i = 0; i <
m_VectorLength
; i++ )
97
{
98
truePixelPointer[i] = p[i];
99
}
100
}
101
102
inline
PixelType
BoundaryCondition
(
103
const
OffsetType
& point_index,
104
const
OffsetType
& boundary_offset,
105
const
NeighborhoodType
*data,
106
const
ImageBoundaryConditionConstPointerType
boundaryCondition)
const
107
{
108
return
boundaryCondition->operator()(point_index, boundary_offset, data, *
this
);
109
}
110
113
void
SetVectorLength
(
VectorLengthType
length)
114
{
115
m_VectorLength
= length;
116
m_OffsetMultiplier
= length - 1;
117
}
118
121
VectorLengthType
GetVectorLength
()
122
{
123
return
m_VectorLength
;
124
}
125
126
private
:
127
VectorLengthType
m_VectorLength
;
128
VectorLengthType
m_OffsetMultiplier
;
// m_OffsetMultiplier = m_VectorLength-1
129
// (precomputed for speedup).
130
InternalPixelType
*
m_Begin
;
// Begin of the buffer.
131
};
132
}
// end namespace itk
133
#endif
134
Generated on Sun Dec 9 2012 01:30:16 for ITK by
1.8.2