Re: [Insight-users] link error GradientDescentOptimizer
Tomáš Kazmar
Tomash.Kazmar at seznam.cz
Wed Jun 27 17:28:54 EDT 2007
Hi,
my guess would be you do not link with correct/all libraries, do you?
If you use cmake, check the CMakeLists.txt (TARGET_LINK_LIBRARIES).
Tomas
# Hi everybody,
#
# I'm trying to use ITK with my application to compute affine
# transformation parameters from 2 CT images.
# I 've imported 2 3D images from my application and then try to
# registrate them witk ITK, I 've choosen these parameters for the
# registration :
# affinetransform, bsplineinterpolator,gradientdescentoptimizer and
# NormalizedCorrelationImageToImageMetric.
#
# Compilation of objects with g++ is ok, but there is an error during the
# link operation.
# Here is the message :
# essai_ITK_lib.o: In function
# `itk::ObjectFactory<itk::GradientDescentOptimizer>::Create()':
# /home/pannier/src/Insight/Code/Common/itkObjectFactory.h:52: undefined
# reference to `typeinfo for itk::GradientDescentOptimizer'
# /home/pannier/src/Insight/Code/Common/itkObjectFactory.h:53: undefined
# reference to `typeinfo for itk::GradientDescentOptimizer'
# essai_ITK_lib.o: In function `CostFunction':
# /home/pannier/src/Insight/Code/Numerics/itkCostFunction.h:61: undefined
# reference to `vtable for itk::CostFunction'
# essai_ITK_lib.o: In function `~CostFunction':
# /home/pannier/src/Insight/Code/Numerics/itkCostFunction.h:62: undefined
# reference to `vtable for itk::CostFunction'
# essai_ITK_lib.o: In function
# `itk::ImageToImageMetric<itk::Image<unsigned char, 3u>,
# itk::Image<unsigned char, 3u> >::PrintSelf(std::basic_ostream<char,
# std::char_traits<char> >&, itk::Indent) const':
# /home/pannier/src/Insight/Code/Algorithms/itkImageToImageMetric.txx:168:
# undefined reference to
# `itk::CostFunction::PrintSelf(std::basic_ostream<char,
# std::char_traits<char> >&, itk::Indent) const'
# essai_ITK_lib.o: In function `itk::GradientDescentOptimizer::New()':
# /home/pannier/src/Insight/Code/Numerics/itkGradientDescentOptimizer.h:59:
# undefined reference to
# `itk::GradientDescentOptimizer::GradientDescentOptimizer()'
# essai_ITK_lib.o:(.gnu.linkonce.r._ZTIN3itk24SingleValuedCostFunctionE+0x8):
# undefined reference to `typeinfo for itk::CostFunction'
# essai_ITK_lib.o:(.gnu.linkonce.r._ZTVN3itk24SingleValuedCostFunctionE+0x2c):
# undefined reference to
# `itk::CostFunction::PrintSelf(std::basic_ostream<char,
# std::char_traits<char> >&, itk::Indent) const'
# collect2: ld a retourné 1 code d'état d'exécution
#
# Here is my code (essai_ITK_lib.cpp) :
# extern "C"
# {
# VFloat ITK_registrate(VImage ini_ima, VImage ima, VLong coresizex,
# VLong coresizey, VLong coresizez, double xini, double yini, double zini,
# double xgro, double ygro, double zgro, double * x, double * y, double * z)
# {
# typedef unsigned char PixelType;
# const unsigned int Dimension = 3;
# typedef itk::Image< PixelType, Dimension > ImageType;
# typedef itk::ImportImageFilter< PixelType, Dimension >
# ImportFilterType;
# ImportFilterType::Pointer importFilterIni =
# ImportFilterType::New();
# ImportFilterType::Pointer importFilterDefo =
# ImportFilterType::New();
# ImportFilterType::SizeType size;
# size[0] = coresizex; // size along X
# size[1] = coresizey; // size along Y
# size[2] = coresizez; // size along Z
# const unsigned int numberOfPixels = size[0] * size[1] * size[2];
# PixelType * image0;
# PixelType * image1;
# image0 = & VPixel(ini_ima, 0, 0, 0,PixelType);
# image1 = & VPixel(ima, 0, 0, 0,PixelType);
# ImportFilterType::IndexType start;
# start.Fill( 0 );
# ImportFilterType::RegionType region;
# region.SetIndex( start );
# region.SetSize( size );
# importFilterIni->SetRegion( region );
# importFilterDefo->SetRegion( region );
# double origin[ Dimension ];
# origin[0] = 0.0; // X coordinate
# origin[1] = 0.0; // Y coordinate
# origin[2] = 0.0; // Z coordinate
# importFilterIni->SetOrigin( origin );
# importFilterDefo->SetOrigin( origin );
# double spacing[ Dimension ];
# spacing[0] = 1.0; // along X direction
# spacing[1] = 1.0; // along Y direction
# spacing[2] = 1.0; // along Z direction
# importFilterIni->SetSpacing( spacing );
# importFilterDefo->SetSpacing( spacing );
# printf("coucou 94");
# const bool importImageFilterWillOwnTheBuffer = false;
# importFilterIni->SetImportPointer( image0, numberOfPixels,
# importImageFilterWillOwnTheBuffer );
# importFilterDefo->SetImportPointer( image1, numberOfPixels,
# importImageFilterWillOwnTheBuffer );
# typedef itk::AffineTransform<double, Dimension> TransformType;
# typedef itk::GradientDescentOptimizer OptimizerType;
# typedef itk::NormalizedCorrelationImageToImageMetric< ImageType,
# ImageType > MetricType;
# typedef itk::ImageRegistrationMethod<ImageType,ImageType>
# RegistrationType;
# typedef itk::BSplineInterpolateImageFunction<ImageType,double>
# InterpolatorType;
# MetricType::Pointer metric = MetricType::New();
# TransformType::Pointer transform = TransformType::New();
# OptimizerType::Pointer optimizer = OptimizerType::New();
# InterpolatorType::Pointer interpolator = InterpolatorType::New();
# RegistrationType::Pointer registration = RegistrationType::New();
# registration->SetMetric( metric );
# registration->SetOptimizer( optimizer );
# registration->SetTransform( transform );
# registration->SetInterpolator( interpolator );
# registration->SetFixedImage( importFilterIni->GetOutput() );
# registration->SetMovingImage( importFilterDefo->GetOutput() );
# interpolator->SetSplineOrder(3);
#
# registration->SetFixedImageRegion(importFilterIni->GetOutput()->GetBufferedRegion());
# typedef RegistrationType::ParametersType ParametersType;
# ParametersType initialParameters(
# transform->GetNumberOfParameters() );
# initialParameters.Fill( 0.0 );
# initialParameters[0] = 1.0;
# initialParameters[4] = 1.0;
# initialParameters[8] = 1.0;
# registration->SetInitialTransformParameters(initialParameters);
# optimizer->SetLearningRate( 15.0 );
# optimizer->SetNumberOfIterations( 100 );
# try
# {
# registration->Update();
# }
# catch( itk::ExceptionObject & err )
# {
# std::cerr << "ExceptionObject Caught !" << std::endl;
# std::cerr << err << std::endl;
# return -1;
# }
#
# ParametersType finalParameters =
# registration->GetLastTransformParameters();
# std::cout << " parameters :" << finalParameters[0] <<
# finalParameters[1] << finalParameters[2] << finalParameters[3] <<
# finalParameters[4] << finalParameters[5]<< std::endl;
# std::cout << finalParameters[6] << finalParameters[7] <<
# finalParameters[8] << finalParameters[9] << finalParameters[10] <<
# finalParameters[11] << std::endl;
# const unsigned int numberOfIterations =
# optimizer->GetCurrentIteration();
# std::cout<<"number of iterations"<<numberOfIterations<<std::endl;
#
# return(0);
# }
#
# }
#
# Could anybody help me ?
#
# Thanks,
#
# Yannick
# _______________________________________________
# Insight-users mailing list
# Insight-users at itk.org
# http://www.itk.org/mailman/listinfo/insight-users
#
#
#
More information about the Insight-users
mailing list