SOlved bug in reg23 related to initialization of simplexdelta in case of 6DOF.
Closing Issue number #60
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user