SOlved bug in reg23 related to initialization of simplexdelta in case of 6DOF.

Closing Issue number #60
This commit is contained in:
Proton local user
2023-06-07 18:05:36 +02:00
parent 4e2a7d87b1
commit ad7f0986f7

View File

@ -135,9 +135,8 @@ void itkReg23::InitializeRegistration()
// std::cout << "Print MI" <<
// m_MIMeta->GetMaxTranslation() << std::endl;
AmoebaOptimizerType::ParametersType simplexDelta(3);
ExhaustiveOptimizerType::StepsType steps(3);
const int numberOfSteps = 25; //In each direction. Total number of steps is ((2*numberOfSteps+1))^3. For 25 -> 132651.
// ExhaustiveOptimizerType::StepsType steps(3);
// const int numberOfSteps = 25; //In each direction. Total number of steps is ((2*numberOfSteps+1))^3. For 25 -> 132651.
//const double stepLength = 0.1;
switch (m_r23Meta->GetOptimizerType()) {
@ -171,11 +170,22 @@ void itkReg23::InitializeRegistration()
// 2 mm / 2 degrees seems to be a good value which performs well.
if (GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()) == 0) {
itkExceptionMacro(<< "Unkown or unsupported degree of freedom");
return;
}else if (GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()) == 3){
AmoebaOptimizerType::ParametersType simplexDelta3dof(3);
for (int i = 0; i < GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()); i++) {
simplexDelta3dof[i] = m_AmoebaMeta->GetSimplexDelta();
}
AmoebaOptimizer->SetInitialSimplexDelta(simplexDelta3dof);
}else if (GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()) == 6){
AmoebaOptimizerType::ParametersType simplexDelta6dof(6);
for (int i = 0; i < GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()); i++) {
simplexDelta6dof[i] = m_AmoebaMeta->GetSimplexDelta();
}
AmoebaOptimizer->SetInitialSimplexDelta(simplexDelta6dof);
}
for (int i = 0; i < GetNumberOfDOF(m_r23Meta->GetDegreeOfFreedom()); i++) {
simplexDelta[i] = m_AmoebaMeta->GetSimplexDelta();
}
AmoebaOptimizer->SetInitialSimplexDelta(simplexDelta);
AmoebaOptimizer->RemoveAllObservers();
AmoebaOptimizer->AddObserver(itk::IterationEvent(), m_OptimizerObserver);
m_OptimizerObserver->setOptimizerTypeOfIterationUpdate(tOptimizerTypeEnum::AMOEBA);