1
/*=========================================================================
3
Program: Insight Segmentation & Registration Toolkit
4
Module: $RCSfile: itkSymmetricSecondRankTensorImageReadTest.cxx,v $
6
Date: $Date: 2008-01-27 18:31:29 $
7
Version: $Revision: 1.4 $
9
Copyright (c) Insight Software Consortium. All rights reserved.
10
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
12
This software is distributed WITHOUT ANY WARRANTY; without even
13
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14
PURPOSE. See the above copyright notices for more information.
16
=========================================================================*/
18
#pragma warning ( disable : 4786 )
22
#include "itkImageFileReader.h"
23
#include "itkImageFileWriter.h"
25
#include "itkSymmetricSecondRankTensor.h"
26
#include "itkImageRegionIterator.h"
29
int itkSymmetricSecondRankTensorImageReadTest( int ac, char* av[] )
33
std::cerr << "Usage: " << av[0] << " Input\n";
37
typedef itk::SymmetricSecondRankTensor<float, 3> TensorPixelType;
38
typedef itk::Image<TensorPixelType, 3> TensorImageType;
40
typedef itk::Matrix<float,3,3> MatrixPixelType;
41
typedef itk::Image<MatrixPixelType, 3> MatrixImageType;
43
MatrixImageType::Pointer matrixImage = MatrixImageType::New();
45
MatrixImageType::SizeType size;
48
MatrixImageType::IndexType start;
51
MatrixImageType::RegionType region;
52
region.SetIndex( start );
53
region.SetSize( size );
55
matrixImage->SetRegions( region );
56
matrixImage->Allocate();
58
MatrixPixelType matrixPixel;
60
matrixPixel[0][0] = 1;
61
matrixPixel[0][1] = 2;
62
matrixPixel[0][2] = 3;
64
matrixPixel[1][0] = 2;
65
matrixPixel[1][1] = 4;
66
matrixPixel[1][2] = 5;
68
matrixPixel[2][0] = 3;
69
matrixPixel[2][1] = 5;
70
matrixPixel[2][2] = 6;
72
itk::ImageRegionIterator< MatrixImageType > itr( matrixImage, region );
76
while( !itr.IsAtEnd() )
78
itr.Set( matrixPixel );
79
for(unsigned int i=0; i<3; i++)
81
for(unsigned int j=0; j<3; j++)
89
typedef itk::ImageFileWriter< MatrixImageType > MatrixWriterType;
91
MatrixWriterType::Pointer matrixWriter = MatrixWriterType::New();
93
matrixWriter->SetInput( matrixImage );
94
matrixWriter->SetFileName( av[1] );
98
matrixWriter->Update();
100
catch( itk::ExceptionObject & excp )
102
std::cerr << excp << std::endl;
107
typedef itk::ImageFileReader< TensorImageType > TensorReaderType;
109
TensorReaderType::Pointer tensorReader = TensorReaderType::New();
111
tensorReader->SetFileName( av[1] );
115
tensorReader->Update();
117
catch( itk::ExceptionObject & excp )
119
std::cerr << excp << std::endl;
123
TensorImageType::ConstPointer tensorImage = tensorReader->GetOutput();
125
// Compare the read values to the original values
126
const float tolerance = 1e-5;
128
itk::ImageRegionConstIterator< TensorImageType > tItr( tensorImage, region );
129
itk::ImageRegionConstIterator< MatrixImageType > mItr( matrixImage, region );
134
while( !mItr.IsAtEnd() )
136
matrixPixel = mItr.Get();
137
const TensorPixelType tensorPixel = tItr.Get();
139
for(unsigned int i=0; i<3; i++)
141
for(unsigned int j=0; j<3; j++)
143
if( vcl_abs( matrixPixel[i][j] - tensorPixel(i,j) ) > tolerance )
145
std::cerr << "Tensor read does not match expected values " << std::endl;
146
std::cerr << "Index " << tItr.GetIndex() << std::endl;
147
std::cerr << "Tensor value " << std::endl << tensorPixel << std::endl;
148
std::cerr << "Matrix value " << std::endl << matrixPixel << std::endl;