[Insight-users] SpatialObjectToImageStatisticsCalculator standard deviation
Nick Rubert
ncrubert at gmail.com
Sat Oct 8 19:12:40 EDT 2011
Hello listserve,
I have a question about the filter SpatialObjectToImageStatisticsCalculator,
http://www.itk.org/Doxygen/html/classitk_1_1SpatialObjectToImageStatisticsCalculator.html.
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?
Here is some example code to illustrate what I am talking about:
#include "itkImage.h"
#include <itkImageMaskSpatialObject.h>
#include "itkSpatialObjectToImageStatisticsCalculator.h"
#include "itkRandomImageSource.h"
int main( int argc, char *argv[])
{
//Define image types
typedef itk::Image< float, 2 > FloatImageType;
typedef itk::Image< unsigned char, 2 > MaskImageType;
//Make random image
itk::Size<2> size;
size.Fill(100);
itk::RandomImageSource<FloatImageType>::Pointer randomImageSource =
itk::RandomImageSource<FloatImageType>::New();
randomImageSource->SetSize(size);
randomImageSource->SetNumberOfThreads(2);
randomImageSource->SetMax(1.0);
randomImageSource->SetMin(0.0);
double spacing[2];
spacing[0] = .5;
spacing[1] = 1.0;
randomImageSource->SetSpacing(spacing);
randomImageSource->Update();
//Make mask image
MaskImageType::Pointer maskImage = MaskImageType::New();
maskImage->SetSpacing(randomImageSource->GetOutput()->GetSpacing());
maskImage->SetOrigin(randomImageSource->GetOutput()->GetOrigin());
maskImage->SetRegions(randomImageSource->GetOutput()->GetLargestPossibleRegion());
maskImage->Allocate();
maskImage->FillBuffer(0);
//Create a 20 by 20 mask region
for(int r = 0 ; r < 20; r++)
{
for(int c = 0; c < 20 ; c++)
{
MaskImageType::IndexType pixelIndex;
pixelIndex[0] = r;
pixelIndex[1] = c;
maskImage->SetPixel(pixelIndex, 255);
}
}
//Create a spatial object to store the mask
typedef itk::ImageMaskSpatialObject<2> maskObjectType;
maskObjectType::Pointer maskObject = maskObjectType::New();
maskObject->SetImage(maskImage);
maskObject->Update();
/////////////////////////////////////////////////////////////////////
/////////////COMPUTE MEAN AND STANDARD DEVIATION INSIDE MASK/////////
/////////////////////////////////////////////////////////////////////
typedef itk::SpatialObjectToImageStatisticsCalculator<FloatImageType,
maskObjectType > CalculatorType;
CalculatorType::Pointer calculator = CalculatorType::New();
calculator->SetImage(randomImageSource->GetOutput());
calculator->SetSpatialObject( maskObject);
calculator->Update();
std::cout << "Number of pixels inside maske are: " <<
calculator->GetNumberOfPixels() << std::endl;
std::cout << "Sample mean inside:" << std::endl << calculator->GetMean()
<< std::endl ;
CalculatorType::MatrixType matrix;
matrix = calculator->GetCovarianceMatrix();
std::cout << "The variance of the pixels in the mask are: " << matrix(0,0)
<< std::endl;
std::cout << "Expected variance of uniform distribution on (0,1) is 1/12
or .0833 \n" << std::endl;
return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20111008/0d88eb26/attachment.htm>
More information about the Insight-users
mailing list