/usr/include/InsightToolkit/Review/itkRegionBasedLevelSetFunctionSharedData.h is in libinsighttoolkit3-dev 3.20.1+git20120521-6build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | /*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkRegionBasedLevelSetFunctionSharedData.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkRegionBasedLevelSetFunctionSharedData_h
#define __itkRegionBasedLevelSetFunctionSharedData_h
#include "itkLightObject.h"
#include "itkVector.h"
#include "itkListSample.h"
#include "itkKdTree.h"
#include "itkKdTreeGenerator.h"
#include "itkImageRegionIterator.h"
#include "itkImageRegionIteratorWithIndex.h"
namespace itk
{
/** \class RegionBasedLevelSetFunctionSharedData
*
* \brief Helper class used to share data in the ScalarChanAndVeseLevelSetFunction.
*
* This class holds cache data used during the computation of the LevelSet updates.
*
* Based on the paper:
*
* "An active contour model without edges"
* T. Chan and L. Vese.
* In Scale-Space Theories in Computer Vision, pages 141–151, 1999.
*
* \author Mosaliganti K., Smith B., Gelas A., Gouaillard A., Megason S.
*
* This code was taken from the Insight Journal paper:
*
* "Cell Tracking using Coupled Active Surfaces for Nuclei and Membranes"
* http://www.insight-journal.org/browse/publication/642
* http://hdl.handle.net/10380/3055
*
* That is based on the papers:
*
* "Level Set Segmentation: Active Contours without edge"
* http://www.insight-journal.org/browse/publication/322
* http://hdl.handle.net/1926/1532
*
* and
*
* "Level set segmentation using coupled active surfaces"
* http://www.insight-journal.org/browse/publication/323
* http://hdl.handle.net/1926/1533
*
*
*/
template < class TInputImage, class TFeatureImage, class TSingleData >
class RegionBasedLevelSetFunctionSharedData : public LightObject
{
public:
typedef RegionBasedLevelSetFunctionSharedData Self;
typedef LightObject Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
itkStaticConstMacro( ImageDimension, unsigned int, TFeatureImage::ImageDimension );
itkTypeMacro(RegionBasedLevelSetFunctionSharedData, LightObject);
typedef TInputImage InputImageType;
typedef typename InputImageType::Pointer InputImagePointer;
typedef typename InputImageType::ConstPointer InputImageConstPointer;
typedef typename InputImageType::PixelType InputPixelType;
typedef typename InputImageType::RegionType InputRegionType;
typedef typename InputImageType::SizeType InputSizeType;
typedef typename InputSizeType::SizeValueType InputSizeValueType;
typedef typename InputImageType::SpacingType InputSpacingType;
typedef typename InputImageType::IndexType InputIndexType;
typedef typename InputIndexType::IndexValueType InputIndexValueType;
typedef typename InputImageType::PointType InputPointType;
typedef TFeatureImage FeatureImageType;
typedef typename FeatureImageType::Pointer FeatureImagePointer;
typedef typename FeatureImageType::ConstPointer FeatureImageConstPointer;
typedef typename FeatureImageType::PixelType FeaturePixelType;
typedef typename FeatureImageType::RegionType FeatureRegionType;
typedef typename FeatureImageType::SizeType FeatureSizeType;
typedef typename FeatureSizeType::SizeValueType FeatureSizeValueType;
typedef typename FeatureImageType::SpacingType FeatureSpacingType;
typedef typename FeatureImageType::IndexType FeatureIndexType;
typedef typename FeatureImageType::PointType FeaturePointType;
typedef std::list< unsigned int > ListPixelType;
typedef Image< ListPixelType, itkGetStaticConstMacro(ImageDimension) >
ListImageType;
typedef typename ListImageType::Pointer ListImagePointer;
typedef typename ListImageType::ConstPointer ListImageConstPointer;
typedef typename ListImageType::RegionType ListRegionType;
typedef typename ListImageType::SizeType ListSizeType;
typedef typename ListSizeType::SizeValueType ListSizeValueType;
typedef typename ListImageType::SpacingType ListSpacingType;
typedef typename ListImageType::IndexType ListIndexType;
typedef typename ListIndexType::IndexValueType ListIndexValueType;
typedef typename ListImageType::PointType ListPointType;
typedef ImageRegionIteratorWithIndex< ListImageType > ListIteratorType;
typedef Vector< float, itkGetStaticConstMacro(ImageDimension) >
CentroidVectorType;
typedef itk::Statistics::ListSample< CentroidVectorType > SampleType;
typedef itk::Statistics::KdTreeGenerator< SampleType > TreeGeneratorType;
typedef typename TreeGeneratorType::Pointer TreePointer;
typedef typename TreeGeneratorType::KdTreeType TreeType;
typedef typename TreeType::Pointer KdTreePointer;
typedef TSingleData LevelSetDataType;
typedef typename LevelSetDataType::Pointer LevelSetDataPointer;
typedef std::vector< LevelSetDataPointer > LevelSetDataPointerVector;
typedef typename LevelSetDataPointerVector::iterator LevelSetDataPointerVectorIterator;
void SetFunctionCount( const unsigned int& n )
{
this->m_FunctionCount = n;
this->m_LevelSetDataPointerVector.resize( n, 0 );
LevelSetDataPointerVectorIterator it = m_LevelSetDataPointerVector.begin();
LevelSetDataPointerVectorIterator end = m_LevelSetDataPointerVector.end();
while( it != end )
{
(*it) = LevelSetDataType::New();
it++;
}
}
void SetNumberOfNeighbors( const unsigned int& n )
{
this->m_NumberOfNeighbors = n;
}
void CreateHeavisideFunctionOfLevelSetImage( const unsigned int& j, const InputImageType * image )
{
m_LevelSetDataPointerVector[j]->CreateHeavisideFunctionOfLevelSetImage( image );
}
void SetKdTree( KdTreePointer kdtree )
{
this->m_KdTree = kdtree;
}
void AllocateListImage( const FeatureImageType * featureImage )
{
this->m_NearestNeighborListImage = ListImageType::New();
this->m_NearestNeighborListImage->CopyInformation( featureImage );
this->m_NearestNeighborListImage->SetRegions( featureImage->GetLargestPossibleRegion() );
this->m_NearestNeighborListImage->Allocate();
}
virtual void PopulateListImage() = 0;
LevelSetDataPointerVector m_LevelSetDataPointerVector;
unsigned int m_FunctionCount;
unsigned int m_NumberOfNeighbors;
ListImagePointer m_NearestNeighborListImage;
KdTreePointer m_KdTree;
protected:
RegionBasedLevelSetFunctionSharedData() : m_NumberOfNeighbors( 6 ), m_KdTree( 0 ){}
~RegionBasedLevelSetFunctionSharedData(){}
private:
RegionBasedLevelSetFunctionSharedData(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
};
} //end namespace itk
#endif
|