示例#1
0
int OtsuThresholding<T>::computeThreshold(const Vector<unsigned int>& histogram) const
{
  const Vector<double> criterion = computeCriterion( histogram );

  return criterion.maxPos();

#if 0
  double s0, ss0, m0, v0, s1, ss1, m1, v1, vmin, vgng;
  // initialisation des statistiques de la classe 0
  m0 = s0 = ss0 = v0 = 0;

  // initialisation des statistiques de la classe 1
  s1 = ss1 = 0;
  for (g = 0; g < histogram.getSize(); ++g)
  {
    n1 += histogram[g];
    s1 += g * histogram[g];
    ss1 += g * g * histogram[g];
  }
  m1 = s1 / n1;
  v1 = ss1 / n1 - m1 * m1;

  vmin = v1;
  gmin = 0;

  for (g = 0; g < histogram.getSize(); ++g)
  {
    n0 += histogram[g];
    n1 -= histogram[g];
    vgng = g * histogram[g];
    s0 += vgng;
    s1 -= vgng;
    ss0 += g * vgng;
    ss1 -= g * vgng;

    if ( n0 && n1 )
    {
      m0 = s0 / n0;
      m1 = s1 / n1;
      v0 = ss0 / n0 - m0 * m0;
      v1 = ss1 / n1 - m1 * m1;
      if ( v0 + v1 < vmin )
      {
        vmin = v0 + v1;
        gmin = g + 1;
      }
    }
  }

    return gmin;
#endif
}
示例#2
0
double arlCore::ICP::optimiseLS( void )
{
    unsigned int i;
    m_startError = m_endError;
    arlCore::OptimiseICP_LS optimizer( *this, vnl_least_squares_function::use_gradient );
    //optimizer.setObserver(true);
    vnl_levenberg_marquardt lm(optimizer);
    const arlCore::vnl_rigid_vector V( m_solution );
    vnl_vector<double> init(6);
    for( i=0 ; i<6 ; ++i )
        init(i) = V[i];
    lm.minimize_using_gradient(init);
    //m_startError = lm.get_start_error();
    //m_endError = lm.get_end_error();
    m_nbIterations = lm.get_num_iterations();
    //m_nbIterations = optimizer.getNbIterations();
    m_solution.copy(arlCore::vnl_rigid_vector(init));
    m_endError = computeCriterion( m_solution );
    m_solution.setRMS(m_endError);
    return m_endError;
}
示例#3
0
double arlCore::ICP::computeCriterion( const arlCore::vnl_rigid_matrix &M )
{
    vnl_vector< double > fx;
    return computeCriterion( M, fx );
}