#include <segmenterFelzenszwalb.h>
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< Segment > | m_segmentation |
| float | m_sigma |
| size_t | m_smoothSize |
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.
1.5.8