📄 itkbsplinedeformabletransformtest.cxx
字号:
const JacobianType & jacobian = transform->GetJacobian( inputPoint );
PRINT_VALUE( 0, n );
PRINT_VALUE( 1, n );
PRINT_VALUE( 2, n );
std::cout << std::endl;
}
{
// point outside the grid support region
inputPoint.Fill( -10.0 );
const JacobianType & jacobian = transform->GetJacobian( inputPoint );
PRINT_VALUE( 0, n );
PRINT_VALUE( 1, n );
PRINT_VALUE( 2, n );
std::cout << std::endl;
}
/**
* TODO: add test to check the numerical accuarcy of the jacobian output
*/
/**
* TransformVector and TransformCovariant are not applicable for this
* transform and should throw exceptions
*/
{
typedef TransformType::InputVectorType VectorType;
VectorType vector;
vector.Fill ( 1.0 );
bool pass = false;
try
{
transform->TransformVector( vector );
}
catch( itk::ExceptionObject & err )
{
std::cout << "Caught expected exception." << std::endl;
std::cout << err << std::endl;
pass = true;
}
if ( !pass )
{
std::cout << "Did not catch expected exception." << std::endl;
std::cout << "Test failed. " << std::endl;
return EXIT_FAILURE;
}
}
{
typedef TransformType::InputCovariantVectorType VectorType;
VectorType vector;
vector.Fill ( 1.0 );
bool pass = false;
try
{
transform->TransformCovariantVector( vector );
}
catch( itk::ExceptionObject & err )
{
std::cout << "Caught expected exception." << std::endl;
std::cout << err << std::endl;
pass = true;
}
if ( !pass )
{
std::cout << "Did not catch expected exception." << std::endl;
std::cout << "Test failed. " << std::endl;
return EXIT_FAILURE;
}
}
{
typedef TransformType::InputVnlVectorType VectorType;
VectorType vector;
vector.fill ( 1.0 );
bool pass = false;
try
{
transform->TransformVector( vector );
}
catch( itk::ExceptionObject & err )
{
std::cout << "Caught expected exception." << std::endl;
std::cout << err << std::endl;
pass = true;
}
if ( !pass )
{
std::cout << "Did not catch expected exception." << std::endl;
std::cout << "Test failed. " << std::endl;
return EXIT_FAILURE;
}
}
{
bool pass = false;
try
{
ParametersType temp( transform->GetNumberOfParameters() - 1 );
temp.Fill( 4.0 );
transform->SetParameters( temp );
}
catch( itk::ExceptionObject & err )
{
std::cout << "Caught expected exception." << std::endl;
std::cout << err << std::endl;
pass = true;
}
if ( !pass )
{
std::cout << "Did not catch expected exception." << std::endl;
std::cout << "Test failed. " << std::endl;
return EXIT_FAILURE;
}
}
/**
* Exercise other methods
*/
std::cout << transform->GetGridRegion() << std::endl;
std::cout << transform->GetGridSpacing() << std::endl;
std::cout << transform->GetGridOrigin() << std::endl;
std::cout << transform->GetValidRegion() << std::endl;
typedef itk::BSplineDeformableTransform<CoordinateRepType,SpaceDimension,2>
EvenOrderTransformType;
EvenOrderTransformType::Pointer evenOrderTransform = EvenOrderTransformType::New();
/**
* Parameters should remain even when the transform has been destroyed
*/
transform = NULL;
if ( outParametersCopy != parameters )
{
std::cout << "parameters should remain intact after transform is destroyed";
std::cout << std::endl;
std::cout << "Test failed." << std::endl;
return EXIT_FAILURE;
}
std::cout << "Test passed." << std::endl;
return EXIT_SUCCESS;
}
int itkBSplineDeformableTransformTest2()
{
/**
* This function tests the Set/GetCoefficientImage interface
*/
itk::OutputWindow::SetInstance(itk::TextOutput::New());
unsigned int j;
/**
* Define a vector field as Dimension number of images
*/
const unsigned int Dimension = 2;
typedef double PixelType;
typedef itk::Image<PixelType,Dimension> ImageType;
// Set up field spacing, origin, region
double spacing[Dimension];
double origin[Dimension];
ImageType::SizeType size;
ImageType::RegionType region;
for ( j = 0; j < Dimension; j++ )
{
spacing[j] = 10.0;
origin[j] = -10.0;
}
size[0] = 5;
size[1] = 7;
region.SetSize( size );
ImageType::Pointer field[Dimension];
for ( j = 0; j < Dimension; j++ )
{
field[j] = ImageType::New();
field[j]->SetSpacing( spacing );
field[j]->SetOrigin( origin );
field[j]->SetRegions( region );
field[j]->Allocate();
}
// fill the field with a constant displacment
itk::Vector<double,Dimension> v;
v[0] = 5;
v[1] = 7;
for ( j = 0; j < Dimension; j++ )
{
field[j]->FillBuffer( v[j] );
}
// Set up the transform
const unsigned int SplineOrder = 3;
typedef double CoordRep;
typedef itk::BSplineDeformableTransform<CoordRep,Dimension,SplineOrder> TransformType;
TransformType::InputPointType inputPoint;
TransformType::OutputPointType outputPoint;
TransformType::Pointer transform = TransformType::New();
// This should generate a warning about parameters not being set
inputPoint.Fill( 0.0 );
outputPoint = transform->TransformPoint( inputPoint );
// Set the coefficient images
transform->SetCoefficientImage( field );
// Exercise get and print methods
transform->Print( std::cout );
std::cout << "CoefficientImage[0]: "
<< transform->GetCoefficientImage()[0].GetPointer() << std::endl;
/**
* Transform some points
*/
try
{
// try a point inside the valide region
inputPoint.Fill( 10.0 );
outputPoint = transform->TransformPoint( inputPoint );
std::cout << " InputPoint: " << inputPoint;
std::cout << " OutputPoint: " << outputPoint;
std::cout << std::endl;
// try a point on the valid region boundary
inputPoint.Fill( 0.0 );
outputPoint = transform->TransformPoint( inputPoint );
std::cout << " InputPoint: " << inputPoint;
std::cout << " OutputPoint: " << outputPoint;
std::cout << std::endl;
// try a point on the valid region boundary
inputPoint[0] = 19.9;
inputPoint[1] = 30.0;
outputPoint = transform->TransformPoint( inputPoint );
std::cout << " InputPoint: " << inputPoint;
std::cout << " OutputPoint: " << outputPoint;
std::cout << std::endl;
// try a point outside the valid region
inputPoint[0] = 20.0;
inputPoint[1] = 30.0;
outputPoint = transform->TransformPoint( inputPoint );
std::cout << " InputPoint: " << inputPoint;
std::cout << " OutputPoint: " << outputPoint;
std::cout << std::endl;
}
catch( itk::ExceptionObject& err )
{
std::cout << err << std::endl;
return EXIT_FAILURE;
}
std::cout << "Test passed." << std::endl;
return EXIT_SUCCESS;
}
int itkBSplineDeformableTransformTest(int, char * [] )
{
bool failed;
failed = itkBSplineDeformableTransformTest1();
if ( failed ) { return EXIT_FAILURE; }
failed = itkBSplineDeformableTransformTest2();
if ( failed ) { return EXIT_FAILURE; }
return EXIT_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -