ITK  6.0.0
Insight Toolkit
itkConstrainedRegionBasedLevelSetFunctionSharedData.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
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 * https://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
23namespace itk
24{
57template <typename TInputImage, typename TFeatureImage, typename TSingleData>
59 : public RegionBasedLevelSetFunctionSharedData<TInputImage, TFeatureImage, TSingleData>
60{
61public:
62 ITK_DISALLOW_COPY_AND_MOVE(ConstrainedRegionBasedLevelSetFunctionSharedData);
63
68
69 static constexpr unsigned int ImageDimension = TFeatureImage::ImageDimension;
70
72 itkNewMacro(Self);
73
74 itkOverrideGetNameOfClassMacro(ConstrainedRegionBasedLevelSetFunctionSharedData);
75
76 using InputImageType = TInputImage;
77 using typename Superclass::InputImagePointer;
79 using typename Superclass::InputPixelType;
80 using typename Superclass::InputRegionType;
81 using typename Superclass::InputSizeType;
82 using typename Superclass::InputSizeValueType;
83 using typename Superclass::InputSpacingType;
84 using typename Superclass::InputIndexType;
86 using typename Superclass::InputPointType;
87
88 using FeatureImageType = TFeatureImage;
91 using typename Superclass::FeaturePixelType;
92 using typename Superclass::FeatureRegionType;
93 using typename Superclass::FeatureSizeType;
95 using typename Superclass::FeatureSpacingType;
96 using typename Superclass::FeatureIndexType;
97 using typename Superclass::FeaturePointType;
98
99 using typename Superclass::ListPixelType;
100 using typename Superclass::ListImageType;
101 using typename Superclass::ListImagePointer;
103 using typename Superclass::ListRegionType;
104 using typename Superclass::ListSizeType;
105 using typename Superclass::ListSizeValueType;
106 using typename Superclass::ListSpacingType;
107 using typename Superclass::ListIndexType;
108 using typename Superclass::ListIndexValueType;
109 using typename Superclass::ListPointType;
110 using typename Superclass::ListIteratorType;
111
112 using typename Superclass::CentroidVectorType;
113 using typename Superclass::SampleType;
114 using typename Superclass::TreeGeneratorType;
115 using typename Superclass::TreePointer;
116 using typename Superclass::TreeType;
117 using typename Superclass::KdTreePointer;
118
119 using LevelSetDataType = TSingleData;
120 using typename Superclass::LevelSetDataPointer;
123
124 void
126 {
127 ListSpacingType spacing = this->m_NearestNeighborListImage->GetSpacing();
128
129 ListRegionType region = this->m_NearestNeighborListImage->GetLargestPossibleRegion();
130
132
133 if (this->m_KdTree.IsNotNull())
134 {
135 for (lIt.GoToBegin(); !lIt.IsAtEnd(); ++lIt)
136 {
137 ListIndexType ind = lIt.GetIndex();
138
139 float queryPoint[ImageDimension];
140 for (unsigned int i = 0; i < ImageDimension; ++i)
141 {
142 queryPoint[i] = ind[i] * spacing[i];
143 }
144
145 typename TreeType::InstanceIdentifierVectorType neighbors;
146 this->m_KdTree->Search(queryPoint, this->m_NumberOfNeighbors, neighbors);
147
149 for (unsigned int i = 0; i < this->m_NumberOfNeighbors; ++i)
150 {
151 if (this->m_LevelSetDataPointerVector[i]->VerifyInsideRegion(ind))
152 {
153 L.push_back(neighbors[i]);
154 }
155 }
156 lIt.Set(L);
157 }
158 }
159 else
160 {
161 for (lIt.GoToBegin(); !lIt.IsAtEnd(); ++lIt)
162 {
163 ListIndexType ind = lIt.GetIndex();
165 for (unsigned int i = 0; i < this->m_FunctionCount; ++i)
166 {
167 if (this->m_LevelSetDataPointerVector[i]->VerifyInsideRegion(ind))
168 {
169 L.push_back(i);
170 }
171 }
172 lIt.Set(L);
173 }
174 }
175 }
176
177protected:
179 : Superclass()
180 {}
182};
183} // end namespace itk
184
185#endif
Helper class used to share data in the ScalarChanAndVeseLevelSetFunction.
A multi-dimensional iterator templated over image type that walks pixels within a region and is speci...
void Set(const PixelType &value) const
Light weight base class for most itk classes.
Helper class used to share data in the ScalarChanAndVeseLevelSetFunction.
itk::Statistics::ListSample< CentroidVectorType > SampleType
typename LevelSetDataPointerVector::iterator LevelSetDataPointerVectorIterator
typename FeatureImageType::ConstPointer FeatureImageConstPointer
ImageRegionIteratorWithIndex< ListImageType > ListIteratorType
Image< ListPixelType, Self::ImageDimension > ListImageType
itk::Statistics::KdTreeGenerator< SampleType > TreeGeneratorType
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....