Skip to content
Snippets Groups Projects
Commit bda19184 authored by Grégoire Mercier's avatar Grégoire Mercier
Browse files

BUG: PCA normalization matrix

parent ef0e0366
No related branches found
No related tags found
No related merge requests found
......@@ -256,6 +256,19 @@ MNFImageFilter< TInputImage, TOutputImage, TNoiseImageFilter, TDirectionOfTransf
vnl_vector< double > valP = solver.D.diagonal();
valP.flip();
/*
* We used normalized PCA
*/
for ( unsigned int i = 0; i < valP.size(); i++ )
{
if ( valP[i] != 0. )
valP[i] = 1. / vcl_sqrt( vcl_abs( valP[i] ) );
else
throw itk::ExceptionObject( __FILE__, __LINE__,
"Null Eigen value !!", ITK_LOCATION );
}
valP.post_multiply( transf );
m_NoiseRatioValues.SetSize( valP.size() );
for ( unsigned int i = 0; i < valP.size(); i++ )
m_NoiseRatioValues[i] = static_cast< RealType >( valP[i] );
......
......@@ -125,7 +125,12 @@ public:
itkGetConstMacro(EigenValues,VectorType);
itkGetMacro(UseNormalization,bool);
itkSetMacro(UseNormalization,bool);
void SetUseNormalization ( bool norm )
{
m_UseNormalization = norm;
m_UseVarianceForNormalization = norm;
this->Modified();
}
itkGetConstMacro(MeanValues,VectorType);
void SetMeanValues ( const VectorType & data )
......
......@@ -311,6 +311,14 @@ PCAImageFilter< TInputImage, TOutputImage, TDirectionOfTransformation >
/*
* We used normalized PCA
*/
for ( unsigned int i = 0; i < valP.size(); i++ )
{
if ( valP[i] != 0. )
valP[i] = 1. / vcl_sqrt( vcl_abs( valP[i] ) );
else
throw itk::ExceptionObject( __FILE__, __LINE__,
"Null Eigen value !!", ITK_LOCATION );
}
valP.post_multiply( transf );
if ( m_NumberOfPrincipalComponentsRequired
......@@ -334,7 +342,11 @@ PCAImageFilter< TInputImage, TOutputImage, TDirectionOfTransformation >
{
Superclass::PrintSelf( os, indent );
os << indent << "m_UseNormalization = " << (m_UseNormalization ? "true\n" : "false\n");
os << indent << "m_UseNormalization = ";
if ( m_UseNormalization )
os << "true\n";
else
os << "false\n";
if ( m_GivenMeanValues )
os << indent << "Given Mean : " << m_MeanValues << "\n";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment