[Insight-users] Is there a maximum number of levels of resolutions in the itk::MultiResolutionPDEDeformableRegistration

Luis Ibanez luis.ibanez at kitware.com
Sat Mar 31 12:35:13 EST 2007


Hi Remi,

I recall that the number of effective levels may stop is your
image doesn't have enough pixels for the next subsampling.

How big is your image   ?
What is your subsampling schedule ?



    Regards,


        Luis


---------------------------
remi charrier wrote:
> Hi all,
> 
>  I sucessfully implemented the
> itk::MultiResolutionPDEDeformableRegistration and it works impresively well
> with 1 , 2 or 3 levels of resolutions. But it seems that when I try to
> change to 4 and more levels of resolutions the levels 4 and more are not
> computed. Is there a maximum number of levels ?
> I checked the code and the size of the number of iterations correspond
> to the number of levels, the schedule too and the pyramide image
> filter too.
> 
> If someone know something about this problem I will be glad to have
> informations.
> 
> Rémi Charrier
> 
> Here the code I implemented:
> // GetNumberOfLevels = 5, Dimension = 3
> 
>  // Compute deformation field
> m_DeformationField = DeformationFieldType::New();
> const DeformationFieldType *field;
> RegistrationType::Pointer registrator = RegistrationType::New();
> PyramideFilterType::Pointer fixedpyramidefilter = 
> PyramideFilterType::New();
> PyramideFilterType::Pointer movingpyramidefilter = 
> PyramideFilterType::New();
> 
> // Define schedule
> m_Schedule.SetSize(GetNumberOfLevels(),Dimension);
> 
> m_Schedule[0][0]=16;
> m_Schedule[0][1]=16;
> m_Schedule[0][2]=16;
> m_Schedule[1][0]=8;
> m_Schedule[1][1]=8;
> m_Schedule[1][2]=8;
> m_Schedule[2][0]=4;
> m_Schedule[2][1]=4;
> m_Schedule[2][2]=4;
> m_Schedule[3][0]=2;
> m_Schedule[3][1]=2;
> m_Schedule[3][2]=2;
> m_Schedule[4][0]=1;
> m_Schedule[4][1]=1;
> m_Schedule[4][2]=1;
>     
>  fixedpyramidefilter->SetNumberOfLevels(GetNumberOfLevels());
>  fixedpyramidefilter->SetInput(m_InternalFixedImage);
>  fixedpyramidefilter->SetSchedule(m_Schedule);
>  movingpyramidefilter->SetNumberOfLevels(GetNumberOfLevels());
>  movingpyramidefilter->SetInput(m_InternalAtlas);
>  movingpyramidefilter->SetSchedule(m_Schedule);
> 
>  m_NumberOfIterations.SetSize(GetNumberOfLevels());
>  m_NumberOfIterations.Fill(100);
>  m_NumberOfIterations[0] = 200;
> 
>  //SetNumberOfIterations(m_NumberOfIterations);
>  unsigned int * numofiter;
>  numofiter = new unsigned int[GetNumberOfLevels()];
>  for (int k=0; k<GetNumberOfLevels(); k++)
>  {
>     numofiter[k]=(unsigned int)m_NumberOfIterations[k];   
>  }
> 
>  registrator->SetFixedImagePyramid(fixedpyramidefilter);
>  registrator->SetFixedImage(m_InternalFixedImage);
>  registrator->SetMovingImagePyramid(movingpyramidefilter);
>  registrator->SetMovingImage(m_InternalAtlas);
>  registrator->SetNumberOfIterations(numofiter/*m_NumberOfIterations*/);
>  registrator->SetNumberOfLevels(GetNumberOfLevels());
> 
>  try
>  {
>    registrator->Update();
>  }
>  catch(itk::ExceptionObject & excp)
>  {
>    std::cerr<<"Exception thrown"<<std::endl;
>    std::cerr<<excp<<std::endl;
>  }
>  cout <<"Deformation field compute."<<endl;
>  field = registrator->GetDeformationField();
> _______________________________________________
> 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