void SegmentFactory::loadBool (const ColorFilter &filter, bool *columnBool, const QImage &image, int x) { for (int y = 0; y < image.height(); y++) { if (x < 0) { columnBool [y] = false; } else { columnBool [y] = filter.pixelFilteredIsOn (image, x, y); } } }
bool DigitizeStatePointMatch::pixelIsOnInImage (const QImage &img, int x, int y, int radiusLimit) const { ColorFilter filter; // Examine all nearby pixels bool pixelShouldBeOn = false; for (int xOffset = -radiusLimit; xOffset <= radiusLimit; xOffset++) { for (int yOffset = -radiusLimit; yOffset <= radiusLimit; yOffset++) { int radius = qFloor (qSqrt (xOffset * xOffset + yOffset * yOffset)); if (radius <= radiusLimit) { int xNearby = x + xOffset; int yNearby = y + yOffset; if ((0 <= xNearby) && (0 <= yNearby) && (xNearby < img.width()) && (yNearby < img.height())) { if (filter.pixelFilteredIsOn (img, xNearby, yNearby)) { pixelShouldBeOn = true; break; } } } } } return pixelShouldBeOn; }
QList<PointMatchPixel> DigitizeStatePointMatch::extractSamplePointPixels (const QImage &img, const DocumentModelPointMatch &modelPointMatch, const QPointF &posScreen) const { LOG4CPP_INFO_S ((*mainCat)) << "DigitizeStatePointMatch::extractSamplePointPixels"; // All points inside modelPointMatch.maxPointSize() are collected, whether or not they // are on or off. Originally only the on points were collected, but obvious mismatches // were happening (example, 3x3 point would appear to be found in several places inside 8x32 rectangle) QList<PointMatchPixel> samplePointPixels; int radiusMax = qFloor (modelPointMatch.maxPointSize() / 2); ColorFilter colorFilter; for (int xOffset = -radiusMax; xOffset <= radiusMax; xOffset++) { for (int yOffset = -radiusMax; yOffset <= radiusMax; yOffset++) { int x = qFloor (posScreen.x() + xOffset); int y = qFloor (posScreen.y() + yOffset); int radius = qFloor (qSqrt (xOffset * xOffset + yOffset * yOffset)); if (radius <= radiusMax) { bool pixelIsOn = colorFilter.pixelFilteredIsOn (img, x, y); PointMatchPixel point (xOffset, yOffset, pixelIsOn); samplePointPixels.push_back (point); } } } return samplePointPixels; }