1 #ifndef CLITKIMAGEUTILITIES_TXX
2 #define CLITKIMAGEUTILITIES_TXX
4 =================================================
5 * @file clitkImageUtilities.txx
6 * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
7 * @date 22 Sep 2006 10:39:48
12 =================================================*/
14 //====================================================================
15 // Compute the number of different intensities in an image
16 template<class ImageType>
17 int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image,
18 std::vector<typename ImageType::PixelType> & l)
20 //std::set<typename ImageType::PixelType> listOfIntensities;
21 std::map<typename ImageType::PixelType, bool> listOfIntensities;
22 // listOfIntensities.resize(0);
23 typedef itk::ImageRegionConstIterator<ImageType> ConstIteratorType;
24 ConstIteratorType pi(image, image->GetLargestPossibleRegion());
26 while (!pi.IsAtEnd()) {
27 if (!listOfIntensities[pi.Get()]) listOfIntensities[pi.Get()] = true;
28 // if (std::find(listOfIntensities.begin(),
29 // listOfIntensities.end(),
30 // pi.Get()) == listOfIntensities.end()) {
31 // listOfIntensities.insert(pi.Get());
36 //typename std::set<typename ImageType::PixelType>::const_iterator ppi = listOfIntensities.begin();
37 typename std::map<typename ImageType::PixelType, bool>::const_iterator ppi = listOfIntensities.begin();
38 while (ppi != listOfIntensities.end()) {
39 l.push_back(ppi->first);
43 return listOfIntensities.size();
45 //====================================================================
47 //====================================================================
48 template<class InputImageType, class MaskImageType>
49 void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input,
50 const typename MaskImageType::Pointer & mask,
51 const std::vector<typename MaskImageType::PixelType> & listOfIntensities,
52 std::map<typename MaskImageType::PixelType,
53 std::map<typename InputImageType::PixelType, double> > & mapOfLabelsAndWeights) {
55 if (input->GetLargestPossibleRegion() != mask->GetLargestPossibleRegion()) {
56 itkGenericExceptionMacro(<< "Input and mask images have not the same size"
58 << "Input = " << input->GetLargestPossibleRegion()
60 << "Mask = " << mask->GetLargestPossibleRegion());
64 mapOfLabelsAndWeights.clear();
67 typedef itk::ImageRegionConstIterator<InputImageType> ConstInputIteratorType;
68 ConstInputIteratorType pi(input, input->GetLargestPossibleRegion());
69 typedef itk::ImageRegionConstIterator<MaskImageType> ConstMaskIteratorType;
70 ConstMaskIteratorType pm(mask, mask->GetLargestPossibleRegion());
73 while (!pi.IsAtEnd()) {
74 mapOfLabelsAndWeights[pm.Get()][pi.Get()]++;
79 //====================================================================
81 // //====================================================================
82 // template<class ImageType>
83 // typename ImageType::Pointer NewImage3D(int x, int y, int z, float dx, float dy, float dz) {
84 // typename ImageType::Pointer output = ImageType::New();
85 // typename ImageType::RegionType region;
86 // typename ImageType::SizeType size;
90 // region.SetSize(size);
91 // output->SetRegions(region);
92 // output->Allocate();
93 // typename ImageType::SpacingType spacing;
97 // output->SetSpacing(spacing);
100 // //====================================================================
103 #endif /* end #define CLITKIMAGEUTILITIES_TXX */