1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
19 #ifndef CLITKSEGMENTATIONUTILS_H
20 #define CLITKSEGMENTATIONUTILS_H
22 #include "clitkCommon.h"
23 #include "clitkAutoCropFilter.h"
24 #include "clitkLabelizeParameters.h"
25 #include <itkBoundingBox.h>
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);
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);
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 //--------------------------------------------------------------------
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),
70 //--------------------------------------------------------------------
73 //--------------------------------------------------------------------
74 template<class ImageType>
75 int GetNumberOfConnectedComponentLabels(typename ImageType::Pointer input,
76 typename ImageType::PixelType BG,
77 bool isFullyConnected);
78 //--------------------------------------------------------------------
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 //--------------------------------------------------------------------
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 //--------------------------------------------------------------------
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();
112 //--------------------------------------------------------------------
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,
124 //--------------------------------------------------------------------
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);
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);
146 #include "clitkSegmentationUtils.txx"