Adjust formatting on last change. Simplify GridSampler

git-svn-id: https://zxing.googlecode.com/svn/trunk@1618 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2010-10-07 08:29:41 +00:00
parent 5053864cb3
commit aa6c437d71
6 changed files with 73 additions and 127 deletions

View file

@ -23,24 +23,6 @@ import com.google.zxing.NotFoundException;
*/ */
public final class DefaultGridSampler extends GridSampler { public final class DefaultGridSampler extends GridSampler {
public BitMatrix sampleGrid(BitMatrix image,
int dimension,
float p1ToX, float p1ToY,
float p2ToX, float p2ToY,
float p3ToX, float p3ToY,
float p4ToX, float p4ToY,
float p1FromX, float p1FromY,
float p2FromX, float p2FromY,
float p3FromX, float p3FromY,
float p4FromX, float p4FromY) throws NotFoundException {
PerspectiveTransform transform = PerspectiveTransform.quadrilateralToQuadrilateral(
p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY,
p1FromX, p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY);
return sampleGrid(image, dimension, dimension, transform);
}
public BitMatrix sampleGrid(BitMatrix image, public BitMatrix sampleGrid(BitMatrix image,
int dimensionX, int dimensionX,
int dimensionY, int dimensionY,
@ -61,7 +43,8 @@ return sampleGrid(image, dimensionX, dimensionY, transform);
} }
public BitMatrix sampleGrid(BitMatrix image, public BitMatrix sampleGrid(BitMatrix image,
int dimensionX, int dimensionY, int dimensionX,
int dimensionY,
PerspectiveTransform transform) throws NotFoundException { PerspectiveTransform transform) throws NotFoundException {
BitMatrix bits = new BitMatrix(dimensionX, dimensionY); BitMatrix bits = new BitMatrix(dimensionX, dimensionY);
float[] points = new float[dimensionX << 1]; float[] points = new float[dimensionX << 1];

View file

@ -58,40 +58,6 @@ public abstract class GridSampler {
return gridSampler; return gridSampler;
} }
/**
* <p>Samples an image for a square matrix of bits of the given dimension. This is used to extract
* the black/white modules of a 2D barcode like a QR Code found in an image. Because this barcode
* may be rotated or perspective-distorted, the caller supplies four points in the source image
* that define known points in the barcode, so that the image may be sampled appropriately.</p>
*
* <p>The last eight "from" parameters are four X/Y coordinate pairs of locations of points in
* the image that define some significant points in the image to be sample. For example,
* these may be the location of finder pattern in a QR Code.</p>
*
* <p>The first eight "to" parameters are four X/Y coordinate pairs measured in the destination
* {@link BitMatrix}, from the top left, where the known points in the image given by the "from"
* parameters map to.</p>
*
* <p>These 16 parameters define the transformation needed to sample the image.</p>
*
* @param image image to sample
* @param dimension width/height of {@link BitMatrix} to sample from image
* @return {@link BitMatrix} representing a grid of points sampled from the image within a region
* defined by the "from" parameters
* @throws NotFoundException if image can't be sampled, for example, if the transformation defined
* by the given points is invalid or results in sampling outside the image boundaries
*/
public abstract BitMatrix sampleGrid(BitMatrix image,
int dimension,
float p1ToX, float p1ToY,
float p2ToX, float p2ToY,
float p3ToX, float p3ToY,
float p4ToX, float p4ToY,
float p1FromX, float p1FromY,
float p2FromX, float p2FromY,
float p3FromX, float p3FromY,
float p4FromX, float p4FromY) throws NotFoundException;
/** /**
* Samples an image for a rectangular matrix of bits of the given dimension. * Samples an image for a rectangular matrix of bits of the given dimension.
* @param image image to sample * @param image image to sample
@ -114,12 +80,10 @@ public abstract class GridSampler {
float p3FromX, float p3FromY, float p3FromX, float p3FromY,
float p4FromX, float p4FromY) throws NotFoundException; float p4FromX, float p4FromY) throws NotFoundException;
public BitMatrix sampleGrid(BitMatrix image, public abstract BitMatrix sampleGrid(BitMatrix image,
int dimension, int dimensionX,
PerspectiveTransform transform) throws NotFoundException { int dimensionY,
throw new IllegalStateException(); // Can't use UnsupportedOperationException PerspectiveTransform transform) throws NotFoundException;
}
/** /**
* <p>Checks a set of points that have been transformed to sample points on an image against * <p>Checks a set of points that have been transformed to sample points on an image against
@ -136,8 +100,7 @@ public abstract class GridSampler {
* @param points actual points in x1,y1,...,xn,yn form * @param points actual points in x1,y1,...,xn,yn form
* @throws NotFoundException if an endpoint is lies outside the image boundaries * @throws NotFoundException if an endpoint is lies outside the image boundaries
*/ */
protected static void checkAndNudgePoints(BitMatrix image, float[] points) protected static void checkAndNudgePoints(BitMatrix image, float[] points) throws NotFoundException {
throws NotFoundException {
int width = image.getWidth(); int width = image.getWidth();
int height = image.getHeight(); int height = image.getHeight();
// Check and nudge points from start until we see some that are OK: // Check and nudge points from start until we see some that are OK:

View file

@ -418,7 +418,6 @@ final class BitMatrixParser {
int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;
int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;
// TODO(bbrown): Make this work with rectangular codes
BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow); BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);
for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {
int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;

View file

@ -283,14 +283,12 @@ public final class Detector {
return c1; return c1;
} }
int l1 = Math.abs(transitionsBetween(topLeft, c1).getTransitions() - transitionsBetween(bottomRight, c1).getTransitions()); int l1 = Math.abs(transitionsBetween(topLeft, c1).getTransitions() -
int l2 = Math.abs(transitionsBetween(topLeft, c2).getTransitions() - transitionsBetween(bottomRight, c2).getTransitions()); transitionsBetween(bottomRight, c1).getTransitions());
int l2 = Math.abs(transitionsBetween(topLeft, c2).getTransitions() -
transitionsBetween(bottomRight, c2).getTransitions());
if (l1 <= l2){ return l1 <= l2 ? c1 : c2;
return c1;
}
return c2;
} }
private boolean isValid(ResultPoint p) { private boolean isValid(ResultPoint p) {

View file

@ -377,7 +377,10 @@ public final class Detector {
// very corners. So there is no 0.5f here; 0.0f is right. // very corners. So there is no 0.5f here; 0.0f is right.
GridSampler sampler = GridSampler.getInstance(); GridSampler sampler = GridSampler.getInstance();
return sampler.sampleGrid(matrix, dimension, 0.0f, // p1ToX return sampler.sampleGrid(
matrix,
dimension, dimension,
0.0f, // p1ToX
0.0f, // p1ToY 0.0f, // p1ToY
dimension, // p2ToX dimension, // p2ToX
0.0f, // p2ToY 0.0f, // p2ToY

View file

@ -184,7 +184,7 @@ public class Detector {
int dimension) throws NotFoundException { int dimension) throws NotFoundException {
GridSampler sampler = GridSampler.getInstance(); GridSampler sampler = GridSampler.getInstance();
return sampler.sampleGrid(image, dimension, transform); return sampler.sampleGrid(image, dimension, dimension, transform);
} }
/** /**