This forum has been archived. All content is frozen. Please use KDE Discuss instead.

LevenbergMarquardt failed on resize assert

Tags: None
(comma "," separated)
mikav
Registered Member
Posts
2
Karma
0
I'm minimizing using next functor

Code: Select all
struct LMEllipseDistanceFunctor: Functor<double>
  {
     LMEllipseDistanceFunctor(const Ellipse &e1, const Ellipse &e2) :
        Functor<double>(2, 2), mE1(e1), mE2(e2)
     {}

     int operator()(const Vec &x, Vec &fvec) const
{
   const auto pt1 = GetEllipsePt(mE1, x(0));
   const auto pt2 = GetEllipsePt(mE2, x(1));
   fvec(0) = (pt2 - pt1).norm();
   fvec(1) = 0.;
   return 0;
}

     Ellipse mE1, mE2;
  };


and next code

Code: Select all
LMEllipseDistanceFunctor functor(e1, e2);
   Eigen::NumericalDiff<LMEllipseDistanceFunctor> numDiff(functor);
   Eigen::LevenbergMarquardt<Eigen::NumericalDiff<LMEllipseDistanceFunctor>, double> lm(numDiff);
   lm.parameters.maxfev = 1000;
   lm.parameters.xtol = 1E-10;
   Vec xlm(2);
   xlm << e1_pt.second, e2_pt.second;
   lm.minimize(xlm);


Unfortunately it always fails on resize matrix assert
Eigen 3.3.4

ucrtbased.dll!00007ffca0077255() Unknown
ucrtbased.dll!00007ffca0077073() Unknown
ucrtbased.dll!00007ffca00799ff() Unknown
> orientation_test.dll!Eigen::DenseBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> >::resize(__int64 rows, __int64 cols) Line 256 C++
orientation_test.dll!Eigen::internal::resize_if_allowed<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> >,double,double>(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src, const Eigen::internal::assign_op<double,double> & __formal) Line 721 C++
orientation_test.dll!Eigen::internal::call_dense_assignment_loop<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> >,Eigen::internal::assign_op<double,double> >(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src, const Eigen::internal::assign_op<double,double> & func) Line 736 C++
orientation_test.dll!Eigen::internal::Assignment<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> >,Eigen::internal::assign_op<double,double>,Eigen::internal::Dense2Dense,void>::run(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src, const Eigen::internal::assign_op<double,double> & func) Line 880 C++
orientation_test.dll!Eigen::internal::call_assignment_no_alias<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> >,Eigen::internal::assign_op<double,double> >(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src, const Eigen::internal::assign_op<double,double> & func) Line 837 C++
orientation_test.dll!Eigen::internal::call_assignment<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> >,Eigen::internal::assign_op<double,double> >(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src, const Eigen::internal::assign_op<double,double> & func, void * __formal) Line 805 C++
orientation_test.dll!Eigen::internal::call_assignment<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0>,Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > >(Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> & dst, const Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > & src) Line 783 C++
orientation_test.dll!Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> >::operator=<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > >(const Eigen::DenseBase<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>,Eigen::Matrix<double,-1,1,0,-1,1> > > & other) Line 67 C++
orientation_test.dll!Eigen::DenseBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> >::setConstant(const double & val) Line 328 C++
orientation_test.dll!Eigen::DenseBase<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1,1,0> >::setZero() Line 502 C++
orientation_test.dll!Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0> >::makeHouseholder<Eigen::VectorBlock<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1> >(Eigen::VectorBlock<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0>,-1> & essential, double & tau, double & beta) Line 86 C++
orientation_test.dll!Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Matrix<double,-1,-1,0,-1,-1>,-1,1,1>,-1,1,0> >::makeHouseholderInPlace(double & tau, double & beta) Line 46 C++
orientation_test.dll!Eigen::ColPivHouseholderQR<Eigen::Matrix<double,-1,-1,0,-1,-1> >::computeInPlace() Line 541 C++
orientation_test.dll!Eigen::ColPivHouseholderQR<Eigen::Matrix<double,-1,-1,0,-1,-1> >::ColPivHouseholderQR<Eigen::Matrix<double,-1,-1,0,-1,-1> ><Eigen::Matrix<double,-1,-1,0,-1,-1> >(Eigen::EigenBase<Eigen::Matrix<double,-1,-1,0,-1,-1> > & matrix) Line 156 C++
orientation_test.dll!Eigen::LevenbergMarquardt<Eigen::NumericalDiff<openMVG::LMEllipseDistanceFunctor,0>,double>::minimizeOneStep(Eigen::Matrix<double,-1,1,0,-1,1> & x) Line 232 C++
orientation_test.dll!Eigen::LevenbergMarquardt<Eigen::NumericalDiff<openMVG::LMEllipseDistanceFunctor,0>,double>::minimize(Eigen::Matrix<double,-1,1,0,-1,1> & x) Line 164 C++


Bookmarks



Who is online

Registered users: Bing [Bot], Google [Bot], Sogou [Bot]