18 #ifndef __itkParallelSparseFieldLevelSetImageFilter_h
19 #define __itkParallelSparseFieldLevelSetImageFilter_h
36 template<
class TNodeIndexType >
74 template<
class TNeighborhoodType >
82 itkStaticConstMacro(
Dimension,
unsigned int, NeighborhoodType::Dimension);
117 void Print(std::ostream & os)
const;
248 template<
class TInputImage,
class TOutputImage >
277 itkStaticConstMacro(ImageDimension,
unsigned int, TOutputImage::ImageDimension);
319 itkGetConstMacro(IsoSurfaceValue,
ValueType);
325 const unsigned int indexZ = index[m_SplitAxis];
327 const unsigned int ThreadNum = this->GetThreadNumber (indexZ);
330 return m_Data[ThreadNum].m_Layers[0];
333 #ifdef ITK_USE_CONCEPT_CHECKING
348 virtual void PrintSelf(std::ostream & os,
Indent indent)
const;
424 virtual void GenerateData();
430 void CopyInputToOutput();
443 void ConstructActiveLayer();
446 void InitializeActiveLayerValues();
451 void ConstructLayer(
const StatusType& from,
const StatusType& to);
454 void ProcessStatusList(LayerType *InputList,
const StatusType& ChangeToStatus,
455 const StatusType& SearchForStatus,
ThreadIdType ThreadId);
461 void PropagateAllLayerValues();
470 void PropagateLayerValues(
const StatusType& from,
const StatusType& to,
471 const StatusType& promote,
unsigned int InOrOut);
477 virtual void InitializeBackgroundPixels();
484 void ThreadedInitializeData(
ThreadIdType ThreadId,
const ThreadRegionType & ThreadRegion);
495 void ComputeInitialThreadBoundaries();
498 unsigned int GetThreadNumber(
unsigned int splitAxisValue);
501 void GetThreadRegionSplitByBoundary(
ThreadIdType ThreadId, ThreadRegionType & ThreadRegion);
505 void DeallocateData();
533 return ( value + static_cast< ValueType >( dt ) * change );
540 virtual void ThreadedProcessPixelEnteringActiveLayer(
const IndexType& itkNotUsed(index),
541 const ValueType& itkNotUsed(value),
549 virtual void ThreadedApplyUpdate(
const TimeStepType& dt,
ThreadIdType ThreadId);
559 virtual TimeStepType ThreadedCalculateChange(
ThreadIdType ThreadId);
567 void ThreadedUpdateActiveLayerValues(
const TimeStepType& dt,
568 LayerType *StatusUpList,
569 LayerType *StatusDownList,
575 LayerPointerType FromListPtr,
576 LayerPointerType ToListPtr);
579 void ClearList(
ThreadIdType ThreadId, LayerPointerType ListPtr);
583 void CopyInsertInterNeighborNodeTransferBufferLayers(
585 LayerPointerType InputList,
586 unsigned int InOrOut,
587 unsigned int BufferLayerNumber);
591 void ClearInterNeighborNodeTransferBufferLayers(
593 unsigned int BufferLayerNumber);
602 void ThreadedProcessFirstLayerStatusLists(
603 unsigned int InputLayerNumber,
604 unsigned int OutputLayerNumber,
605 const StatusType& SearchForStatus,
606 unsigned int InOrOut,
607 unsigned int BufferLayerNumber,
615 void ThreadedProcessStatusList(
616 unsigned int InputLayerNumber,
617 unsigned int OutputLayerNumber,
618 const StatusType& ChangeToStatus,
619 const StatusType& SearchForStatus,
620 unsigned int InOrOut,
621 unsigned int BufferLayerNumber,
627 void ThreadedProcessOutsideList(
628 unsigned int InputLayerNumber,
629 const StatusType& ChangeToStatus,
630 unsigned int InOrOut,
631 unsigned int BufferLayerNumber,
635 void ThreadedPropagateLayerValues(
636 const StatusType& from,
637 const StatusType& to,
638 const StatusType& promote,
639 unsigned int InorOut,
644 void GetThreadRegionSplitUniformly(
645 ThreadIdType ThreadId, ThreadRegionType & ThreadRegion);
652 void ThreadedPostProcessOutput(
const ThreadRegionType & regionToProcess);
664 virtual void CheckLoadBalance();
668 virtual void ThreadedLoadBalance(
ThreadIdType ThreadId);
675 void SignalNeighbor(
unsigned int SemaphoreArrayNumber,
ThreadIdType ThreadId);
677 void WaitForNeighbor(
unsigned int SemaphoreArrayNumber,
ThreadIdType ThreadId);
681 virtual void ThreadedInitializeIteration(
ThreadIdType ThreadId);
783 void operator=(
const Self &);
793 #ifndef ITK_MANUAL_INSTANTIATION
794 #include "itkParallelSparseFieldLevelSetImageFilter.hxx"