File: itkImageToCooccurrenceListAdaptor.txx

package info (click to toggle)
insighttoolkit 3.18.0-5
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 110,432 kB
  • ctags: 74,559
  • sloc: cpp: 412,627; ansic: 196,210; fortran: 28,000; python: 3,852; tcl: 2,005; sh: 1,186; java: 583; makefile: 458; csh: 220; perl: 193; xml: 20
file content (133 lines) | stat: -rwxr-xr-x 4,004 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: itkImageToCooccurrenceListAdaptor.txx,v $
  Language:  C++
  Date:      $Date: 2009-03-04 15:23:50 $
  Version:   $Revision: 1.6 $

  Copyright (c) Insight Software Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef __itkImageToCooccurrenceListAdaptor_txx
#define __itkImageToCooccurrenceListAdaptor_txx

namespace itk { 
namespace Statistics {

template < class TImage >
ImageToCooccurrenceListAdaptor< TImage >
::ImageToCooccurrenceListAdaptor()
{
  m_Sample = SampleType::New();
  m_Sample->SetMeasurementVectorSize( MeasurementVectorSize );
}

template < class TImage >
void
ImageToCooccurrenceListAdaptor< TImage >
::PrintSelf(std::ostream& os, Indent indent) const
{
  Superclass::PrintSelf(os,indent);
}

template < class TImage >
void
ImageToCooccurrenceListAdaptor< TImage >
::Compute()
{
  typename ShapedNeighborhoodIteratorType::RadiusType radius;
  radius.Fill(1);

  itk::ConstantBoundaryCondition<TImage> boundaryCondition;
  // 0 is valid so I chose -1. Is this valid for all images ?
  boundaryCondition.SetConstant( -1 );

  typedef itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator<
    ImageType > FaceCalculatorType;
                                                                                                                            
  FaceCalculatorType faceCalculator;
  typename FaceCalculatorType::FaceListType faceList;
  typename FaceCalculatorType::FaceListType::iterator fit;

  typedef typename ShapedNeighborhoodIteratorType::ConstIterator ShapeNeighborhoodIterator;

  typedef typename OffsetTable::iterator OffsetIterator;

  typename SampleType::MeasurementVectorType coords;  
                                                                                                                      
  faceList = faceCalculator( this->GetImage(),
                             this->GetImage()->GetRequestedRegion(),
                             radius );

  OffsetType center_offset;
  center_offset.Fill( 0 );

  for ( fit=faceList.begin(); fit != faceList.end(); ++fit) 
    {

    ShapedNeighborhoodIteratorType it(radius, this->GetImage(), *fit );
    it.OverrideBoundaryCondition(&boundaryCondition);

    OffsetIterator iter = m_OffsetTable.begin();
    while( iter != m_OffsetTable.end()  ) 
      {
      it.ActivateOffset(*iter);
      iter++;
      }
                                                                                                                            
    for ( it.GoToBegin(); !it.IsAtEnd(); ++it ) 
      {

      const PixelType center_pixel_intensity = it.GetPixel( center_offset );

      ShapeNeighborhoodIterator ci = it.Begin(); 
      while ( ci != it.End() ) 
        {
        const PixelType pixel_intensity = ci.Get();

        // We have the intensity values for the center pixel and one of it's neighbours.
        // We can now place these in the SampleList
        coords[0] = center_pixel_intensity;
        coords[1] = pixel_intensity;

        m_Sample->PushBack(coords);
        ci++;
        }
      }
    }

}


template < class TImage >
void
ImageToCooccurrenceListAdaptor< TImage >
::UseNeighbor(const OffsetType & offset)
{
  // Don't add the center pixel
  bool isTheCenterPixel = true;
  for(unsigned int i=0; i<ImageDimension; i++)
    {
    if( offset[i] != 0 ) 
      {
      isTheCenterPixel = false;
      break;
      }
    }

  if( !isTheCenterPixel )
    {
    m_OffsetTable.push_back( offset );
    }
}

} // end of namespace Statistics 
} // end of namespace itk

#endif