[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