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 
19 #ifndef itkImageNeighborhoodOffsets_h
20 #define itkImageNeighborhoodOffsets_h
21 
22 #include "itkRectangularImageNeighborhoodShape.h"
23 #include <vector>
24 
25 namespace itk
26 {
27 namespace Experimental
28 {
29 
30 /** Generates the offsets for a neighborhood of the specified shape. */
31 template <typename TImageNeighborhoodShape>
GenerateImageNeighborhoodOffsets(const TImageNeighborhoodShape & shape)32 std::vector<Offset<TImageNeighborhoodShape::ImageDimension>> GenerateImageNeighborhoodOffsets(
33   const TImageNeighborhoodShape& shape)
34 {
35   std::vector<Offset<TImageNeighborhoodShape::ImageDimension>> offsets(shape.GetNumberOfOffsets());
36   shape.FillOffsets(offsets.data());
37   return offsets;
38 }
39 
40 
41 /** Generates the offsets for a hyperrectangular (box shaped) neighborhood. */
42 template <unsigned VImageDimension>
GenerateRectangularImageNeighborhoodOffsets(const Size<VImageDimension> & radius)43 std::vector<Offset<VImageDimension> > GenerateRectangularImageNeighborhoodOffsets(const Size<VImageDimension>& radius)
44 {
45   const RectangularImageNeighborhoodShape<VImageDimension> shape(radius);
46   return GenerateImageNeighborhoodOffsets(shape);
47 }
48 
49 } // namespace Experimental
50 } // namespace itk
51 
52 #endif
53