#ifndef CLITKEXTRACTMEDIASTINUMFILTER_H
#define CLITKEXTRACTMEDIASTINUMFILTER_H
-#include "clitkFilterBase.h"
-#include "clitkFilterWithAnatomicalFeatureDatabaseManagement.h"
+#include "clitkStructuresExtractionFilter.h"
namespace clitk {
//--------------------------------------------------------------------
/*
Try to extract the mediastinum part of a thorax CT.
- Inputs :
- - Patient label image
- - Lungs label image
- - Bones label image
- - Trachea label image
+ Input masks needed :
+ - Patient
+ - Lungs
+ - Bones [Optional]
+ - Trachea
+ - VertebralBody
*/
//--------------------------------------------------------------------
template <class TImageType>
class ITK_EXPORT ExtractMediastinumFilter:
- public virtual clitk::FilterBase,
- public clitk::FilterWithAnatomicalFeatureDatabaseManagement,
- public itk::ImageToImageFilter<TImageType, itk::Image<uchar, 3> >
+ public clitk::StructuresExtractionFilter<TImageType>
{
public:
typedef typename MaskImageType::IndexType MaskImageIndexType;
typedef typename MaskImageType::PointType MaskImagePointType;
+ typedef itk::Image<MaskImagePixelType, 2> MaskSliceType;
+ typedef typename MaskSliceType::Pointer MaskSlicePointer;
+ typedef typename MaskSliceType::PointType MaskSlicePointType;
+
/** Standard class typedefs. */
- typedef itk::ImageToImageFilter<TImageType, MaskImageType> Superclass;
+ // typedef itk::ImageToImageFilter<TImageType, MaskImageType> Superclass;
+ typedef clitk::StructuresExtractionFilter<TImageType> Superclass;
typedef ExtractMediastinumFilter Self;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
MaskImagePixelType fgLeftLung=1, MaskImagePixelType fgRightLung=2);
void SetInputBonesLabelImage(const MaskImageType * image, MaskImagePixelType bg=0);
void SetInputTracheaLabelImage(const MaskImageType * image, MaskImagePixelType bg=0);
-
- // Output filename (for AFBD)
+
+ // Output filename (for AFBD)
itkSetMacro(OutputMediastinumFilename, std::string);
itkGetConstMacro(OutputMediastinumFilename, std::string);
itkSetMacro(BackgroundValueBones, MaskImagePixelType);
itkGetConstMacro(BackgroundValueBones, MaskImagePixelType);
- itkGetConstMacro(BackgroundValue, MaskImagePixelType);
- itkGetConstMacro(ForegroundValue, MaskImagePixelType);
-
itkSetMacro(ForegroundValueLeftLung, MaskImagePixelType);
itkGetConstMacro(ForegroundValueLeftLung, MaskImagePixelType);
itkSetMacro(IntermediateSpacing, double);
itkGetConstMacro(IntermediateSpacing, double);
- itkSetMacro(FuzzyThreshold1, double);
- itkGetConstMacro(FuzzyThreshold1, double);
-
- itkSetMacro(FuzzyThreshold2, double);
- itkGetConstMacro(FuzzyThreshold2, double);
-
- itkSetMacro(FuzzyThreshold3, double);
- itkGetConstMacro(FuzzyThreshold3, double);
-
itkBooleanMacro(UseBones);
itkSetMacro(UseBones, bool);
itkGetConstMacro(UseBones, bool);
- itkSetMacro(UpperThreshold, double);
- itkGetConstMacro(UpperThreshold, double);
+ itkSetMacro(DistanceMaxToAnteriorPartOfTheVertebralBody, double);
+ itkGetConstMacro(DistanceMaxToAnteriorPartOfTheVertebralBody, double);
- itkSetMacro(LowerThreshold, double);
- itkGetConstMacro(LowerThreshold, double);
+ void SetFuzzyThreshold(std::string tag, double value);
+ double GetFuzzyThreshold(std::string tag);
protected:
ExtractMediastinumFilter();
virtual void GenerateOutputInformation();
virtual void GenerateInputRequestedRegion();
virtual void GenerateData();
-
- itkSetMacro(BackgroundValue, MaskImagePixelType);
- itkSetMacro(ForegroundValue, MaskImagePixelType);
-
+
MaskImagePixelType m_BackgroundValuePatient;
MaskImagePixelType m_BackgroundValueLung;
MaskImagePixelType m_BackgroundValueBones;
MaskImagePixelType m_ForegroundValueLeftLung;
MaskImagePixelType m_ForegroundValueRightLung;
- MaskImagePixelType m_BackgroundValue;
- MaskImagePixelType m_ForegroundValue;
-
- typename MaskImageType::Pointer output;
+ MaskImagePointer output;
+ MaskImagePointer patient;
+ MaskImagePointer lung;
+ MaskImagePointer bones;
+ MaskImagePointer trachea;
+ std::map<std::string, double> m_FuzzyThreshold;
double m_IntermediateSpacing;
- double m_FuzzyThreshold1;
- double m_FuzzyThreshold2;
- double m_FuzzyThreshold3;
bool m_UseBones;
- double m_UpperThreshold;
- double m_LowerThreshold;
+ double m_DistanceMaxToAnteriorPartOfTheVertebralBody;
+
+ void RemovePostPartOfVertebralBody();
std::string m_OutputMediastinumFilename;