[Insight-users] How long does it take do you think ?
tony hakki
tony2007vtk at yahoo.com
Sat Mar 31 09:17:20 EST 2007
I have already tried it. I wrote the transform result to a txt file . Here is the transform results .But on the otherhand I also wrote the
optimizer->GetValue() to a txt file. it says it is zero. Why is it zero?what might the reason?
QuaternionRigidTransform (03975550)
RTTI typeinfo: class itk::QuaternionRigidTransform<float>
Reference Count: 2
Modified Time: 27001127
Debug: Off
Observers:
none
Matrix:
0.969827 0.238191 0.0519706
-0.224559 0.955767 -0.189954
-0.0949171 0.172552 0.980416
Offset: [-0.0650461, -44.047, -19.0696]
Center: [0, 0, 0]
Translation: [-0.0650461, -44.047, -19.0696]
Inverse:
0.969827 -0.224559 -0.0949171
0.238191 0.955767 0.172552
0.0519706 -0.189954 0.980416
Singular: 0
Rotation: 0.0917104 0.0371611 -0.117071 0.988181
----- Original Message ----
From: David Cole <david.cole at kitware.com>
To: tony hakki <tony2007vtk at yahoo.com>
Cc: Luis Ibanez <luis.ibanez at kitware.com>; insight-users at itk.org
Sent: Saturday, March 31, 2007 1:10:45 PM
Subject: Re: [Insight-users] How long does it take do you think ?
Why not try changing the hard-coded 10,000,000 in your code down to
500 in light of Luis' email...?
HTH,
David
On 3/31/07, tony hakki <tony2007vtk at yahoo.com> wrote:
>
>
> Dear Luis
> Here is my code,what might the wrong ?According to me everything is OK.
> Could you please have a look at his for me. This is really important for me.
>
>
> //-----------------------------------------------------------
>
> // Set up a Transform
>
> //-----------------------------------------------------------
>
> typedef itk::QuaternionRigidTransform< double > TransformType;
>
> TransformType::Pointer transform = TransformType::New();
>
> typedef MovingImageType::SpacingType SpacingType;
>
> typedef MovingImageType::PointType OriginType;
>
> typedef MovingImageType::RegionType RegionType;
>
> typedef MovingImageType::SizeType SizeType;
>
> const OriginType movingOrigin = input->GetOrigin();
>
> const RegionType movingRegion =
> input->GetLargestPossibleRegion();
>
> const SizeType movingSize = movingRegion.GetSize();
>
> const SpacingType movingSpacing = input->GetSpacing();
>
> TransformType::InputPointType centerMoving;
>
> centerMoving[0] = movingOrigin[0] + movingSpacing[0] * movingSize[0] / 2.0;
>
> centerMoving[1] = movingOrigin[1] + movingSpacing[1] * movingSize[1] / 2.0;
>
> centerMoving[2] = movingOrigin[2] + movingSpacing[2] * movingSize[1] / 2.0;
>
> TransformType::InputPointType centerFixed;
>
> centerFixed[0] = 14.7947 ;
>
> centerFixed[1] =-1.48122;
>
> centerFixed[2] =2.43377;
>
>
>
> transform->SetCenter(centerFixed);
>
> transform->SetTranslation( centerMoving - centerFixed );
>
>
>
> //------------------------------------------------------------
>
> // Optimizer Type
>
> //-----------------------------------------------------------
>
> typedef
> itk::QuaternionRigidTransformGradientDescentOptimizer
> OptimizerType;
>
> OptimizerType::Pointer optimizer = OptimizerType::New();
>
>
>
> //------------------------------------------------------------
>
> // Set up an Interpolator
>
> //------------------------------------------------------------
>
> typedef itk::LinearInterpolateImageFunction<
>
> MovingImageType,
>
> double > InterpolatorType;
>
> InterpolatorType::Pointer interpolator = InterpolatorType::New();
>
> //-----------------------------------------------------------
>
> // Set up Metric
>
> //-----------------------------------------------------------
>
> typedef itk::NormalizedCorrelationPointSetToImageMetric<
>
> FixedPointSetType,
>
> MovingImageType > MetricType;
>
> typedef MetricType::TransformType TransformBaseType;
>
> typedef TransformBaseType::ParametersType ParametersType;
>
> MetricType::Pointer metric = MetricType::New();
>
> //-----------------------------------------------------------
>
> //RegistrationMethod
>
> //-----------------------------------------------------------
>
> typedef itk::PointSetToImageRegistrationMethod<
>
> FixedPointSetType,
>
> MovingImageType > RegistrationType;
>
> RegistrationType::Pointer registrationMethod = RegistrationType::New();
>
> typedef itk::CommandIterationUpdate<
>
> OptimizerType > CommandIterationType;
>
>
>
> // Instantiate an Observer to report the progress of the Optimization
>
> CommandIterationType::Pointer iterationCommand =
> CommandIterationType::New();
>
> iterationCommand->SetOptimizer( optimizer.GetPointer() );
>
>
>
> // Scale the translation components of the Transform in the Optimizer
>
> OptimizerType::ScalesType scales(
> transform->GetNumberOfParameters() );
>
> scales.Fill( 1.0 );
>
> int j;
>
> for ( j = 4; j < 7; j++ )
>
> {
>
> scales[j] = 0.0001;
>
> }
>
>
>
> unsigned long numberOfIterations = 1000000;
>
> optimizer->SetScales( scales );
>
> optimizer->SetNumberOfIterations( numberOfIterations );
>
> optimizer->MinimizeOn();
>
>
>
> // can probably provide a better guess than the identity...
>
> transform->SetIdentity();
>
> registrationMethod->SetInitialTransformParameters(
> transform->GetParameters() );
>
> RegistrationType::ParametersType initialParameters(
>
> transform->GetNumberOfParameters() );
>
> initialParameters.Fill( 0.0 );
>
> initialParameters[3] = 1.0;
>
>
>
> // Connect all the components required for Registration
>
> //------------------------------------------------------
>
> registrationMethod->SetMetric( metric );
>
> registrationMethod->SetOptimizer( optimizer );
>
> registrationMethod->SetFixedPointSet(pointSet);
>
> registrationMethod->SetMovingImage(input);
>
> registrationMethod->SetInterpolator(interpolator);
>
> registrationMethod->SetTransform( transform );
>
> //------------------------------------------------------------
>
> // Set up transform parameters
>
> //------------------------------------------------------------
>
> ParametersType parameters(
> transform->GetNumberOfParameters() );
>
> // initialize the offset/vector part
>
> for( unsigned int k = 0; k <Dimension; k++ )
>
> {
>
> parameters[k]= 0.0f;
>
> }
>
> try
>
> {
>
> registrationMethod->SetInitialTransformParameters(
> initialParameters );
>
> registrationMethod->StartRegistration();
>
> }
>
> catch( itk::ExceptionObject & e )
>
> {
>
> std::cout << e << std::endl;
>
> }
>
>
>
>
>
> OptimizerType::ParametersType finalParameters
> =registrationMethod->GetLastTransformParameters();
>
> const unsigned int nmbrOfIterations =
> optimizer->GetCurrentIteration();
>
> const double bestValue = optimizer->GetValue();
>
>
>
> transform->SetParameters( finalParameters );
>
> ----- Original Message ----
> From: Luis Ibanez <luis.ibanez at kitware.com>
> To: tony hakki <tony2007vtk at yahoo.com>
> Cc: Robert Tamburo <rjtst21 at pitt.edu>; insight-users at itk.org
> Sent: Friday, March 30, 2007 6:56:17 PM
> Subject: Re: [Insight-users] How long does it take do you think ?
>
>
> Hi Tony,
>
> A well tunned registration process should take less than
> 500 iterations in a Gradient-Descent type of optimizer.
>
>
> If it takes longer than 500 iterations,
> then it means that:
>
>
> a) Your have a poor initialization, or
> b) The step length (or learning rate) are too small.
>
>
> If you were registering images of sizes 512 x 512 x 200, that should
> probably should take between 2 minutes and 20 minutes in a modern
> computer.
>
> If you are doing PointSet registration, and your point sets have around
> 25,000 points, then it should take about 20 minutes to register them
> using ICP (in a modern computer).
>
> You will find easier to monitor the registration process is you add
> a visualization of the point sets using VTK, to the command observer
> of the registration.
>
>
> Regards,
>
>
> Luis
>
>
> -------------------
> tony hakki wrote:
> > you are generally right, but in this algorithm when optimizer finds the
> > best results it will be stoped by program not to wait 900 million
> > iterations . I didn't think that it would need 900 million iterations. I
> > thought at the beginning just assign 900 million any how it would not
> > need 900 million iterations. It has been still runnning :((
> >
> > ----- Original Message ----
> > From: Robert Tamburo <rjtst21 at pitt.edu>
> > To: tony hakki <tony2007vtk at yahoo.com>
> > Cc: insight-users at itk.org
> > Sent: Friday, March 30, 2007 4:39:08 PM
> > Subject: Re: [Insight-users] How long does it take do you think ?
> >
> > I've never used this algorithm but 900 million iterations seems like
> > insanity. Assume that each iteration takes either 1 millisecond (best
> > case scenario?) or 1 second (worst case scenario?) then calculate how
> > long 900 million iterations will take. You will probably want to rethink
> > the number of iterations you're using. You may also want to set up a
> > convergence criteria to stop the registration. You may find that you
> > only need a handful iterations to achieve acceptable results.
> >
> > On Mar 30, 2007, at 3:34 AM, tony hakki wrote:
> >
> >> hello ;
> >> I have tried to implement point set to image registration. My point
> >> set has 151 points(x,y,z),and the image 3D .raw image size is
> >> size = 329 527 181 and the resolution is res= 0.200068 0.200068
> >> 0.200068 .Is there anybody who is expert on registration process to
> >> guess how long does computer run to finish registration process? my
> >> computer has 2.21 GHz processor, and 3 GB Ram . I assigned
> >> numberofiteration as 900.000.000 (900 million) and my computer has
> >> been runnning for 20 hours(yes ,20 hours:))),do you think this is normal?
> >> Thanks
> >> Tony
> >>
> >>
> ------------------------------------------------------------------------
> >> Sucker-punch spam
> >>
> <http://us.rd.yahoo.com/evt=49981/*http://advision.webevents.yahoo.com/mailbeta/features_spam.html>
> >> with award-winning protection.
> >> Try the free Yahoo! Mail Beta.
> >>
> <http://us.rd.yahoo.com/evt=49981/*http://advision.webevents.yahoo.com/mailbeta/features_spam.html>
> >>
> >> _______________________________________________
> >> Insight-users mailing list
> >> Insight-users at itk.org <mailto:Insight-users at itk.org>
> >> http://www.itk.org/mailman/listinfo/insight-users
> >
> >
> >
> >
> >
> ------------------------------------------------------------------------
> > We won't tell. Get more on shows you hate to love
> >
> <http://us.rd.yahoo.com/evt=49980/*http://tv.yahoo.com/collections/265
> >
> > (and love to hate): Yahoo! TV's Guilty Pleasures list.
> >
> <http://us.rd.yahoo.com/evt=49980/*http://tv.yahoo.com/collections/265
> >
> >
> >
> >
> ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users at itk.org
> > http://www.itk.org/mailman/listinfo/insight-users
>
>
> ________________________________
> The fish are biting.
> Get more visitors on your site using Yahoo! Search Marketing.
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>
>
____________________________________________________________________________________
Don't get soaked. Take a quick peek at the forecast
with the Yahoo! Search weather shortcut.
http://tools.search.yahoo.com/shortcuts/#loc_weather
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070331/cf05dfc1/attachment.htm
More information about the Insight-users
mailing list