X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FMinimumSpanningTree.hxx;h=ad0d06bc00a315e654c77692f9fcef4e5ed4588d;hb=ab4b440668b2007d94345967ac154c4b20aa389f;hp=6c9c790374fd401f8d5ea5f11532916376b90125;hpb=5e326afe442245572b6c3ec98ebeec8b45f9012f;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/MinimumSpanningTree.hxx b/lib/fpa/Base/MinimumSpanningTree.hxx index 6c9c790..ad0d06b 100644 --- a/lib/fpa/Base/MinimumSpanningTree.hxx +++ b/lib/fpa/Base/MinimumSpanningTree.hxx @@ -90,6 +90,7 @@ GetPath( std::vector< V >& path, const V& a, const V& b ) const } // elihw if( raIt != ap.rbegin( ) ) --raIt; + if( rbIt != bp.rbegin( ) ) --rbIt; // Add part from a typename std::vector< V >::const_iterator iaIt = ap.begin( ); @@ -148,6 +149,59 @@ GetPath( std::vector< V >& path, const V& a, const V& b ) const } // 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 >::