Skip to content

Commit f50c74b

Browse files
committed
fix to grad pi dx, problem with sign. Now dense provides overall best restuls.
1 parent 55bbfae commit f50c74b

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/plane-surfaces/factors/EigenFactorPlaneCenter2.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ void EigenFactorPlaneCenter2::evaluate_jacobians()
7070
// sum of all terms
7171
hessian.triangularView<Eigen::Upper>() =
7272
pi_t_x_hessian_Q_x_pi(Qt,planeEstimation_) +
73-
grad_pi_time_Q_grad + // crosterm due to plane x dQ
74-
pi_t_G_time_Q_grad; //slihglty better than EFcenter
73+
grad_pi_time_Q_grad +
74+
pi_t_G_time_Q_grad;
7575
J_.push_back(jacobian);
7676
H_.push_back(hessian);
7777
//std::cout << "Hessia =\n" << hessian <<std::endl;
@@ -134,9 +134,9 @@ void EigenFactorPlaneCenter2::estimate_plane()
134134
other_eigenvectors.col(0) *= 0.0;
135135
//std::cout << "other eignevect \n" << other_eigenvectors <<std::endl;
136136
other_eigenvectors_multiplied.col(0) = 0.0 * other_eigenvectors.col(0);
137-
other_eigenvectors_multiplied.col(1) = 1.0/(es4.eigenvalues()(1) - lambda_plane) * other_eigenvectors.col(1);
138-
other_eigenvectors_multiplied.col(2) = 1.0/(es4.eigenvalues()(2) - lambda_plane) * other_eigenvectors.col(2);
139-
other_eigenvectors_multiplied.col(3) = 1.0/(es4.eigenvalues()(3) - lambda_plane) * other_eigenvectors.col(3);
137+
other_eigenvectors_multiplied.col(1) = 1.0/(lambda_plane - es4.eigenvalues()(1) ) * other_eigenvectors.col(1);
138+
other_eigenvectors_multiplied.col(2) = 1.0/(lambda_plane - es4.eigenvalues()(2) ) * other_eigenvectors.col(2);
139+
other_eigenvectors_multiplied.col(3) = 1.0/(lambda_plane - es4.eigenvalues()(3) ) * other_eigenvectors.col(3);
140140
//std::cout << "other eignevect mult \n" << other_eigenvectors_multiplied <<std::endl;
141141
//std::cout << "Q_inv_ 4x4 inverse =\n" << other_eigenvectors * other_eigenvectors_multiplied.transpose() <<std::endl;
142142
Q_inv_no_kernel_ = other_eigenvectors * other_eigenvectors_multiplied.transpose();

src/plane-surfaces/factors/EigenFactorPlaneDense.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ void EigenFactorPlaneDense::estimate_plane()
131131

132132
// Calcualte almost inverse of Q for later derivatives:
133133
// option 1, full inverse: slightly inacurate solution.
134-
Q_inv_no_kernel_ = accumulatedQ_.inverse();
134+
//Q_inv_no_kernel_ = accumulatedQ_.inverse();
135135
//std::cout << "Accumulated Q \n" << accumulatedQ_ <<std::endl;
136136
//std::cout << "Direct Inverse\n" << Q_inv_no_kernel_ <<std::endl;
137137

@@ -145,16 +145,17 @@ void EigenFactorPlaneDense::estimate_plane()
145145
other_eigenvectors.col(0) *= 0.0;
146146
//std::cout << "other eignevect \n" << other_eigenvectors <<std::endl;
147147
other_eigenvectors_multiplied.col(0) = 0.0 * other_eigenvectors.col(0);
148-
other_eigenvectors_multiplied.col(1) = 1.0/(es.eigenvalues()(1) - lambda_plane) * other_eigenvectors.col(1);
149-
other_eigenvectors_multiplied.col(2) = 1.0/(es.eigenvalues()(2) - lambda_plane) * other_eigenvectors.col(2);
148+
//XXX: this should be the opposite, check!
149+
other_eigenvectors_multiplied.col(1) = 1.0/(lambda_plane - es.eigenvalues()(1)) * other_eigenvectors.col(1);
150+
other_eigenvectors_multiplied.col(2) = 1.0/(lambda_plane - es.eigenvalues()(2)) * other_eigenvectors.col(2);
150151
//std::cout << "other eignevect mult \n" << other_eigenvectors_multiplied <<std::endl;
151152
Q_inv_3x3 = other_eigenvectors * other_eigenvectors_multiplied.transpose();
152153
Q_inv_no_kernel_.topLeftCorner<3,3>() = Q_inv_3x3;
153154
//std::cout << "Q_inv_no_kernel_ centered =\n" << Q_inv_no_kernel_ <<std::endl;
154155
Q_inv_no_kernel_ = Tcenter.transpose() *Q_inv_no_kernel_* Tcenter;
155-
//std::cout << "Q_inv_no_kernel_ =\n" << Q_inv_no_kernel_ <<std::endl;
156+
//std::cout << "Q_inv from eigs + Tc =\n" << Q_inv_no_kernel_ <<std::endl;
156157

157-
// Comparison (TO REMOVE)
158+
// Comparison
158159
// (Q - pi'*pi )-1
159160
{
160161
Eigen::SelfAdjointEigenSolver<Mat4> es4;
@@ -165,12 +166,13 @@ void EigenFactorPlaneDense::estimate_plane()
165166
other_eigenvectors.col(0) *= 0.0;
166167
//std::cout << "other eignevect \n" << other_eigenvectors <<std::endl;
167168
other_eigenvectors_multiplied.col(0) = 0.0 * other_eigenvectors.col(0);
168-
other_eigenvectors_multiplied.col(1) = 1.0/(es4.eigenvalues()(1) - lambda_plane) * other_eigenvectors.col(1);
169-
other_eigenvectors_multiplied.col(2) = 1.0/(es4.eigenvalues()(2) - lambda_plane) * other_eigenvectors.col(2);
170-
other_eigenvectors_multiplied.col(3) = 1.0/(es4.eigenvalues()(3) - lambda_plane) * other_eigenvectors.col(3);
169+
other_eigenvectors_multiplied.col(1) = 1.0/(lambda_plane - es4.eigenvalues()(1)) * other_eigenvectors.col(1);
170+
other_eigenvectors_multiplied.col(2) = 1.0/(lambda_plane - es4.eigenvalues()(2)) * other_eigenvectors.col(2);
171+
other_eigenvectors_multiplied.col(3) = 1.0/(lambda_plane - es4.eigenvalues()(3)) * other_eigenvectors.col(3);
171172
//std::cout << "other eignevect mult \n" << other_eigenvectors_multiplied <<std::endl;
172173
//std::cout << "Q_inv_ 4x4 inverse =\n" << other_eigenvectors * other_eigenvectors_multiplied.transpose() <<std::endl;
173-
//Q_inv_no_kernel_ = other_eigenvectors * other_eigenvectors_multiplied.transpose();
174+
Q_inv_no_kernel_ = other_eigenvectors * other_eigenvectors_multiplied.transpose();
175+
//std::cout << "Difference =\n" << (other_eigenvectors * other_eigenvectors_multiplied.transpose()-Q_inv_no_kernel_).squaredNorm() <<std::endl;
174176
}
175177

176178

0 commit comments

Comments
 (0)