[Insight-users] RGB Registration
Leidy Paola Dorado Muñoz
doradoleidypao at gmail.com
Wed Nov 19 10:56:46 EST 2008
*Hello all,
I am performing registration of RGB images. Initially,RGB Images are
converted into gray-scale images and with the gray-scale images the
registration is performed, but I get some errors.
Could somebody help me with this problem?
The code is based on example ImageRegistration1. The following is my code:*
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#include "itkRGBPixel.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkVectorResampleImageFilter.h"
#include "itkTranslationTransform.h"
#include "itkVectorLinearInterpolateImageFunction.h"
#include "itkRGBToLuminanceImageFilter.h"
#include "itkResampleImageFilter.h"
#include "itkLinearInterpolateImageFunction.h"
#include "itkImageRegistrationMethod.h"
#include "itkMeanSquaresImageToImageMetric.h"
#include "itkRegularStepGradientDescentOptimizer.h"
#include "itkCastImageFilter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkSubtractImageFilter.h"
class CommandIterationUpdate : public itk::Command
{
public:
typedef CommandIterationUpdate Self;
typedef itk::Command Superclass;
typedef itk::SmartPointer<Self> Pointer;
itkNewMacro( Self );
protected:
CommandIterationUpdate() {};
public:
typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
typedef const OptimizerType *OptimizerPointer;
void Execute(itk::Object *caller, const itk::EventObject & event)
{
Execute( (const itk::Object *)caller, event);
}
void Execute(const itk::Object * object, const itk::EventObject & event)
{
OptimizerPointer optimizer =
dynamic_cast< OptimizerPointer >( object );
if( ! itk::IterationEvent().CheckEvent( &event ) )
{
return;
}
std::cout << optimizer->GetCurrentIteration() << " = ";
std::cout << optimizer->GetValue() << " : ";
std::cout << optimizer->GetCurrentPosition() << std::endl;
}
};
int main( int argc , char ** argv[])
{
if( argc < 4 )
{
std::cerr << "Missing Parameters " << std::endl;
std::cerr << "Usage: " << argv[0];
std::cerr << " fixedImageFile movingImageFile ";
std::cerr << "outputImagefile [differenceImageAfter]";
std::cerr << "[differenceImageBefore]" << std::endl;
return EXIT_FAILURE;
}
typedef itk::RGBPixel<unsigned char> PixelType;
typedef itk::Image< PixelType, 2 > FixedImageType;
typedef itk::Image< PixelType, 2 > MovingImageType;
typedef itk::Image< unsigned char,2 > GrayFixedImageType;
typedef itk::Image< unsigned char,2 > GrayMovingImageType;
typedef itk::TranslationTransform< double, 2 > TransformType;
typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
typedef
itk::MeanSquaresImageToImageMetric<GrayFixedImageType,GrayMovingImageType >
MetricType;
typedef itk::LinearInterpolateImageFunction<GrayMovingImageType, double>
InterpolatorType;
typedef
itk::ImageRegistrationMethod<GrayFixedImageType,GrayMovingImageType >
RegistrationType;
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);
typedef itk::ImageFileReader< FixedImageType > FixedImageReaderType;
typedef itk::ImageFileReader< MovingImageType > MovingImageReaderType;
FixedImageReaderType::Pointer fixedImageReader =
FixedImageReaderType::New();
MovingImageReaderType::Pointer movingImageReader =
MovingImageReaderType::New();
fixedImageReader->SetFileName("Things_new.jpg");
movingImageReader ->SetFileName("Things_new_2.jpg");
typedef itk::RGBToLuminanceImageFilter< FixedImageType,GrayFixedImageType
> FixedGrayType;
typedef itk::RGBToLuminanceImageFilter<
MovingImageType,GrayMovingImageType > MovingGrayType;
FixedGrayType::Pointer grayfilter1 = FixedGrayType::New();
grayfilter1->SetInput( fixedImageReader->GetOutput() );
MovingGrayType::Pointer grayfilter2 = MovingGrayType::New();
grayfilter2->SetInput( movingImageReader->GetOutput() );
registration->SetFixedImage(grayfilter1->GetOutput());
registration->SetMovingImage(grayfilter2->GetOutput());
typedef RegistrationType::ParametersType ParametersType;
ParametersType initialParameters( transform->GetNumberOfParameters() );
initialParameters[0] = 0.0; // Initial offset in mm along X
initialParameters[1] = 0.0; // Initial offset in mm along Y
registration->SetInitialTransformParameters(initialParameters);
optimizer->SetMaximumStepLength( 4.00 );
optimizer->SetMinimumStepLength( 0.01 );
optimizer->SetNumberOfIterations( 200 );
CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New();
optimizer->AddObserver( itk::IterationEvent(), observer );
try
{
registration->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
ParametersType finalParameters =
registration->GetLastTransformParameters();
const double TranslationAlongX = finalParameters[0];
const double TranslationAlongY = finalParameters[1];
const unsigned int numberOfIterations = optimizer->GetCurrentIteration();
const double bestValue = optimizer->GetValue();
std::cout << "Result = " << std::endl;
std::cout << " Translation X = " << TranslationAlongX << std::endl;
std::cout << " Translation Y = " << TranslationAlongY << std::endl;
std::cout << " Iterations = " << numberOfIterations << std::endl;
std::cout << " Metric value = " << bestValue << std::endl;
typedef itk::ResampleImageFilter< GrayFixedImageType,GrayMovingImageType >
ResampleFilterType;
ResampleFilterType::Pointer resampler = ResampleFilterType::New();
resampler->SetInput(grayfilter2->GetOutput() ); // Imagen sensada en gris
resampler->SetTransform(registration->GetOutput()->Get() ); //parametros
dados por la registracion
GrayFixedImageType::Pointer fixedImage = grayfilter1->GetOutput();
//consigue parametros adicionales
resampler->SetSize(fixedImage->GetLargestPossibleRegion().GetSize());
//desde la iamgen de referencia
resampler->SetOutputOrigin(fixedImage->GetOrigin()); // pero en escala
de gris
resampler->SetOutputSpacing(fixedImage->GetSpacing());
resampler->SetOutputDirection(fixedImage->GetDirection());
resampler->SetDefaultPixelValue(100);
//typedef itk::LinearInterpolateImageFunction <GrayFixedImageType, double>
InterpolatorType;
//InterpolatorType::Pointer interpolator = InterpolatorType::New();
//typedef itk::IdentityTransform < double, 2 > TransformType;
//TransformType::Pointer transform=TransformType::New();
// resampler ->SetInterpolator(interpolator);
// resampler ->SetTransform(transform);
resampler ->Update();
typedef unsigned char GrayOutputPixelType;
typedef itk::Image< GrayOutputPixelType, 2 > GrayOutputImageType;
typedef itk::CastImageFilter<GrayFixedImageType,GrayOutputImageType >
CastFilterType;
typedef itk::ImageFileWriter< GrayOutputImageType > WriterType;
WriterType::Pointer writer = WriterType::New();
CastFilterType::Pointer caster = CastFilterType::New();
writer->SetFileName( "ImageRegistered.jpg" );
caster->SetInput(resampler->GetOutput());
writer->SetInput(caster->GetOutput());
writer->Update();
return EXIT_SUCCESS;
}
*And the errors are:
*1>------ Build started: Project: RGBRegistration, Configuration: Debug x64
------
1>Compiling...
1>RGBRegistration.cxx
1>Compiling manifest to resources...
1>Linking...
1> Creating library Debug\RGBRegistration.lib and object
Debug\RGBRegistration.exp
1>RGBRegistration.obj : error LNK2019: unresolved external symbol
"protected: __cdecl
itk::RegularStepGradientDescentBaseOptimizer::RegularStepGradientDescentBaseOptimizer(void)"
(??0RegularStepGradientDescentBaseOptimizer at itk@@IEAA at XZ) referenced in
function "protected: __cdecl
itk::RegularStepGradientDescentOptimizer::RegularStepGradientDescentOptimizer(void)"
(??0RegularStepGradientDescentOptimizer at itk@@IEAA at XZ)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl
itk::RegularStepGradientDescentBaseOptimizer::PrintSelf(class
std::basic_ostream<char,struct std::char_traits<char> > &,class
itk::Indent)const " (?PrintSelf at RegularStepGradientDescentBaseOptimizer@itk@
@MEBAXAEAV?$basic_ostream at DU?$char_traits at D@std@@@std@@VIndent at 2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol "public:
virtual void __cdecl itk::Optimizer::SetInitialPosition(class
itk::Array<double> const &)" (?SetInitialPosition at Optimizer@itk@
@UEAAXAEBV?$Array at N@2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol "public:
virtual void __cdecl
itk::RegularStepGradientDescentBaseOptimizer::StartOptimization(void)"
(?StartOptimization at RegularStepGradientDescentBaseOptimizer@itk@@UEAAXXZ)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl itk::Optimizer::SetCurrentPosition(class
itk::Array<double> const &)" (?SetCurrentPosition at Optimizer@itk@
@MEAAXAEBV?$Array at N@2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol "public:
virtual void __cdecl
itk::SingleValuedNonLinearOptimizer::SetCostFunction(class
itk::SingleValuedCostFunction *)"
(?SetCostFunction at SingleValuedNonLinearOptimizer@itk@
@UEAAXPEAVSingleValuedCostFunction at 2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl
itk::RegularStepGradientDescentBaseOptimizer::AdvanceOneStep(void)"
(?AdvanceOneStep at RegularStepGradientDescentBaseOptimizer@itk@@MEAAXXZ)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl
itk::RegularStepGradientDescentOptimizer::StepAlongGradient(double,class
itk::Array<double> const &)"
(?StepAlongGradient at RegularStepGradientDescentOptimizer@itk@
@MEAAXNAEBV?$Array at N@2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl
itk::SingleValuedNonLinearOptimizer::PrintSelf(class
std::basic_ostream<char,struct std::char_traits<char> > &,class
itk::Indent)const " (?PrintSelf at SingleValuedNonLinearOptimizer@itk@
@MEBAXAEAV?$basic_ostream at DU?$char_traits at D@std@@@std@@VIndent at 2@@Z)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl itk::Optimizer::PrintSelf(class
std::basic_ostream<char,struct std::char_traits<char> > &,class
itk::Indent)const " (?PrintSelf at Optimizer@itk@@MEBAXAEAV?$basic_ostream at DU
?$char_traits at D@std@@@std@@VIndent at 2@@Z)
1>RGBRegistration.obj : error LNK2019: unresolved external symbol
"protected: __cdecl itk::Optimizer::Optimizer(void)" (??0Optimizer at itk
@@IEAA at XZ) referenced in function "public: static class
itk::SmartPointer<class itk::Optimizer> __cdecl itk::Optimizer::New(void)"
(?New at Optimizer@itk@@SA?AV?$SmartPointer at VOptimizer@itk@@@2 at XZ)
1>RGBRegistration.obj : error LNK2019: unresolved external symbol
"protected: __cdecl
itk::SingleValuedNonLinearOptimizer::SingleValuedNonLinearOptimizer(void)"
(??0SingleValuedNonLinearOptimizer at itk@@IEAA at XZ) referenced in function
"public: static class itk::SmartPointer<class
itk::SingleValuedNonLinearOptimizer> __cdecl
itk::SingleValuedNonLinearOptimizer::New(void)"
(?New at SingleValuedNonLinearOptimizer@itk@
@SA?AV?$SmartPointer at VSingleValuedNonLinearOptimizer@itk@@@2 at XZ)
1>RGBRegistration.obj : error LNK2001: unresolved external symbol
"protected: virtual void __cdecl itk::CostFunction::PrintSelf(class
std::basic_ostream<char,struct std::char_traits<char> > &,class
itk::Indent)const " (?PrintSelf at CostFunction@itk@
@MEBAXAEAV?$basic_ostream at DU?$char_traits at D@std@@@std@@VIndent at 2@@Z)
1>Debug\RGBRegistration.exe : fatal error LNK1120: 13 unresolved externals
1>Build log was saved at
"file://w:\Registration_Review\bin\RGBRegistration\RGBRegistration.dir\Debug\BuildLog.htm"
1>RGBRegistration - 14 error(s), 0 warning(s)
2>------ Build started: Project: ALL_BUILD, Configuration: Debug x64 ------
2>"Build all projects"
2>Build log was saved at
"file://w:\Registration_Review\bin\RGBRegistration\ALL_BUILD.dir\Debug\BuildLog.htm"
2>ALL_BUILD - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========*
*--
Leidy Paola Dorado-Muñoz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20081119/2c9e2fb2/attachment-0001.htm>
More information about the Insight-users
mailing list