public static AlignmentPattern findAlignmentPattern(bool[][] image, FinderPattern finderPattern) { Point[][] logicalCenters = getLogicalCenter(finderPattern); int patternDistance = logicalCenters[1][0].X - logicalCenters[0][0].X; return(new AlignmentPattern(getCenter(image, finderPattern, logicalCenters), patternDistance)); }
public static Point[][] getLogicalCenter(FinderPattern finderPattern) { int version = finderPattern.Version; Point[][] pointArray = new Point[1][]; for (int i = 0; i < 1; i++) { pointArray[i] = new Point[1]; } int[] numArray = new int[1]; numArray = LogicalSeed.getSeed(version); pointArray = new Point[numArray.Length][]; for (int j = 0; j < numArray.Length; j++) { pointArray[j] = new Point[numArray.Length]; } for (int k = 0; k < pointArray.Length; k++) { for (int m = 0; m < pointArray.Length; m++) { pointArray[m][k] = new Point(numArray[m], numArray[k]); } } return(pointArray); }
internal static Point[][] getCenter(bool[][] image, FinderPattern finderPattern, Point[][] logicalCenters) { int modulePitch = finderPattern.getModuleSize(); Axis axis = new Axis(finderPattern.getAngle(), modulePitch); int length = logicalCenters.Length; Point[][] pointArray = new Point[length][]; for (int i = 0; i < length; i++) { pointArray[i] = new Point[length]; } axis.Origin = finderPattern.getCenter(0); pointArray[0][0] = axis.translate(3, 3); canvas.drawCross(pointArray[0][0], Color_Fields.BLUE); axis.Origin = finderPattern.getCenter(1); pointArray[length - 1][0] = axis.translate(-3, 3); canvas.drawCross(pointArray[length - 1][0], Color_Fields.BLUE); axis.Origin = finderPattern.getCenter(2); pointArray[0][length - 1] = axis.translate(3, -3); canvas.drawCross(pointArray[0][length - 1], Color_Fields.BLUE); Point point = pointArray[0][0]; for (int j = 0; j < length; j++) { for (int k = 0; k < length; k++) { if ((((k != 0) || (j != 0)) && ((k != 0) || (j != (length - 1)))) ? ((k != (length - 1)) || (j != 0)) : false) { Point point2 = null; if (j == 0) { if ((k > 0) && (k < (length - 1))) { point2 = axis.translate(pointArray[k - 1][j], logicalCenters[k][j].X - logicalCenters[k - 1][j].X, 0); } pointArray[k][j] = new Point(point2.X, point2.Y); canvas.drawCross(pointArray[k][j], Color_Fields.RED); } else if (k == 0) { if ((j > 0) && (j < (length - 1))) { point2 = axis.translate(pointArray[k][j - 1], 0, logicalCenters[k][j].Y - logicalCenters[k][j - 1].Y); } pointArray[k][j] = new Point(point2.X, point2.Y); canvas.drawCross(pointArray[k][j], Color_Fields.RED); } else { Point point3 = axis.translate(pointArray[k - 1][j], logicalCenters[k][j].X - logicalCenters[k - 1][j].X, 0); Point point4 = axis.translate(pointArray[k][j - 1], 0, logicalCenters[k][j].Y - logicalCenters[k][j - 1].Y); pointArray[k][j] = new Point((point3.X + point4.X) / 2, ((point3.Y + point4.Y) / 2) + 1); } if (finderPattern.Version > 1) { Point other = getPrecisionCenter(image, pointArray[k][j]); if (pointArray[k][j].distanceOf(other) < 6) { canvas.drawCross(pointArray[k][j], Color_Fields.RED); int num6 = other.X - pointArray[k][j].X; int num7 = other.Y - pointArray[k][j].Y; canvas.println(string.Concat(new object[] { "Adjust AP(", k, ",", j, ") to d(", num6, ",", num7, ")" })); pointArray[k][j] = other; } } canvas.drawCross(pointArray[k][j], Color_Fields.BLUE); canvas.drawLine(new Line(point, pointArray[k][j]), Color_Fields.LIGHTBLUE); point = pointArray[k][j]; } } } return(pointArray); }