]> Creatis software - cpPlugins.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 24 Oct 2017 19:00:31 +0000 (14:00 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 24 Oct 2017 19:00:31 +0000 (14:00 -0500)
lib/ivq/ITK/FourierSeries.cxx

index 7fcadf0f98b1d2ef4a33f0c97c761b62b0e2e714..c81ba5e7d6575c081d883366841a87f67971805d 100644 (file)
@@ -687,19 +687,20 @@ _DFT( const std::vector< TComplex >& p, unsigned int q )
   c /= N;
 
   // Minimize phase
-  long minIdx = 0;
-  TScalar minImag = std::fabs( std::imag( p[ 0 ] - c ) );
-  for( long m = 1; m < p.size( ); ++m )
+  struct _TComplexCmp
   {
-    TScalar y = std::fabs( std::imag( p[ m ] - c ) );
-    if( y < minImag )
-    {
-      minIdx = m;
-      minImag = y;
-
-    } // fi
-
-  } // rof
+    bool operator()( const TComplex& a, const TComplex& b )
+      {
+        return(
+          ( std::real( b ) < std::real( a ) ) &&
+          ( std::fabs( std::imag( a ) ) < std::fabs( std::imag( b ) ) )
+          );
+      }
+  };
+  std::map< TComplex, long, _TComplexCmp > ordered;
+  for( long m = 0; m < p.size( ); ++m )
+    ordered[ p[ m ] - c ] = m;
+  long si = ordered.begin( )->second;
 
   // Real DFT computation
   std::vector< TComplex > dft;
@@ -710,7 +711,7 @@ _DFT( const std::vector< TComplex >& p, unsigned int q )
     TComplex z( _0, _0 );
     for( long i = 0; i < p.size( ); ++i )
       z +=
-        p[ ( i + minIdx ) % p.size( ) ] *
+        p[ ( i + si ) % p.size( ) ] *
         std::polar( _1, _2piN * TScalar( m * i ) );
     z /= N;
     dft.push_back( z );