]> Creatis software - clitk.git/blob - itk/clitkSegmentationUtils.h
277dfc791401b3a475c389821ae1eecb50b6e8e7
[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 TImageType>
75   typename TImageType::Pointer
76   Labelize(typename TImageType::Pointer input, 
77            typename TImageType::PixelType BG, 
78            bool isFullyConnected, 
79            int minimalComponentSize);
80   //--------------------------------------------------------------------
81
82
83   //--------------------------------------------------------------------
84   template<class TImageType>
85   typename TImageType::Pointer
86   RemoveLabels(typename TImageType::Pointer input, 
87                typename TImageType::PixelType BG, 
88                std::vector<typename TImageType::PixelType> & labelsToRemove);
89   //--------------------------------------------------------------------
90
91
92   //--------------------------------------------------------------------
93   template<class ImageType>
94     typename ImageType::Pointer
95     AutoCrop(typename ImageType::Pointer input, 
96              typename ImageType::PixelType BG) {
97       typedef clitk::AutoCropFilter<ImageType> AutoCropFilterType;
98       typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New();
99       autoCropFilter->SetInput(input);
100       autoCropFilter->Update();   
101       return autoCropFilter->GetOutput();
102   }
103
104   //--------------------------------------------------------------------
105
106
107   //--------------------------------------------------------------------
108   template<class TImageType>
109   typename TImageType::Pointer
110   KeepLabels(typename TImageType::Pointer input,
111              typename TImageType::PixelType BG, 
112              typename TImageType::PixelType FG,  
113              typename TImageType::PixelType firstKeep, 
114              typename TImageType::PixelType lastKeep, 
115              bool useLastKeep);
116   //--------------------------------------------------------------------
117
118
119   //--------------------------------------------------------------------
120   template<class TImageType>
121   typename TImageType::Pointer
122   LabelizeAndSelectLabels(typename TImageType::Pointer input,
123                           typename TImageType::PixelType BG, 
124                           typename TImageType::PixelType FG, 
125                           bool isFullyConnected,
126                           int minimalComponentSize,
127                           LabelizeParameters<typename TImageType::PixelType> * param);
128
129   //--------------------------------------------------------------------
130   template<class ImageType>
131   typename ImageType::Pointer
132   EnlargeImageLike(typename ImageType::Pointer input,
133                    typename ImageType::Pointer like, 
134                    typename ImageType::PixelType BG);
135   
136 }
137
138 #include "clitkSegmentationUtils.txx"
139
140 #endif