]> Creatis software - clitk.git/blob - itk/clitkSegmentationUtils.h
separate airway tracking from extract lung
[clitk.git] / itk / clitkSegmentationUtils.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ======================================================================-====*/
18
19 #ifndef CLITKSEGMENTATIONUTILS_H
20 #define CLITKSEGMENTATIONUTILS_H
21
22 #include "clitkCommon.h"
23 #include "clitkAutoCropFilter.h"
24 #include "clitkLabelizeParameters.h"
25 #include <itkBoundingBox.h>
26
27 namespace clitk {
28
29   //--------------------------------------------------------------------
30   template<class ImageType>
31   void ComputeBBFromImageRegion(typename ImageType::Pointer image, 
32                                 typename ImageType::RegionType region,
33                                 typename itk::BoundingBox<unsigned long, 
34                                 ImageType::ImageDimension>::Pointer bb);
35   
36   //--------------------------------------------------------------------
37   template<int Dimension>
38   void ComputeBBIntersection(typename itk::BoundingBox<unsigned long, Dimension>::Pointer bbo, 
39                              typename itk::BoundingBox<unsigned long, Dimension>::Pointer bbi1, 
40                              typename itk::BoundingBox<unsigned long, Dimension>::Pointer bbi2);
41
42   //--------------------------------------------------------------------
43   template<class ImageType>
44   void ComputeRegionFromBB(typename ImageType::Pointer image, 
45                            const typename itk::BoundingBox<unsigned long, 
46                            ImageType::ImageDimension>::Pointer bb, 
47                            typename ImageType::RegionType & region);
48   //--------------------------------------------------------------------
49   template<class TInternalImageType, class TMaskInternalImageType>
50   typename TInternalImageType::Pointer
51   SetBackground(typename TInternalImageType::ConstPointer input,
52                 typename TMaskInternalImageType::ConstPointer mask, 
53                 typename TMaskInternalImageType::PixelType maskBG, 
54                 typename TInternalImageType::PixelType outValue);
55   //--------------------------------------------------------------------
56
57     
58   //--------------------------------------------------------------------
59   template<class TInternalImageType, class TMaskInternalImageType>
60   typename TInternalImageType::Pointer
61   SetBackground(typename TInternalImageType::Pointer input, 
62                 typename TMaskInternalImageType::Pointer mask, 
63                 typename TMaskInternalImageType::PixelType maskBG, 
64                 typename TInternalImageType::PixelType outValue) {
65     return SetBackground<TInternalImageType, TMaskInternalImageType>
66       (static_cast<typename TInternalImageType::ConstPointer>(input),  
67        static_cast<typename TMaskInternalImageType::ConstPointer>(mask), 
68        maskBG, outValue);
69   }
70   //--------------------------------------------------------------------
71
72
73   //--------------------------------------------------------------------
74   template<class ImageType>
75   int GetNumberOfConnectedComponentLabels(typename ImageType::Pointer input, 
76                                           typename ImageType::PixelType BG, 
77                                           bool isFullyConnected);
78   //--------------------------------------------------------------------
79
80
81   //-------------------------------------------------------------------- 
82   template<class TImageType>
83   typename TImageType::Pointer
84   Labelize(typename TImageType::Pointer input, 
85            typename TImageType::PixelType BG, 
86            bool isFullyConnected, 
87            int minimalComponentSize);
88   //--------------------------------------------------------------------
89
90
91   //--------------------------------------------------------------------
92   template<class ImageType>
93   typename ImageType::Pointer
94   RemoveLabels(typename ImageType::Pointer input, 
95                typename ImageType::PixelType BG, 
96                std::vector<typename ImageType::PixelType> & labelsToRemove);
97   //--------------------------------------------------------------------
98
99
100   //--------------------------------------------------------------------
101   template<class ImageType>
102     typename ImageType::Pointer
103     AutoCrop(typename ImageType::Pointer input, 
104              typename ImageType::PixelType BG) {
105       typedef clitk::AutoCropFilter<ImageType> AutoCropFilterType;
106       typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New();
107       autoCropFilter->SetInput(input);
108       autoCropFilter->Update();   
109       return autoCropFilter->GetOutput();
110   }
111
112   //--------------------------------------------------------------------
113
114
115   //--------------------------------------------------------------------
116   template<class TImageType>
117   typename TImageType::Pointer
118   KeepLabels(typename TImageType::Pointer input,
119              typename TImageType::PixelType BG, 
120              typename TImageType::PixelType FG,  
121              typename TImageType::PixelType firstKeep, 
122              typename TImageType::PixelType lastKeep, 
123              bool useLastKeep);
124   //--------------------------------------------------------------------
125
126
127   //--------------------------------------------------------------------
128   template<class TImageType>
129   typename TImageType::Pointer
130   LabelizeAndSelectLabels(typename TImageType::Pointer input,
131                           typename TImageType::PixelType BG, 
132                           typename TImageType::PixelType FG, 
133                           bool isFullyConnected,
134                           int minimalComponentSize,
135                           LabelizeParameters<typename TImageType::PixelType> * param);
136
137   //--------------------------------------------------------------------
138   template<class ImageType>
139   typename ImageType::Pointer
140   EnlargeImageLike(typename ImageType::Pointer input,
141                    typename ImageType::Pointer like, 
142                    typename ImageType::PixelType BG);
143
144 }
145
146 #include "clitkSegmentationUtils.txx"
147
148 #endif