]> Creatis software - clitk.git/blob - segmentation/clitkStructuresExtractionFilter.txx
Merge branch 'master' into ITKv5
[clitk.git] / segmentation / clitkStructuresExtractionFilter.txx
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://www.centreleonberard.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 // clitk
20 #include "clitkStructuresExtractionFilter.h"
21
22 //--------------------------------------------------------------------
23 template <class TImageType>
24 clitk::StructuresExtractionFilter<TImageType>::
25 StructuresExtractionFilter():
26   clitk::FilterBase(),
27   clitk::FilterWithAnatomicalFeatureDatabaseManagement(),
28   itk::ImageToImageFilter<TImageType, MaskImageType>()
29 {
30   SetBackgroundValue(0);
31   SetForegroundValue(1);
32 }
33 //--------------------------------------------------------------------
34
35
36 //--------------------------------------------------------------------
37 template <class TImageType>
38 void 
39 clitk::StructuresExtractionFilter<TImageType>::
40 AddRelativePositionListFilename(std::string s) {
41   mListOfRelativePositionListFilename.push_back(s);
42 }
43 //--------------------------------------------------------------------
44
45
46 //--------------------------------------------------------------------
47 template <class TImageType>
48 typename clitk::StructuresExtractionFilter<TImageType>::MaskImagePointer
49 clitk::StructuresExtractionFilter<TImageType>::
50 ApplyRelativePositionList(std::string name, MaskImageType * input, bool overlap) 
51
52   // Create all RelativePositionList
53   for(unsigned int i=0; i<mListOfRelativePositionListFilename.size(); i++) {
54     RelPosListPointer rpl = RelPosListType::New();
55     rpl->SetDisplayUsedStructuresOnlyFlag(this->GetDisplayUsedStructuresOnlyFlag());
56     rpl->SetAFDB(GetAFDB());
57     rpl->Read(mListOfRelativePositionListFilename[i]);
58     std::string s = rpl->GetInputName();
59     mMapOfRelativePositionList[s] = rpl;
60   }
61
62   RelPosListPointer relpos;
63   if (mMapOfRelativePositionList.find(name) == mMapOfRelativePositionList.end()) {
64     std::cerr << "Warning: I do not find '" << name << "' in the RelativePositionList." << std::endl;
65     //DD("Not find !"); // do nothing
66   }
67   else {
68     relpos = mMapOfRelativePositionList[name];
69     relpos->SetVerboseStepFlag(GetVerboseStepFlag());
70     relpos->SetCurrentStepBaseId(GetCurrentStepBaseId());
71     relpos->SetCurrentStepId(GetCurrentStepId());
72     relpos->SetCurrentStepNumber(GetCurrentStepNumber());
73     relpos->SetWriteStepFlag(GetWriteStepFlag());
74     relpos->SetInput(input);
75     if (!this->GetDisplayUsedStructuresOnlyFlag() && overlap) {
76       std::string n = name.substr(8,3);
77       MaskImagePointer ref = this->GetAFDB()->template GetImage <MaskImageType>(n+"_Ref");
78       relpos->SetReferenceImageForOverlapMeasure(ref);
79     }
80     relpos->Update();
81     input = relpos->GetOutput();
82
83     SetCurrentStepNumber(relpos->GetCurrentStepNumber());
84   }
85   return input;
86 }
87 //--------------------------------------------------------------------
88