ITK  4.2.0
Insight Segmentation and Registration Toolkit
itkConstrainedRegionBasedLevelSetFunctionSharedData.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 __itkConstrainedRegionBasedLevelSetFunctionSharedData_h
19 #define __itkConstrainedRegionBasedLevelSetFunctionSharedData_h
20 
22 
23 namespace itk
24 {
60 template< class TInputImage, class TFeatureImage, class TSingleData >
62  public RegionBasedLevelSetFunctionSharedData< TInputImage, TFeatureImage, TSingleData >
63 {
64 public:
65 
71 
72  itkStaticConstMacro(ImageDimension, unsigned int, TFeatureImage::ImageDimension);
73 
75  itkNewMacro(Self);
76 
78 
79  typedef TInputImage InputImageType;
90 
91  typedef TFeatureImage FeatureImageType;
101 
114 
119  typedef typename Superclass::TreeType TreeType;
121 
122  typedef TSingleData LevelSetDataType;
126 
128  {
129  ListSpacingType spacing = this->m_NearestNeighborListImage->GetSpacing();
130 
131  ListRegionType region = this->m_NearestNeighborListImage->GetLargestPossibleRegion();
132 
133  ListIteratorType lIt(this->m_NearestNeighborListImage, region);
134 
135  if ( this->m_KdTree.IsNotNull() )
136  {
137  for ( lIt.GoToBegin(); !lIt.IsAtEnd(); ++lIt )
138  {
139  ListIndexType ind = lIt.GetIndex();
140 
141  float queryPoint[ImageDimension];
142  for ( unsigned int i = 0; i < ImageDimension; i++ )
143  {
144  queryPoint[i] = ind[i] * spacing[i];
145  }
146 
147  typename TreeType::InstanceIdentifierVectorType neighbors;
148  this->m_KdTree->Search(queryPoint, this->m_NumberOfNeighbors, neighbors);
149 
150  ListPixelType L;
151  for ( unsigned int i = 0; i < this->m_NumberOfNeighbors; i++ )
152  {
153  if ( this->m_LevelSetDataPointerVector[i]->VerifyInsideRegion(ind) )
154  {
155  L.push_back(neighbors[i]);
156  }
157  }
158  lIt.Set(L);
159  }
160  }
161  else
162  {
163  for ( lIt.GoToBegin(); !lIt.IsAtEnd(); ++lIt )
164  {
165  ListIndexType ind = lIt.GetIndex();
166  ListPixelType L;
167  for ( unsigned int i = 0; i < this->m_FunctionCount; i++ )
168  {
169  if ( this->m_LevelSetDataPointerVector[i]->VerifyInsideRegion(ind) )
170  {
171  L.push_back(i);
172  }
173  }
174  lIt.Set(L);
175  }
176  }
177  }
178 
179 protected:
182 private:
184  // not
185  // implemented
186  void operator=(const Self &); //purposely
187  // not
188  // implemented
189 };
190 } //end namespace itk
191 
192 #endif
193