Hello listserve,<br><br>I have a question about the filter SpatialObjectToImageStatisticsCalculator,<br><a href="http://www.itk.org/Doxygen/html/classitk_1_1SpatialObjectToImageStatisticsCalculator.html">http://www.itk.org/Doxygen/html/classitk_1_1SpatialObjectToImageStatisticsCalculator.html</a> .<br>
<br>I was wondering about the GetCovarianceMatrix() function.  If I call this function with a 2-D image mask spatial object it gives me back a 1 by 1 matrix whose only entry seems to be the variance of the pixels within my spatial object.  But, this is just the trace of the covariance matrix and not a covariance matrix.  I was wondering why the funciton is named the way it is, and how I would have to use it to get out a covariance matrix, and what would be the covarying?<br>
<br>Here is some example code to illustrate what I am talking about:<br><br><br>#include &quot;itkImage.h&quot;<br>#include &lt;itkImageMaskSpatialObject.h&gt;<br>#include &quot;itkSpatialObjectToImageStatisticsCalculator.h&quot;<br>
#include &quot;itkRandomImageSource.h&quot;<br><br>int main( int argc, char *argv[])<br>{<br><br>  <br>  //Define image types <br>  typedef itk::Image&lt; float, 2 &gt;  FloatImageType;<br>  typedef itk::Image&lt; unsigned char, 2 &gt; MaskImageType;<br>
 <br>  //Make random image <br>  itk::Size&lt;2&gt; size;<br>  size.Fill(100);<br> <br>  itk::RandomImageSource&lt;FloatImageType&gt;::Pointer randomImageSource =<br>    itk::RandomImageSource&lt;FloatImageType&gt;::New();<br>
  randomImageSource-&gt;SetSize(size);<br>  randomImageSource-&gt;SetNumberOfThreads(2);<br>  randomImageSource-&gt;SetMax(1.0);<br>  randomImageSource-&gt;SetMin(0.0);<br>  double  spacing[2];<br>  spacing[0] = .5;<br>  spacing[1] = 1.0;<br>
  randomImageSource-&gt;SetSpacing(spacing);<br>  randomImageSource-&gt;Update();<br> <br>  //Make mask image <br>  MaskImageType::Pointer maskImage = MaskImageType::New(); <br>  maskImage-&gt;SetSpacing(randomImageSource-&gt;GetOutput()-&gt;GetSpacing());<br>
  maskImage-&gt;SetOrigin(randomImageSource-&gt;GetOutput()-&gt;GetOrigin());<br>  maskImage-&gt;SetRegions(randomImageSource-&gt;GetOutput()-&gt;GetLargestPossibleRegion());<br><br>  maskImage-&gt;Allocate();<br>  maskImage-&gt;FillBuffer(0);<br>
  <br>  <br>  //Create a 20 by 20 mask region<br>  for(int r = 0 ; r &lt; 20; r++)<br>       {<br>         for(int c = 0; c &lt; 20 ; c++)<br>         {<br>                  MaskImageType::IndexType pixelIndex;<br>                  pixelIndex[0] = r;<br>
                  pixelIndex[1] = c;<br>                  <br>                  maskImage-&gt;SetPixel(pixelIndex, 255);<br>        }<br>  }<br><br>  <br>  //Create a spatial object to store the mask<br>  typedef itk::ImageMaskSpatialObject&lt;2&gt; maskObjectType;<br>
  maskObjectType::Pointer maskObject = maskObjectType::New();<br>  maskObject-&gt;SetImage(maskImage);<br>  maskObject-&gt;Update();<br>  <br><br>  ///////////////////////////////////////////////////////////////////// <br>
  /////////////COMPUTE MEAN AND STANDARD DEVIATION INSIDE MASK///////// <br>  ///////////////////////////////////////////////////////////////////// <br>  <br>  typedef itk::SpatialObjectToImageStatisticsCalculator&lt;FloatImageType, maskObjectType &gt; CalculatorType;<br>
<br>  CalculatorType::Pointer calculator = CalculatorType::New();<br>  <br>  calculator-&gt;SetImage(randomImageSource-&gt;GetOutput());<br>  calculator-&gt;SetSpatialObject( maskObject);<br>  calculator-&gt;Update();<br>
  std::cout &lt;&lt; &quot;Number of pixels inside maske are: &quot; &lt;&lt; calculator-&gt;GetNumberOfPixels() &lt;&lt; std::endl;<br>  std::cout &lt;&lt; &quot;Sample mean inside:&quot; &lt;&lt; std::endl &lt;&lt;  calculator-&gt;GetMean() &lt;&lt; std::endl ;<br>
  CalculatorType::MatrixType matrix;<br>  matrix =  calculator-&gt;GetCovarianceMatrix();<br>  std::cout &lt;&lt; &quot;The variance of the pixels in the mask are: &quot; &lt;&lt; matrix(0,0) &lt;&lt; std::endl;<br>  std::cout &lt;&lt; &quot;Expected variance of uniform distribution on (0,1) is 1/12 or .0833 \n&quot; &lt;&lt; std::endl;  <br>
<br>  return 0;<br>}<br><br>