ITK  6.0.0
Insight Toolkit
itkParallelSparseFieldLevelSetImageFilter.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 itkParallelSparseFieldLevelSetImageFilter_h
19 #define itkParallelSparseFieldLevelSetImageFilter_h
20 
21 #include "itkBooleanStdVector.h"
23 #include "itkSparseFieldLayer.h"
24 #include "itkObjectStore.h"
26 #include "itkMultiThreaderBase.h"
27 #include <condition_variable>
28 #include <vector>
29 
30 namespace itk
31 {
37 template <typename TNodeIndexType>
38 class ITK_TEMPLATE_EXPORT ParallelSparseFieldLevelSetNode
39 {
40 public:
41  TNodeIndexType m_Index;
42  float m_Value;
45 };
46 
75 template <typename TNeighborhoodType>
77 {
78 public:
79  using NeighborhoodType = TNeighborhoodType;
82 
83  static constexpr unsigned int Dimension = NeighborhoodType::Dimension;
84 
85  const RadiusType &
86  GetRadius() const
87  {
88  return m_Radius;
89  }
90 
91  const unsigned int &
92  GetArrayIndex(unsigned int i) const
93  {
94  return m_ArrayIndex[i];
95  }
96 
97  const OffsetType &
98  GetNeighborhoodOffset(unsigned int i) const
99  {
100  return m_NeighborhoodOffset[i];
101  }
102 
103  const unsigned int &
104  GetSize() const
105  {
106  return m_Size;
107  }
108 
109  unsigned int
110  GetStride(unsigned int i)
111  {
112  return m_StrideTable[i];
113  }
114 
116 
118  {
119  m_ArrayIndex.clear();
120  m_NeighborhoodOffset.clear();
121  }
122 
123  void
124  Print(std::ostream & os, Indent indent) const;
125 
126 private:
127  char m_Pad1[128]{};
128  unsigned int m_Size{ 2 * Dimension };
129  RadiusType m_Radius{};
130  std::vector<unsigned int> m_ArrayIndex{};
131  std::vector<OffsetType> m_NeighborhoodOffset{};
132 
135  unsigned int m_StrideTable[Dimension]{};
136  char m_Pad2[128]{};
137 };
138 
255 template <typename TInputImage, typename TOutputImage>
256 class ITK_TEMPLATE_EXPORT ParallelSparseFieldLevelSetImageFilter
257  : public FiniteDifferenceImageFilter<TInputImage, TOutputImage>
258 {
259 public:
260  ITK_DISALLOW_COPY_AND_MOVE(ParallelSparseFieldLevelSetImageFilter);
261 
267 
269  using typename Superclass::TimeStepType;
270  using typename Superclass::FiniteDifferenceFunctionType;
271  using typename Superclass::RadiusType;
272  using typename Superclass::NeighborhoodScalesType;
273 
275  itkNewMacro(Self);
276 
278  itkOverrideGetNameOfClassMacro(ParallelSparseFieldLevelSetImageFilter);
279 
281  using InputImageType = TInputImage;
282  using OutputImageType = TOutputImage;
284 
285  static constexpr unsigned int ImageDimension = TOutputImage::ImageDimension;
286 
287  using PixelType = typename OutputImageType::PixelType;
288 
290 
293  using ValueType = typename OutputImageType::ValueType;
294 
297 
301 
303  using LayerListType = std::vector<LayerPointerType>;
304 
306  using StatusType = signed char;
307 
311 
315 
317 
321  itkSetMacro(NumberOfLayers, StatusType);
322  itkGetConstMacro(NumberOfLayers, StatusType);
326  itkSetMacro(IsoSurfaceValue, ValueType);
327  itkGetConstMacro(IsoSurfaceValue, ValueType);
332  {
333  // get the 'z' value for the index
334  const unsigned int indexZ = index[m_SplitAxis];
335  // get the thread in whose region the index lies
336  const unsigned int ThreadNum = this->GetThreadNumber(indexZ);
337 
338  // get the active list for that thread
339  return m_Data[ThreadNum].m_Layers[0];
340  }
341 
342 #ifdef ITK_USE_CONCEPT_CHECKING
343  // Begin concept checking
344  itkConceptMacro(OutputEqualityComparableCheck, (Concept::EqualityComparable<PixelType>));
345  itkConceptMacro(DoubleConvertibleToOutputCheck, (Concept::Convertible<double, PixelType>));
346  itkConceptMacro(OutputOStreamWritableCheck, (Concept::OStreamWritable<PixelType>));
347  // End concept checking
348 #endif
349 
350 protected:
352  ~ParallelSparseFieldLevelSetImageFilter() override = default;
353  void
354  PrintSelf(std::ostream & os, Indent indent) const override;
355 
358 
361  double m_ConstantGradientValue{ 1.0 };
362 
365 
368 
372 
376 
380 
384 
388 
393  typename OutputImageType::Pointer m_ShiftedImage{};
394 
399  LayerListType m_Layers{};
400 
405  StatusType m_NumberOfLayers{};
406 
408  typename StatusImageType::Pointer m_StatusImage{};
409  typename OutputImageType::Pointer m_OutputImage{};
410 
413  typename StatusImageType::Pointer m_StatusImageTemp{};
414  typename OutputImageType::Pointer m_OutputImageTemp{};
415 
417  typename LayerNodeStorageType::Pointer m_LayerNodeStore{};
418 
420  ValueType m_IsoSurfaceValue{};
421 
425  // ValueType m_RMSChange;
426 
429  void
430  GenerateData() override;
431 
436  void
437  CopyInputToOutput() override;
438 
440  void
442  {}
443 
446  void
447  Initialize() override;
448 
453  void
454  ConstructActiveLayer();
455 
457  void
458  InitializeActiveLayerValues();
459 
463  void
464  ConstructLayer(const StatusType & from, const StatusType & to);
465 
467  void
468  ProcessStatusList(LayerType * InputList,
469  const StatusType & ChangeToStatus,
470  const StatusType & SearchForStatus,
471  ThreadIdType ThreadId);
472 
477  void
478  PropagateAllLayerValues();
479 
487  void
488  PropagateLayerValues(const StatusType & from,
489  const StatusType & to,
490  const StatusType & promote,
491  unsigned int InOrOut);
492 
497  virtual void
498  InitializeBackgroundPixels();
499 
503  void
504  ThreadedAllocateData(ThreadIdType ThreadId);
505 
506  void
507  ThreadedInitializeData(ThreadIdType ThreadId, const ThreadRegionType & ThreadRegion);
508 
518  void
519  ComputeInitialThreadBoundaries();
520 
522  unsigned int
523  GetThreadNumber(unsigned int splitAxisValue);
524 
526  void
527  GetThreadRegionSplitByBoundary(ThreadIdType ThreadId, ThreadRegionType & ThreadRegion);
528 
531  void
532  DeallocateData();
533 
538  void
539  Iterate();
540 
545  inline virtual ValueType
546  ThreadedCalculateUpdateValue(const ThreadIdType itkNotUsed(ThreadId),
547  const IndexType itkNotUsed(index),
548  const TimeStepType & dt,
549  const ValueType & value,
550  const ValueType & change)
551  {
552  return (value + static_cast<ValueType>(dt) * change);
553  }
554 
555  // This method can be overridden in derived classes.
556  // The pixel at 'index' is entering the active layer for thread 'ThreadId'.
557  // The output image at 'index' will have the value as given by the
558  // 'value' parameter.
559  virtual void
560  ThreadedProcessPixelEnteringActiveLayer(const IndexType & itkNotUsed(index),
561  const ValueType & itkNotUsed(value),
562  ThreadIdType itkNotUsed(ThreadId));
563 
565  void
566  ApplyUpdate(const TimeStepType &) override
567  {}
568 
571  virtual void
572  ThreadedApplyUpdate(const TimeStepType & dt, ThreadIdType ThreadId);
573 
575  TimeStepType
576  CalculateChange() override
577  {
578  return TimeStepType{};
579  }
580 
583  virtual TimeStepType
584  ThreadedCalculateChange(ThreadIdType ThreadId);
585 
592  void
593  ThreadedUpdateActiveLayerValues(const TimeStepType & dt,
594  LayerType * UpList,
595  LayerType * DownList,
596  ThreadIdType ThreadId);
597 
600  void
601  CopyInsertList(ThreadIdType ThreadId, LayerPointerType FromListPtr, LayerPointerType ToListPtr);
602 
604  void
605  ClearList(ThreadIdType ThreadId, LayerPointerType ListPtr);
606 
609  void
610  CopyInsertInterNeighborNodeTransferBufferLayers(ThreadIdType ThreadId,
611  LayerPointerType List,
612  unsigned int InOrOut,
613  unsigned int BufferLayerNumber);
614 
617  void
618  ClearInterNeighborNodeTransferBufferLayers(ThreadIdType ThreadId,
619  unsigned int InOrOut,
620  unsigned int BufferLayerNumber);
621 
629  void
630  ThreadedProcessFirstLayerStatusLists(unsigned int InputLayerNumber,
631  unsigned int OutputLayerNumber,
632  const StatusType & SearchForStatus,
633  unsigned int InOrOut,
634  unsigned int BufferLayerNumber,
635  ThreadIdType ThreadId);
636 
642  void
643  ThreadedProcessStatusList(unsigned int InputLayerNumber,
644  unsigned int OutputLayerNumber,
645  const StatusType & ChangeToStatus,
646  const StatusType & SearchForStatus,
647  unsigned int InOrOut,
648  unsigned int BufferLayerNumber,
649  ThreadIdType ThreadId);
650 
654  void
655  ThreadedProcessOutsideList(unsigned int InputLayerNumber,
656  const StatusType & ChangeToStatus,
657  unsigned int InOrOut,
658  unsigned int BufferLayerNumber,
659  ThreadIdType ThreadId);
660 
662  void
663  ThreadedPropagateLayerValues(const StatusType & from,
664  const StatusType & to,
665  const StatusType & promote,
666  unsigned int InOrOut,
667  ThreadIdType ThreadId);
668 
671  void
672  GetThreadRegionSplitUniformly(ThreadIdType ThreadId, ThreadRegionType & ThreadRegion);
673 
679  void
680  ThreadedPostProcessOutput(const ThreadRegionType & regionToProcess);
681 
692  virtual void
693  CheckLoadBalance();
694 
697  void
698  ThreadedLoadBalance1(ThreadIdType ThreadId);
699  void
700  ThreadedLoadBalance2(ThreadIdType ThreadId);
703  void
704  SignalNeighborsAndWait(ThreadIdType ThreadId);
705 
706  void
707  SignalNeighbor(unsigned int SemaphoreArrayNumber, ThreadIdType ThreadId);
708 
709  void
710  WaitForNeighbor(unsigned int SemaphoreArrayNumber, ThreadIdType ThreadId);
711 
714  virtual void
715  ThreadedInitializeIteration(ThreadIdType ThreadId);
716 
718  std::vector<TimeStepType> m_TimeStepList{};
719  BooleanStdVectorType m_ValidTimeStepList{};
720  TimeStepType m_TimeStep{};
721 
723  ThreadIdType m_NumOfWorkUnits{ 0 };
724 
726  unsigned int m_SplitAxis{ 0 };
727 
729  unsigned int m_ZSize{ 0 };
730 
733  bool m_BoundaryChanged{ false };
734 
736  unsigned int * m_Boundary{ nullptr };
737 
739  int * m_GlobalZHistogram{ nullptr };
740 
743  unsigned int * m_MapZToThreadNumber{ nullptr };
744 
747  int * m_ZCumulativeFrequency{ nullptr };
748 
751  {
755  unsigned int m_Count;
756 
759 
762 
765 
766  LayerPointerType UpList[2];
767  LayerPointerType DownList[2];
768 
771  LayerPointerType ** m_InterNeighborNodeTransferBufferLayers[2];
772 
775  void * globalData;
776 
779 
784  int m_Semaphore[2];
785 
786  std::mutex m_Lock[2];
787  std::condition_variable m_Condition[2];
788 
792  };
793 
794  itkPadStruct(ITK_CACHE_LINE_ALIGNMENT, ThreadDataUnaligned, ThreadDataPadded);
795  itkAlignedTypedef(ITK_CACHE_LINE_ALIGNMENT, ThreadDataPadded, ThreadData);
796 
799  ThreadData * m_Data{ nullptr };
800 
803  bool m_Stop{ false };
804 
809  bool m_InterpolateSurfaceLocation{ true };
810 
811 private:
814  bool m_BoundsCheckingActive{ false };
815 };
816 } // end namespace itk
817 
818 #ifndef ITK_MANUAL_INSTANTIATION
819 # include "itkParallelSparseFieldLevelSetImageFilter.hxx"
820 #endif
821 
822 #endif
itk::ParallelSparseFieldCityBlockNeighborList
A convenience class for storing indices which reference neighbor pixels within a neighborhood.
Definition: itkParallelSparseFieldLevelSetImageFilter.h:76
Pointer
SmartPointer< Self > Pointer
Definition: itkAddImageFilter.h:93
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_Count
unsigned int m_Count
Definition: itkParallelSparseFieldLevelSetImageFilter.h:755
itk::ParallelSparseFieldCityBlockNeighborList::GetArrayIndex
const unsigned int & GetArrayIndex(unsigned int i) const
Definition: itkParallelSparseFieldLevelSetImageFilter.h:92
itkFiniteDifferenceImageFilter.h
itk::ParallelSparseFieldLevelSetImageFilter::LayerPointerType
typename LayerType::Pointer LayerPointerType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:300
itk::ParallelSparseFieldCityBlockNeighborList::GetSize
const unsigned int & GetSize() const
Definition: itkParallelSparseFieldLevelSetImageFilter.h:104
itk::Concept::OStreamWritable
Definition: itkConceptChecking.h:638
itk::ParallelSparseFieldLevelSetImageFilter::m_StatusActiveChangingUp
static StatusType m_StatusActiveChangingUp
Definition: itkParallelSparseFieldLevelSetImageFilter.h:371
itk::ParallelSparseFieldLevelSetImageFilter::GetActiveListForIndex
LayerPointerType GetActiveListForIndex(const IndexType index)
Definition: itkParallelSparseFieldLevelSetImageFilter.h:331
itkBooleanStdVector.h
itkObjectStore.h
itk::Size
Represent a n-dimensional size (bounds) of a n-dimensional image.
Definition: itkSize.h:69
itkNeighborhoodIterator.h
itk::ParallelSparseFieldLevelSetImageFilter::ApplyUpdate
void ApplyUpdate(const TimeStepType &) override
Definition: itkParallelSparseFieldLevelSetImageFilter.h:566
itk::ParallelSparseFieldLevelSetImageFilter::m_StatusChanging
static StatusType m_StatusChanging
Definition: itkParallelSparseFieldLevelSetImageFilter.h:383
itk::ParallelSparseFieldLevelSetImageFilter::AllocateUpdateBuffer
void AllocateUpdateBuffer() override
Definition: itkParallelSparseFieldLevelSetImageFilter.h:441
itk::BooleanStdVectorType
std::vector< Boolean > BooleanStdVectorType
Definition: itkBooleanStdVector.h:34
itk::ParallelSparseFieldLevelSetImageFilter::ThreadedCalculateUpdateValue
virtual ValueType ThreadedCalculateUpdateValue(const ThreadIdType, const IndexType, const TimeStepType &dt, const ValueType &value, const ValueType &change)
Definition: itkParallelSparseFieldLevelSetImageFilter.h:546
itk::FiniteDifferenceImageFilter::TimeStepType
typename FiniteDifferenceFunctionType::TimeStepType TimeStepType
Definition: itkFiniteDifferenceImageFilter.h:167
itk::ParallelSparseFieldCityBlockNeighborList::GetRadius
const RadiusType & GetRadius() const
Definition: itkParallelSparseFieldLevelSetImageFilter.h:86
itk::ParallelSparseFieldLevelSetImageFilter::StatusType
signed char StatusType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:306
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned
Definition: itkParallelSparseFieldLevelSetImageFilter.h:750
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::globalData
void * globalData
Definition: itkParallelSparseFieldLevelSetImageFilter.h:775
itk::SmartPointer< Self >
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::TimeStep
TimeStepType TimeStep
Definition: itkParallelSparseFieldLevelSetImageFilter.h:752
itk::ParallelSparseFieldCityBlockNeighborList::GetNeighborhoodOffset
const OffsetType & GetNeighborhoodOffset(unsigned int i) const
Definition: itkParallelSparseFieldLevelSetImageFilter.h:98
itk::ParallelSparseFieldLevelSetImageFilter::CalculateChange
TimeStepType CalculateChange() override
Definition: itkParallelSparseFieldLevelSetImageFilter.h:576
itk::SparseFieldLayer
A very simple linked list that is used to manage nodes in a layer of a sparse field level-set solver.
Definition: itkSparseFieldLayer.h:162
itk::ParallelSparseFieldCityBlockNeighborList< itk::NeighborhoodIterator< OutputImageType > >::RadiusType
typename NeighborhoodType::RadiusType RadiusType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:81
itk::ThreadIdType
unsigned int ThreadIdType
Definition: itkIntTypes.h:102
itk::GTest::TypedefsAndConstructors::Dimension2::IndexType
ImageBaseType::IndexType IndexType
Definition: itkGTestTypedefsAndConstructors.h:50
itk::ImageSource
Base class for all process objects that output image data.
Definition: itkImageSource.h:67
itk::ParallelSparseFieldLevelSetImageFilter::ValueType
typename OutputImageType::ValueType ValueType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:293
itk::ObjectStore
A specialized memory management object for allocating and destroying contiguous blocks of objects.
Definition: itkObjectStore.h:84
itk::GTest::TypedefsAndConstructors::Dimension2::RegionType
ImageBaseType::RegionType RegionType
Definition: itkGTestTypedefsAndConstructors.h:54
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_LoadTransferBufferLayers
LayerListType * m_LoadTransferBufferLayers
Definition: itkParallelSparseFieldLevelSetImageFilter.h:761
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_Layers
LayerListType m_Layers
Definition: itkParallelSparseFieldLevelSetImageFilter.h:758
itk::ParallelSparseFieldLevelSetImageFilter::m_ValueZero
static ValueType m_ValueZero
Definition: itkParallelSparseFieldLevelSetImageFilter.h:367
itk::ParallelSparseFieldLevelSetImageFilter::LayerListType
std::vector< LayerPointerType > LayerListType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:303
itk::ImageToImageFilter::InputImageType
TInputImage InputImageType
Definition: itkImageToImageFilter.h:129
itk::FiniteDifferenceImageFilter
Definition: itkFiniteDifferenceImageFilter.h:133
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_RMSChange
ValueType m_RMSChange
Definition: itkParallelSparseFieldLevelSetImageFilter.h:754
itk::FiniteDifferenceImageFilter::PixelType
OutputPixelType PixelType
Definition: itkFiniteDifferenceImageFilter.h:157
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_ZHistogram
int * m_ZHistogram
Definition: itkParallelSparseFieldLevelSetImageFilter.h:778
itk::Offset
Represent a n-dimensional offset between two n-dimensional indexes of n-dimensional image.
Definition: itkOffset.h:66
itk::ParallelSparseFieldLevelSetImageFilter::m_StatusBoundaryPixel
static StatusType m_StatusBoundaryPixel
Definition: itkParallelSparseFieldLevelSetImageFilter.h:387
itk::NeighborhoodIterator
Defines iteration of a local N-dimensional neighborhood of pixels across an itk::Image.
Definition: itkNeighborhoodIterator.h:212
itk::ParallelSparseFieldCityBlockNeighborList::~ParallelSparseFieldCityBlockNeighborList
~ParallelSparseFieldCityBlockNeighborList()
Definition: itkParallelSparseFieldLevelSetImageFilter.h:117
itk::ParallelSparseFieldLevelSetNode
Definition: itkParallelSparseFieldLevelSetImageFilter.h:38
itkConceptMacro
#define itkConceptMacro(name, concept)
Definition: itkConceptChecking.h:65
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnatomicalOrientation.h:29
itkMultiThreaderBase.h
itk::ProcessObject
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
Definition: itkProcessObject.h:139
itk::ParallelSparseFieldLevelSetImageFilter::ThreadRegionType
typename OutputImageType::RegionType ThreadRegionType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:289
itk::Concept::Convertible
Definition: itkConceptChecking.h:216
itk::ParallelSparseFieldCityBlockNeighborList< itk::NeighborhoodIterator< OutputImageType > >::OffsetType
typename NeighborhoodType::OffsetType OffsetType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:80
itk::ParallelSparseFieldLevelSetImageFilter::IndexType
typename OutputImageType::IndexType IndexType
Definition: itkParallelSparseFieldLevelSetImageFilter.h:283
itk::Image
Templated n-dimensional image class.
Definition: itkImage.h:88
itk::ParallelSparseFieldLevelSetImageFilter::m_StatusNull
static StatusType m_StatusNull
Definition: itkParallelSparseFieldLevelSetImageFilter.h:379
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_SemaphoreArrayNumber
unsigned int m_SemaphoreArrayNumber
Definition: itkParallelSparseFieldLevelSetImageFilter.h:791
itk::ParallelSparseFieldLevelSetNode::Previous
ParallelSparseFieldLevelSetNode * Previous
Definition: itkParallelSparseFieldLevelSetImageFilter.h:44
itk::ParallelSparseFieldCityBlockNeighborList::GetStride
unsigned int GetStride(unsigned int i)
Definition: itkParallelSparseFieldLevelSetImageFilter.h:110
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::ThreadRegion
ThreadRegionType ThreadRegion
Definition: itkParallelSparseFieldLevelSetImageFilter.h:753
itk::ParallelSparseFieldLevelSetImageFilter::ThreadDataUnaligned::m_LayerNodeStore
LayerNodeStorageType::Pointer m_LayerNodeStore
Definition: itkParallelSparseFieldLevelSetImageFilter.h:764
itk::ParallelSparseFieldLevelSetNode::m_Index
TNodeIndexType m_Index
Definition: itkParallelSparseFieldLevelSetImageFilter.h:41
itk::ParallelSparseFieldLevelSetImageFilter::m_ValueOne
static ValueType m_ValueOne
Definition: itkParallelSparseFieldLevelSetImageFilter.h:364
itk::GTest::TypedefsAndConstructors::Dimension2::Dimension
constexpr unsigned int Dimension
Definition: itkGTestTypedefsAndConstructors.h:44
itk::ParallelSparseFieldLevelSetImageFilter
This class implements a finite difference partial differential equation solver for evolving surfaces ...
Definition: itkParallelSparseFieldLevelSetImageFilter.h:256
itk::ParallelSparseFieldLevelSetImageFilter::m_StatusActiveChangingDown
static StatusType m_StatusActiveChangingDown
Definition: itkParallelSparseFieldLevelSetImageFilter.h:375
itk::ParallelSparseFieldLevelSetNode::Next
ParallelSparseFieldLevelSetNode * Next
Definition: itkParallelSparseFieldLevelSetImageFilter.h:43
itk::Concept::EqualityComparable
Definition: itkConceptChecking.h:306
itk::ImageSource::OutputImageType
TOutputImage OutputImageType
Definition: itkImageSource.h:90
itk::ParallelSparseFieldLevelSetNode::m_Value
float m_Value
Definition: itkParallelSparseFieldLevelSetImageFilter.h:42
itkSparseFieldLayer.h