Tesseract  3.02
tesseract::IntGrid Class Reference

#include <bbgrid.h>

Inheritance diagram for tesseract::IntGrid:
tesseract::GridBase

List of all members.

Public Member Functions

 IntGrid ()
 IntGrid (int gridsize, const ICOORD &bleft, const ICOORD &tright)
virtual ~IntGrid ()
void Init (int gridsize, const ICOORD &bleft, const ICOORD &tright)
void Clear ()
void Rotate (const FCOORD &rotation)
IntGridNeighbourhoodSum () const
int GridCellValue (int grid_x, int grid_y) const
void SetGridCell (int grid_x, int grid_y, int value)
bool RectMostlyOverThreshold (const TBOX &rect, int threshold) const
bool AnyZeroInRect (const TBOX &rect) const
Pix * ThresholdToPix (int threshold) const

Detailed Description

Definition at line 102 of file bbgrid.h.


Constructor & Destructor Documentation

tesseract::IntGrid::IntGrid ( )

Definition at line 66 of file bbgrid.cpp.

                 {
  grid_ = NULL;
}
tesseract::IntGrid::IntGrid ( int  gridsize,
const ICOORD bleft,
const ICOORD tright 
)

Definition at line 70 of file bbgrid.cpp.

  : grid_(NULL) {
  Init(gridsize, bleft, tright);
}
tesseract::IntGrid::~IntGrid ( ) [virtual]

Definition at line 75 of file bbgrid.cpp.

                  {
  if (grid_ != NULL)
    delete [] grid_;
}

Member Function Documentation

bool tesseract::IntGrid::AnyZeroInRect ( const TBOX rect) const

Definition at line 178 of file bbgrid.cpp.

                                                  {
  int min_x, min_y, max_x, max_y;
  GridCoords(rect.left(), rect.bottom(), &min_x, &min_y);
  GridCoords(rect.right(), rect.top(), &max_x, &max_y);
  for (int y = min_y; y <= max_y; ++y) {
    for (int x = min_x; x <= max_x; ++x) {
      if (GridCellValue(x, y) == 0)
        return true;
    }
  }
  return false;
}
void tesseract::IntGrid::Clear ( )

Definition at line 91 of file bbgrid.cpp.

                    {
  for (int i = 0; i < gridbuckets_; ++i) {
    grid_[i] = 0;
  }
}
int tesseract::IntGrid::GridCellValue ( int  grid_x,
int  grid_y 
) const [inline]

Definition at line 125 of file bbgrid.h.

                                                  {
    ClipGridCoords(&grid_x, &grid_y);
    return grid_[grid_y * gridwidth_ + grid_x];
  }
void tesseract::IntGrid::Init ( int  gridsize,
const ICOORD bleft,
const ICOORD tright 
)

Reimplemented from tesseract::GridBase.

Definition at line 82 of file bbgrid.cpp.

                                                                          {
  GridBase::Init(gridsize, bleft, tright);
  if (grid_ != NULL)
    delete [] grid_;
  grid_ = new int[gridbuckets_];
  Clear();
}
IntGrid * tesseract::IntGrid::NeighbourhoodSum ( ) const

Definition at line 136 of file bbgrid.cpp.

                                         {
  IntGrid* sumgrid = new IntGrid(gridsize(), bleft(), tright());
  for (int y = 0; y < gridheight(); ++y) {
    for (int x = 0; x < gridwidth(); ++x) {
      int cell_count = 0;
      for (int yoffset = -1; yoffset <= 1; ++yoffset) {
        for (int xoffset = -1; xoffset <= 1; ++xoffset) {
          int grid_x = x + xoffset;
          int grid_y = y + yoffset;
          ClipGridCoords(&grid_x, &grid_y);
          cell_count += GridCellValue(grid_x, grid_y);
        }
      }
      if (GridCellValue(x, y) > 1)
        sumgrid->SetGridCell(x, y, cell_count);
    }
  }
  return sumgrid;
}
bool tesseract::IntGrid::RectMostlyOverThreshold ( const TBOX rect,
int  threshold 
) const

Definition at line 158 of file bbgrid.cpp.

                                                                           {
  int min_x, min_y, max_x, max_y;
  GridCoords(rect.left(), rect.bottom(), &min_x, &min_y);
  GridCoords(rect.right(), rect.top(), &max_x, &max_y);
  int total_area = 0;
  for (int y = min_y; y <= max_y; ++y) {
    for (int x = min_x; x <= max_x; ++x) {
      int value = GridCellValue(x, y);
      if (value > threshold) {
        TBOX cell_box(x * gridsize_, y * gridsize_,
                      (x + 1) * gridsize_, (y + 1) * gridsize_);
        cell_box &= rect;  // This is in-place box intersection.
        total_area += cell_box.area();
      }
    }
  }
  return total_area * 2 > rect.area();
}
void tesseract::IntGrid::Rotate ( const FCOORD rotation)

Definition at line 103 of file bbgrid.cpp.

                                           {
  ASSERT_HOST(rotation.x() == 0.0f || rotation.y() == 0.0f);
  ICOORD old_bleft(bleft());
  ICOORD old_tright(tright());
  int old_width = gridwidth();
  int old_height = gridheight();
  TBOX box(bleft(), tright());
  box.rotate(rotation);
  int* old_grid = grid_;
  grid_ = NULL;
  Init(gridsize(), box.botleft(), box.topright());
  // Iterate over the old grid, copying data to the rotated position in the new.
  int oldi = 0;
  FCOORD x_step(rotation);
  x_step *= gridsize();
  for (int oldy = 0; oldy < old_height; ++oldy) {
    FCOORD line_pos(old_bleft.x(), old_bleft.y() + gridsize() * oldy);
    line_pos.rotate(rotation);
    for (int oldx = 0; oldx < old_width; ++oldx, line_pos += x_step, ++oldi) {
      int grid_x, grid_y;
      GridCoords(static_cast<int>(line_pos.x() + 0.5),
                 static_cast<int>(line_pos.y() + 0.5),
                 &grid_x, &grid_y);
      grid_[grid_y * gridwidth() + grid_x] = old_grid[oldi];
    }
  }
  delete [] old_grid;
}
void tesseract::IntGrid::SetGridCell ( int  grid_x,
int  grid_y,
int  value 
) [inline]

Definition at line 129 of file bbgrid.h.

                                                      {
    ASSERT_HOST(grid_x >= 0 && grid_x < gridwidth());
    ASSERT_HOST(grid_y >= 0 && grid_y < gridheight());
    grid_[grid_y * gridwidth_ + grid_x] = value;
  }
Pix * tesseract::IntGrid::ThresholdToPix ( int  threshold) const

Definition at line 194 of file bbgrid.cpp.

                                                {
  Pix* pix = pixCreate(tright().x() - bleft().x(),
                       tright().y() - bleft().y(), 1);
  int cellsize = gridsize();
  for (int y = 0; y < gridheight(); ++y) {
    for (int x = 0; x < gridwidth(); ++x) {
      if (GridCellValue(x, y) > threshold &&
          GridCellValue(x - 1, y) > 0 && GridCellValue(x + 1, y) > 0 &&
              GridCellValue(x, y - 1) > 0 && GridCellValue(x, y + 1) > 0) {
        pixRasterop(pix, x * cellsize, tright().y() - ((y + 1) * cellsize),
                    cellsize, cellsize, PIX_SET, NULL, 0, 0);
      }
    }
  }
  return pix;
}

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