@@ -434,6 +434,12 @@ class IntrinsicBase
434434 */
435435 virtual double getVerticalFov () const = 0;
436436
437+ /* *
438+ * @brief Initialize state with default values
439+ * The estimator state is used in the bundle adjustment to decide if we update it.
440+ * It is set to constant if the intrinsic is locked
441+ * It is set to refined if unlocked
442+ */
437443 virtual void initializeState ()
438444 {
439445 if (_locked)
@@ -445,9 +451,17 @@ class IntrinsicBase
445451 _state = EEstimatorParameterState::REFINED;
446452 }
447453 }
448-
454+
455+ /* *
456+ * @brief accessor to estimator state
457+ * @return a state
458+ */
449459 EEstimatorParameterState getState () const { return _state; }
450460
461+ /* *
462+ * @brief mutator for the estimator state
463+ * @param state the new state of the intrinsic
464+ */
451465 void setState (EEstimatorParameterState state) { _state = state; }
452466
453467 protected:
@@ -456,6 +470,7 @@ class IntrinsicBase
456470 // / intrinsic lock
457471 bool _locked = false ;
458472 EEstimatorParameterState _state = EEstimatorParameterState::REFINED;
473+
459474 unsigned int _w = 0 ;
460475 unsigned int _h = 0 ;
461476 double _sensorWidth = 36.0 ;
@@ -531,81 +546,5 @@ inline double angleBetweenRays(const geometry::Pose3& pose1, const geometry::Pos
531546
532547} // namespace camera
533548
534- template <size_t M, size_t N>
535- Eigen::Matrix<double , M * N, M * N> getJacobian_At_wrt_A ()
536- {
537- Eigen::Matrix<double , M * N, M * N> ret;
538-
539- /* * vec(M1*M2*M3) = kron(M3.t, M1) * vec(M2) */
540- /* * vec(IAtB) = kron(B.t, I) * vec(A) */
541- /* * dvec(IAtB)/dA = kron(B.t, I) * dvec(At)/dA */
542-
543- ret.fill (0 );
544-
545- size_t pos_at = 0 ;
546- for (size_t i = 0 ; i < M; i++)
547- {
548- for (size_t j = 0 ; j < N; j++)
549- {
550- size_t pos_a = N * j + i;
551- ret (pos_at, pos_a) = 1 ;
552-
553- pos_at++;
554- }
555- }
556-
557- return ret;
558- }
559-
560- template <size_t M, size_t N, size_t K>
561- Eigen::Matrix<double , M * K, M * N> getJacobian_AB_wrt_A (const Eigen::Matrix<double , M, N>& A, const Eigen::Matrix<double , N, K>& B)
562- {
563- Eigen::Matrix<double , M * K, M * N> ret;
564-
565- /* * vec(M1*M2*M3) = kron(M3.t, M1) * vec(M2) */
566- /* * vec(IAB) = kron(B.t, I) * vec(A) */
567- /* * dvec(IAB)/dA = kron(B.t, I) * dvec(A)/dA */
568- /* * dvec(IAB)/dA = kron(B.t, I) */
569-
570- ret.fill (0 );
571-
572- Eigen::Matrix<double , K, N> Bt = B.transpose ();
573-
574- for (size_t row = 0 ; row < K; row++)
575- {
576- for (size_t col = 0 ; col < N; col++)
577- {
578- ret.template block <M, M>(row * M, col * M) = Bt (row, col) * Eigen::Matrix<double , M, M>::Identity ();
579- }
580- }
581-
582- return ret;
583- }
584-
585- template <size_t M, size_t N, size_t K>
586- Eigen::Matrix<double , M * K, M * N> getJacobian_AtB_wrt_A (const Eigen::Matrix<double , M, N>& A, const Eigen::Matrix<double , M, K>& B)
587- {
588- return getJacobian_AB_wrt_A<M, N, K>(A.transpose (), B) * getJacobian_At_wrt_A<M, N>();
589- }
590-
591- template <size_t M, size_t N, size_t K>
592- Eigen::Matrix<double , M * K, N * K> getJacobian_AB_wrt_B (const Eigen::Matrix<double , M, N>& A, const Eigen::Matrix<double , N, K>& B)
593- {
594- Eigen::Matrix<double , M * K, N * K> ret;
595-
596- /* * vec(M1*M2*M3) = kron(M3.t, M1) * vec(M2) */
597- /* * vec(ABI) = kron(I, A) * vec(B) */
598- /* * dvec(ABI)/dB = kron(I, A) * dvec(B)/dB */
599- /* * dvec(ABI)/dB = kron(I, A) */
600-
601- ret.fill (0 );
602-
603- for (size_t index = 0 ; index < K; index++)
604- {
605- ret.template block <M, N>(M * index, N * index) = A;
606- }
607-
608- return ret;
609- }
610549
611550} // namespace aliceVision
0 commit comments