File: segmentation.hh

package info (click to toggle)
exactimage 0.9.1-16
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 4,264 kB
  • ctags: 6,386
  • sloc: cpp: 33,621; ansic: 1,730; xml: 1,590; makefile: 333; perl: 138; sh: 109; python: 45; php: 37
file content (53 lines) | stat: -rw-r--r-- 1,667 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
 * Image Segmentation
 * Copyright (C) 2007 Valentin Ziegler and René Rebe
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2. A copy of the GNU General
 * Public License can be found in the file LICENSE.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANT-
 * ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 * 
 */


#include <vector>
#include "FG-Matrix.hh"

class Segment
{
public:
  unsigned int x;
  unsigned int y;
  unsigned int w;
  unsigned int h;
  Segment* parent;
  std::vector <Segment*> children;

  Segment(unsigned int ix, unsigned int iy, unsigned int iw, unsigned int ih, Segment* iparent=0);
  ~Segment();

  bool Subdivide(const FGMatrix& img, double tolerance, unsigned int min_length, bool horizontal);

  // Draws a (red) frame around the segment
  void Draw(Image& output, uint16_t r = 255, uint16_t g = 0, uint16_t b = 0);

private:

  void InsertChild(unsigned int start, unsigned int end, bool horizontal);

  // count foreground pixels in horizontal/vertical lines
  unsigned int* Count(const FGMatrix& img, bool horizontal);
};



// returns a segmentation of foreground matrix <img>.
// <tolerance> is the maximum fraction of foreground pixels allowed in a separator line
// <min_w> and <min_h> denote the minimum separator width and height
Segment* segment_image(const FGMatrix& img, double tolerance, unsigned int min_w, unsigned int min_h);