📄 itkrigid3dtransformtest.cxx
字号:
{
Ok = false;
break;
}
}
if( !Ok )
{
std::cerr << "Error rotating point : " << p << std::endl;
std::cerr << "Result should be : " << q << std::endl;
std::cerr << "Reported Result is : " << r << std::endl;
return EXIT_FAILURE;
}
else
{
std::cout << "Ok translating an itk::Point " << std::endl;
}
}
{
// Rotate an itk::Vector
TransformType::InputVectorType::ValueType pInit[3] = {10,10,10};
TransformType::InputVectorType p = pInit;
TransformType::InputPointType q;
q[0] = p[0] * costh + p[1] * sinth;
q[1] = -p[0] * sinth + p[1] * costh;
q[2] = p[2];
TransformType::OutputVectorType r;
r = rotation->TransformVector( p );
for(unsigned int i=0; i<N; i++)
{
if( fabs( q[i] - r[i] ) > epsilon )
{
Ok = false;
break;
}
}
if( !Ok )
{
std::cerr << "Error rotating vector : " << p << std::endl;
std::cerr << "Result should be : " << q << std::endl;
std::cerr << "Reported Result is : " << r << std::endl;
return EXIT_FAILURE;
}
else
{
std::cout << "Ok rotating an itk::Vector " << std::endl;
}
}
{
// Rotate an itk::CovariantVector
TransformType::InputCovariantVectorType::ValueType pInit[3] = {10,10,10};
TransformType::InputCovariantVectorType p = pInit;
TransformType::OutputCovariantVectorType q;
q[0] = p[0] * costh + p[1] * sinth;
q[1] = -p[0] * sinth + p[1] * costh;
q[2] = p[2];
TransformType::OutputCovariantVectorType r;
r = rotation->TransformCovariantVector( p );
for(unsigned int i=0; i<N; i++)
{
if( fabs( q[i] - r[i] ) > epsilon )
{
Ok = false;
break;
}
}
if( !Ok )
{
std::cerr << "Error Rotating covariant vector: " << p << std::endl;
std::cerr << "Result should be : " << q << std::endl;
std::cerr << "Reported Result is : " << r << std::endl;
return EXIT_FAILURE;
}
else
{
std::cout << "Ok translating an itk::CovariantVector " << std::endl;
}
}
{
// Translate a vnl_vector
TransformType::InputVnlVectorType p;
p[0] = 11;
p[1] = 7;
p[2] = 15;
TransformType::OutputVnlVectorType q;
q[0] = p[0] * costh + p[1] * sinth;
q[1] = -p[0] * sinth + p[1] * costh;
q[2] = p[2];
TransformType::OutputVnlVectorType r;
r = rotation->TransformVector( p );
for(unsigned int i=0; i<N; i++)
{
if( fabs( q[i] - r[i] ) > epsilon )
{
Ok = false;
break;
}
}
if( !Ok )
{
std::cerr << "Error translating vnl_vector : " << p << std::endl;
std::cerr << "Result should be : " << q << std::endl;
std::cerr << "Reported Result is : " << r << std::endl;
return EXIT_FAILURE;
}
else
{
std::cout << "Ok translating an vnl_Vector " << std::endl;
}
}
{
// Testing SetParameters()
std::cout << "Testing SetParameters() ... ";
unsigned int j;
TransformType::Pointer t = TransformType::New();
ParametersType p( t->GetNumberOfParameters() );
// attempt to set an non-orthogonal matrix
for( j = 0; j < t->GetNumberOfParameters(); j++ )
{
p[j] = static_cast<double>( j + 1 );
p[j] = vnl_math_sqr( p[j] );
}
Ok = false;
try
{
t->SetParameters( p );
}
catch ( itk::ExceptionObject & itkNotUsed(err) )
{
Ok = true;
}
catch( ... )
{
std::cout << "Caught unknown exception" << std::endl;
}
if( !Ok )
{
std::cerr << "Error: expected to catch an exception when attempting";
std::cerr << " to set an non-orthogonal matrix." << std::endl;
return EXIT_FAILURE;
}
// attempt to set an orthogonal matrix
typedef TransformType::MatrixType MatrixType;
MatrixType matrix;
matrix.GetVnlMatrix().set_identity();
double a = 1.0 / 180.0 * vnl_math::pi;
matrix[0][0] = cos( a );
matrix[0][1] = sin( a );
matrix[1][0] = -1.0 * sin( a );
matrix[1][1] = cos( a );
unsigned int par = 0;
for( unsigned int row = 0; row < 3; row++ )
{
for( unsigned int col = 0; col < 3; col++ )
{
p[par] = matrix[row][col];
++par;
}
}
Ok = true;
try
{
t->SetParameters( p );
}
catch ( itk::ExceptionObject & err )
{
std::cout << err << std::endl;
Ok = false;
}
catch( ... )
{
std::cout << "Caught unknown exception" << std::endl;
Ok = false;
}
if( !Ok )
{
std::cerr << "Error: caught unexpected exception" << std::endl;
return EXIT_FAILURE;
}
std::cout << "done." << std::endl;
}
{
// Testing SetIdentity()
std::cout << "Testing SetIdentity() ... ";
TransformType::Pointer t = TransformType::New();
ParametersType p( t->GetNumberOfParameters() );
t->SetIdentity();
p = t->GetParameters();
// check if all elements is the expected value to within tolerance
ParametersType pIdeal( t->GetNumberOfParameters() );
pIdeal.Fill( 0.0 );
pIdeal[0] = 1.0;
pIdeal[4] = 1.0;
pIdeal[8] = 1.0;
Ok = true;
for( unsigned int par = 0; par < t->GetNumberOfParameters(); par++ )
{
if( vnl_math_abs( p[par] - pIdeal[par] ) > epsilon )
{
std::cerr << "Expected parameters: " << pIdeal << std::endl;
std::cerr << "Actual parameters: " << p << std::endl;
Ok = false;
break;
}
}
if( !Ok )
{
std::cerr << "Test failed." << std::endl;
return EXIT_FAILURE;
}
std::cout << "done. " << std::endl;
}
{
// Testing SetMatrix()
std::cout << "Testing SetMatrix() ... ";
unsigned int par;
typedef TransformType::MatrixType MatrixType;
MatrixType matrix;
TransformType::Pointer t = TransformType::New();
// attempt to set an non-orthogonal matrix
par = 0;
for( unsigned int row = 0; row < 3; row++ )
{
for( unsigned int col = 0; col < 3; col++ )
{
matrix[row][col] = static_cast<double>( par + 1 );
++par;
}
}
Ok = false;
try
{
t->SetMatrix( matrix );
}
catch ( itk::ExceptionObject & itkNotUsed(err) )
{
Ok = true;
}
catch( ... )
{
std::cout << "Caught unknown exception" << std::endl;
}
if( !Ok )
{
std::cerr << "Error: expected to catch an exception when attempting";
std::cerr << " to set an non-orthogonal matrix." << std::endl;
return EXIT_FAILURE;
}
// attempt to set an orthogonal matrix
matrix.GetVnlMatrix().set_identity();
double a = 1.0 / 180.0 * vnl_math::pi;
matrix[0][0] = cos( a );
matrix[0][1] = sin( a );
matrix[1][0] = -1.0 * sin( a );
matrix[1][1] = cos( a );
Ok = true;
try
{
t->SetMatrix( matrix );
}
catch ( itk::ExceptionObject & err )
{
std::cout << err << std::endl;
Ok = false;
}
catch( ... )
{
std::cout << "Caught unknown exception" << std::endl;
Ok = false;
}
if( !Ok )
{
std::cerr << "Error: caught unexpected exception" << std::endl;
return EXIT_FAILURE;
}
std::cout << "done." << std::endl;
}
}
return EXIT_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -