Difference between revisions of "NAMIC Wiki:DTI:ITK"
From NAMIC Wiki
m (Update from Wiki) |
m (Update from Wiki) |
||
| Line 1: | Line 1: | ||
| − | == | + | == Test for the Diffusion Tensor pixel type == |
| − | + | The following code is a typical test file for the functionalities implemented in the DiffusionTensorPixel type. It also exercises the use of this pixel type in an itk::Image instantiation. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<nowiki> | <nowiki> | ||
| − | # | + | #if defined(_MSC_VER) |
| − | # | + | #pragma warning ( disable : 4786 ) |
| + | #endif | ||
| + | |||
| + | #include <iostream> | ||
| + | |||
#include "itkDiffusionTensorPixel.h" | #include "itkDiffusionTensorPixel.h" | ||
| − | #include " | + | #include "itkImage.h" |
| + | #include "itkImageRegionIterator.h" | ||
| − | + | int itkDiffusionTensorPixelTest(int, char* [] ) | |
{ | { | ||
| + | int i, j; | ||
| − | + | // Test it all | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | float val[6] = {1.8, 0.2, 0.5, 3.4, 2.0, 1.2}; | ||
| + | itk::DiffusionTensorPixel<float> pixel(val); | ||
| + | unsigned char pixelInit0[6] = {255, 255, 255}; | ||
| + | unsigned char pixelInit1[6] = {255, 255, 244}; | ||
| + | itk::DiffusionTensorPixel<unsigned char> pixelArray[2]; | ||
| + | pixelArray[0] = pixelInit0; | ||
| + | pixelArray[1] = pixelInit1; | ||
| − | + | std::cout << "sizeof(pixel) = " << sizeof (pixel) << std::endl; | |
| − | + | if (sizeof(pixel) != 6 * sizeof(itk::DiffusionTensorPixel<float>::ComponentType)) | |
| − | + | { | |
| − | + | std::cerr << "ERROR: sizeof(pixel) == " << sizeof(pixel) << " but is should be " << 6 * sizeof(itk::DiffusionTensorPixel<float>::ComponentType) << std::endl; | |
| − | + | return 1; | |
| − | + | } | |
| − | + | std::cout << "pixel.GetNumberOfComponents = " << pixel.GetNumberOfComponents() << std::endl; | |
| − | + | std::cout << "pixel.GetNthComponent()" << std::endl; | |
| − | + | for (i = 0; i < pixel.GetNumberOfComponents(); i++) | |
| − | + | { | |
| − | + | std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl; | |
| + | } | ||
| + | pixel(0,0) = 11.0; | ||
| + | pixel(0,1) = 21.0; | ||
| + | pixel(0,2) = 15.0; | ||
| + | pixel(1,0) = 11.0; | ||
| + | pixel(1,1) = 31.0; | ||
| + | pixel(1,2) = 10.0; | ||
| + | pixel(2,0) = 11.0; // these three last element will overwrite its symmetric counterparts | ||
| + | pixel(2,1) = 41.0; | ||
| + | pixel(2,2) = 14.0; | ||
| − | + | std::cout << "testing the pixel(i,j) APID" << std::endl; | |
| − | + | for (i = 0; i < pixel.GetNumberOfComponents(); i++) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | for( | ||
{ | { | ||
| − | + | std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl; | |
} | } | ||
| − | |||
| − | |||
| + | std::cout << "pixel[0] = 111; pixel[1] = 222; pixel[2] = 333;" << std::endl; | ||
| + | std::cout << "pixel[3] = 444; pixel[4] = 555; pixel[5] = 666;" << std::endl; | ||
| + | |||
| + | pixel[0] = 111; pixel[1] = 222; pixel[2] = 333; | ||
| + | pixel[3] = 444; pixel[4] = 555; pixel[5] = 666; | ||
| + | for (i = 0; i < pixel.GetNumberOfComponents(); i++) | ||
| + | { | ||
| + | std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl; | ||
| + | } | ||
| + | std::cout << "std::cout << pixel << std::endl;" << std::endl; | ||
| + | std::cout << "\t" << pixel << std::endl; | ||
| − | + | for (j = 0; j < 2; j++) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | for( | ||
{ | { | ||
| − | + | std::cout << "pixelArray["<< j << "].GetNumberOfComponents = " << pixelArray[j].GetNumberOfComponents() << std::endl; | |
| + | std::cout << "pixelArray[" << j << "].GetNthComponent()" << std::endl; | ||
| + | for (i = 0; i < pixelArray[j].GetNumberOfComponents(); i++) | ||
| + | { | ||
| + | std::cout << "\tpixelArray[" << j << "].GetNthComponent(" << i << ") = " << static_cast<int>(pixelArray[j].GetNthComponent(i)) << std::endl; | ||
| + | } | ||
} | } | ||
| − | |||
| − | |||
| + | std::cout << "Testing arithmetic methods" << std::endl; | ||
| + | itk::DiffusionTensorPixel< float > pa; | ||
| + | itk::DiffusionTensorPixel< float > pb; | ||
| + | |||
| + | pa[0] = 1.25; | ||
| + | pa[1] = 3.25; | ||
| + | pa[2] = 5.25; | ||
| + | pa[3] = 1.25; | ||
| + | pa[4] = 3.25; | ||
| + | pa[5] = 5.25; | ||
| + | |||
| + | pb[0] = 1.55; | ||
| + | pb[1] = 3.55; | ||
| + | pb[2] = 5.55; | ||
| + | pb[3] = 1.55; | ||
| + | pb[4] = 3.55; | ||
| + | pb[5] = 5.55; | ||
| + | |||
| + | itk::DiffusionTensorPixel< float > pc; | ||
| + | |||
| + | pc = pa + pb; | ||
| + | std::cout << "addition = " << pc << std::endl; | ||
| + | pc = pa - pb; | ||
| + | std::cout << "subtraction = " << pc << std::endl; | ||
| − | + | pc += pb; | |
| − | + | std::cout << "in-place addition = " << pc << std::endl; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | pc -= pb; | ||
| + | std::cout << "in-place subtraction = " << pc << std::endl; | ||
| + | pc = pa * 3.2; | ||
| + | std::cout << "product by scalar = " << pc << std::endl; | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | /** Create an Image of tensors */ | ||
| + | typedef itk::DiffusionTensorPixel< float > PixelType; | ||
| + | typedef itk::Image< PixelType, 3 > ImageType; | ||
| + | ImageType::Pointer dti = ImageType::New(); | ||
| + | ImageType::SizeType size; | ||
| + | ImageType::IndexType start; | ||
| + | ImageType::RegionType region; | ||
| − | + | region.SetIndex( start ); | |
| − | + | region.SetSize( size ); | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | dti->SetRegions( region ); | ||
| + | dti->Allocate(); | ||
| − | + | ImageType::SpacingType spacing; | |
| − | + | spacing[0] = 0.5; | |
| − | + | spacing[1] = 0.5; | |
| − | + | spacing[2] = 1.5; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | ImageType::PointType origin; | ||
| + | origin[0] = 25.5; | ||
| + | origin[1] = 25.5; | ||
| + | origin[2] = 27.5; | ||
| + | dti->SetOrigin( origin ); | ||
| + | dti->SetSpacing( spacing ); | ||
| − | + | PixelType tensor; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | tensor[0] = 1.2; | ||
| + | tensor[1] = 2.2; | ||
| + | tensor[2] = 3.2; | ||
| + | tensor[3] = 4.2; | ||
| + | tensor[4] = 5.2; | ||
| + | tensor[5] = 6.2; | ||
| + | dti->FillBuffer( tensor ); | ||
| + | typedef itk::ImageRegionIterator< ImageType > IteratorType; | ||
| + | IteratorType it( dti, region ); | ||
| + | it.GoToBegin(); | ||
| − | + | while( !it.IsAtEnd() ) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{ | { | ||
| − | + | it.Set( tensor ); | |
| + | ++it; | ||
} | } | ||
| − | |||
| − | |||
| − | + | return EXIT_SUCCESS; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | return | ||
} | } | ||
| − | |||
| − | |||
| − | |||
</nowiki> | </nowiki> | ||
Revision as of 13:31, 18 December 2006
Home < NAMIC Wiki:DTI:ITKTest for the Diffusion Tensor pixel type
The following code is a typical test file for the functionalities implemented in the DiffusionTensorPixel type. It also exercises the use of this pixel type in an itk::Image instantiation.
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#include <iostream>
#include "itkDiffusionTensorPixel.h"
#include "itkImage.h"
#include "itkImageRegionIterator.h"
int itkDiffusionTensorPixelTest(int, char* [] )
{
int i, j;
// Test it all
float val[6] = {1.8, 0.2, 0.5, 3.4, 2.0, 1.2};
itk::DiffusionTensorPixel<float> pixel(val);
unsigned char pixelInit0[6] = {255, 255, 255};
unsigned char pixelInit1[6] = {255, 255, 244};
itk::DiffusionTensorPixel<unsigned char> pixelArray[2];
pixelArray[0] = pixelInit0;
pixelArray[1] = pixelInit1;
std::cout << "sizeof(pixel) = " << sizeof (pixel) << std::endl;
if (sizeof(pixel) != 6 * sizeof(itk::DiffusionTensorPixel<float>::ComponentType))
{
std::cerr << "ERROR: sizeof(pixel) == " << sizeof(pixel) << " but is should be " << 6 * sizeof(itk::DiffusionTensorPixel<float>::ComponentType) << std::endl;
return 1;
}
std::cout << "pixel.GetNumberOfComponents = " << pixel.GetNumberOfComponents() << std::endl;
std::cout << "pixel.GetNthComponent()" << std::endl;
for (i = 0; i < pixel.GetNumberOfComponents(); i++)
{
std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl;
}
pixel(0,0) = 11.0;
pixel(0,1) = 21.0;
pixel(0,2) = 15.0;
pixel(1,0) = 11.0;
pixel(1,1) = 31.0;
pixel(1,2) = 10.0;
pixel(2,0) = 11.0; // these three last element will overwrite its symmetric counterparts
pixel(2,1) = 41.0;
pixel(2,2) = 14.0;
std::cout << "testing the pixel(i,j) APID" << std::endl;
for (i = 0; i < pixel.GetNumberOfComponents(); i++)
{
std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl;
}
std::cout << "pixel[0] = 111; pixel[1] = 222; pixel[2] = 333;" << std::endl;
std::cout << "pixel[3] = 444; pixel[4] = 555; pixel[5] = 666;" << std::endl;
pixel[0] = 111; pixel[1] = 222; pixel[2] = 333;
pixel[3] = 444; pixel[4] = 555; pixel[5] = 666;
for (i = 0; i < pixel.GetNumberOfComponents(); i++)
{
std::cout << "\tpixel[" << i << "] = " << pixel.GetNthComponent(i) << std::endl;
}
std::cout << "std::cout << pixel << std::endl;" << std::endl;
std::cout << "\t" << pixel << std::endl;
for (j = 0; j < 2; j++)
{
std::cout << "pixelArray["<< j << "].GetNumberOfComponents = " << pixelArray[j].GetNumberOfComponents() << std::endl;
std::cout << "pixelArray[" << j << "].GetNthComponent()" << std::endl;
for (i = 0; i < pixelArray[j].GetNumberOfComponents(); i++)
{
std::cout << "\tpixelArray[" << j << "].GetNthComponent(" << i << ") = " << static_cast<int>(pixelArray[j].GetNthComponent(i)) << std::endl;
}
}
std::cout << "Testing arithmetic methods" << std::endl;
itk::DiffusionTensorPixel< float > pa;
itk::DiffusionTensorPixel< float > pb;
pa[0] = 1.25;
pa[1] = 3.25;
pa[2] = 5.25;
pa[3] = 1.25;
pa[4] = 3.25;
pa[5] = 5.25;
pb[0] = 1.55;
pb[1] = 3.55;
pb[2] = 5.55;
pb[3] = 1.55;
pb[4] = 3.55;
pb[5] = 5.55;
itk::DiffusionTensorPixel< float > pc;
pc = pa + pb;
std::cout << "addition = " << pc << std::endl;
pc = pa - pb;
std::cout << "subtraction = " << pc << std::endl;
pc += pb;
std::cout << "in-place addition = " << pc << std::endl;
pc -= pb;
std::cout << "in-place subtraction = " << pc << std::endl;
pc = pa * 3.2;
std::cout << "product by scalar = " << pc << std::endl;
/** Create an Image of tensors */
typedef itk::DiffusionTensorPixel< float > PixelType;
typedef itk::Image< PixelType, 3 > ImageType;
ImageType::Pointer dti = ImageType::New();
ImageType::SizeType size;
ImageType::IndexType start;
ImageType::RegionType region;
region.SetIndex( start );
region.SetSize( size );
dti->SetRegions( region );
dti->Allocate();
ImageType::SpacingType spacing;
spacing[0] = 0.5;
spacing[1] = 0.5;
spacing[2] = 1.5;
ImageType::PointType origin;
origin[0] = 25.5;
origin[1] = 25.5;
origin[2] = 27.5;
dti->SetOrigin( origin );
dti->SetSpacing( spacing );
PixelType tensor;
tensor[0] = 1.2;
tensor[1] = 2.2;
tensor[2] = 3.2;
tensor[3] = 4.2;
tensor[4] = 5.2;
tensor[5] = 6.2;
dti->FillBuffer( tensor );
typedef itk::ImageRegionIterator< ImageType > IteratorType;
IteratorType it( dti, region );
it.GoToBegin();
while( !it.IsAtEnd() )
{
it.Set( tensor );
++it;
}
return EXIT_SUCCESS;
}