Xmipp  v3.23.11-Nereus
Classes | Functions
Collaboration diagram for Image Residuals:

Classes

class  ProgImageResiduals
 

Functions

double computeCovarianceMatrixDivergence (const Matrix2D< double > &C1, const Matrix2D< double > &C2)
 Compute the divergence between two covariance matrices. More...
 

Detailed Description

Function Documentation

◆ computeCovarianceMatrixDivergence()

double computeCovarianceMatrixDivergence ( const Matrix2D< double > &  C1,
const Matrix2D< double > &  C2 
)

Compute the divergence between two covariance matrices.

Definition at line 99 of file program_image_residuals.cpp.

100 {
104  C=C1+C2;
105  C*=0.5;
106  firstEigs(C, MAT_XSIZE(C), D, P, false);
107  double retval=0;
108  for (size_t i=0; i<VEC_XSIZE(D)/2; ++i) // Only half of the eigenvalues are reliable
109  {
110  double l=fabs(VEC_ELEM(D,i));
111  if (l>1e-14)
112  retval+=log(l);
113  }
114 
115  C=C1*C2;
116  firstEigs(C, MAT_XSIZE(C), D, P, false);
117  for (size_t i=0; i<VEC_XSIZE(D)/2; ++i)
118  {
119  double l=fabs(VEC_ELEM(D,i));
120  if (l>1e-14)
121  retval-=0.5*log(l);
122  }
123  return retval;
124 }
#define VEC_ELEM(v, i)
Definition: matrix1d.h:245
#define VEC_XSIZE(m)
Definition: matrix1d.h:77
#define i
void log(Image< double > &op)
void firstEigs(const Matrix2D< double > &A, size_t M, Matrix1D< double > &D, Matrix2D< double > &P, bool Pneeded)
Definition: matrix2d.cpp:284
#define MAT_XSIZE(m)
Definition: matrix2d.h:120