} // fi
}
+// -------------------------------------------------------------------------
+template< class V, class C, class B >
+template< class I, class P >
+void fpa::Base::MinimumSpanningTree< V, C, B >::
+GetPathFromImage(
+ std::vector< P >& path, const V& a, const V& b,
+ const I* image, unsigned int kernel
+ ) const
+{
+ std::vector< V > vertices;
+ this->GetPath( vertices, a, b );
+ path.clear( );
+ for( unsigned int i = 0; i < vertices.size( ); ++i )
+ {
+ P p;
+ image->TransformIndexToPhysicalPoint( vertices[ i ], p );
+ path.push_back( p );
+
+ } // rof
+
+ // Lowpass filter
+ if( kernel > 0 )
+ {
+ int k = int( kernel ) >> 1;
+ std::vector< P > lowpass_path;
+ for( unsigned int i = 0; i < path.size( ); ++i )
+ {
+ P p;
+ p.Fill( ( typename P::ValueType )( 0 ) );
+ unsigned int c = 0;
+ for( int j = -k; j <= k; ++j )
+ {
+ int l = int( i ) + j;
+ if( l >= 0 && l < path.size( ) )
+ {
+ p += path[ l ].GetVectorFromOrigin( );
+ c++;
+
+ } // fi
+
+ } // rof
+ if( c > 0 )
+ for( unsigned int d = 0; d < P::PointDimension; ++d )
+ p[ d ] /= ( typename P::ValueType )( c );
+ lowpass_path.push_back( p );
+
+ } // rof
+
+ path = lowpass_path;
+
+ } // fi
+}
+
// -------------------------------------------------------------------------
template< class V, class C, class B >
fpa::Base::MinimumSpanningTree< V, C, B >::