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
|
/*=========================================================================
Program: ITK-SNAP
Module: $RCSfile: LevelSetMeshPipeline.h,v $
Language: C++
Date: $Date: 2009/01/23 20:09:38 $
Version: $Revision: 1.3 $
Copyright (c) 2007 Paul A. Yushkevich
This file is part of ITK-SNAP
ITK-SNAP is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----
Copyright (c) 2003 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 __LevelSetMeshPipeline_h_
#define __LevelSetMeshPipeline_h_
#include "SNAPCommon.h"
#include "itkSmartPointer.h"
#include "vtkSmartPointer.h"
#include "itkObject.h"
#include "itkObjectFactory.h"
// Forward reference to itk classes
namespace itk {
template <class TPixel,unsigned int VDimension> class Image;
class FastMutexLock;
}
// Forward reference to our own VTK pipeline
class MeshOptions;
class VTKMeshPipeline;
class vtkPolyData;
/**
* \class LevelSetMeshPipeline
* \brief A pipeline used to compute a mesh of the zero level set in SNAP.
*
* This pipeline takes a floating point image computed by the level
* set filter and uses a contour algorithm to get a triangular mesh
*/
class LevelSetMeshPipeline : public itk::Object
{
public:
irisITKObjectMacro(LevelSetMeshPipeline, itk::Object)
/** Input image type */
typedef itk::Image<float,3> InputImageType;
typedef itk::SmartPointer<InputImageType> InputImagePointer;
/** Set the input segmentation image */
void SetImage(InputImageType *input);
/** Set the mesh options for this filter */
void SetMeshOptions(const MeshOptions *options);
/** Compute the mesh for the segmentation level set. An optional pointer
to a mutex lock can be provided. If passed in, the portion of the code
where the image data is accessed will be locked. This is to prevent mesh
update clashing with level set evolution iteration. */
void UpdateMesh(itk::FastMutexLock *lock = NULL);
/** Get the stored mesh */
vtkPolyData *GetMesh();
protected:
/** Constructor, which builds the pipeline */
LevelSetMeshPipeline();
/** Deallocate the pipeline filters */
~LevelSetMeshPipeline();
private:
// Type definitions for the various filters used by this object
typedef InputImageType InternalImageType;
typedef itk::SmartPointer<InternalImageType> InternalImagePointer;
// Current set of mesh options
SmartPtr<MeshOptions> m_MeshOptions;
// The input image
InputImagePointer m_InputImage;
// The VTK pipeline
VTKMeshPipeline *m_VTKPipeline;
// The output mesh
vtkSmartPointer<vtkPolyData> m_Mesh;
};
#endif //__LevelSetMeshPipeline_h_
|