dlr::computerVision::SegmenterFelzenszwalb< EdgeFunctor > Class Template Reference

This class implements the image segmentation algorithm described [1]. More...

#include <segmenterFelzenszwalb.h>

List of all members.

Public Member Functions

 SegmenterFelzenszwalb (float k=200.0f, float sigma=0.8f, size_t minSegmentSize=20, EdgeFunctor const &edgeFunctor=EdgeFunctor())
template<ImageFormat FORMAT>
std::vector< Edge > getEdges (const Image< FORMAT > &inImage)
template<ImageFormat FORMAT>
std::vector< Edge > getEdges4Connected (const Image< FORMAT > &inImage)
template<ImageFormat FORMAT>
std::vector< Edge > getEdges8Connected (const Image< FORMAT > &inImage)
virtual Array2D< UnsignedInt32 > getLabelArray ()
virtual Array2D< UnsignedInt32 > getLabelArray (UnsignedInt32 &numberOfSegments, std::vector< size_t > &segmentSizes)
template<ImageFormat FORMAT>
void segment (const Image< FORMAT > &inputImage)
template<class ITER >
void segmentFromEdges (size_t imageRows, size_t imageColumns, ITER edgeBegin, ITER edgeEnd)

Protected Types

typedef
privateCode::DisjointSet
< float > 
Segment

Protected Member Functions

float getCost (const Segment &C_i, const Segment &C_j)
template<ImageFormat FORMAT>
void setEdge (Edge &edge, size_t index0, size_t index1, Image< FORMAT > inImage)
void updateCost (Segment &C_i, float weight)

Protected Attributes

EdgeFunctor m_edgeFunctor
numeric::Index2D m_imageSize
float m_k
size_t m_minimumSegmentSize
numeric::Array1D< Segmentm_segmentation
float m_sigma
size_t m_smoothSize


Detailed Description

template<class EdgeFunctor>
class dlr::computerVision::SegmenterFelzenszwalb< EdgeFunctor >

This class implements the image segmentation algorithm described [1].

Essentially grouping pixels based on local differences so that segmented regions have similar local variances.

Here is an example of how to use this class:

   Image<GRAY8> inputImage0 = readPGM8(getTestImageFileNamePGM0());
   SegmenterFelzenszwalb<EdgeDefaultFunctor> segmenter(
     kappa, sigma, minSegmentSize);
   segmenter.segment(inputImage0);
   Array2D<UnsignedInt32> labelArray = segmenter.getLabelArray();
 @endCode

 If you need more control over the edge weights that are used
 to do the (graph based) segmentation, you can do the
 following:

 @code
   Image<GRAY8> inputImage0 = readPGM8(getTestImageFileNamePGM0());
   SegmenterFelzenszwalb<MyEdgeFunctor> segmenter(
     kappa, sigma, minSegmentSize);
   
   // Generate graph edges for segmentation.
   Image<HSV8> hsvImage = myPreprocessingRoutine(inputImage0);
   std::vector<cv::Edge> edges = segmenter.getEdges(hsvImage);

   // Actually do the segmentation.
   segmenter.segmentFromEdges(hsvImage.rows(), hsvImage.columns(),
                              edges.begin(), edges.end());
   Array2D<UnsignedInt32> labelArray = segmenter.getLabelArray();

[1] Felzenszwalb, P., and Huttenlocher, D., Efficient Graph-Based Image Segmentation, International Journal of Computer Vision, Volume 59, Number 2, September 2004.

Definition at line 87 of file segmenterFelzenszwalb.h.


The documentation for this class was generated from the following file:

Generated on Wed Nov 25 12:15:09 2009 for dlrComputerVision Utility Library by  doxygen 1.5.8