diff --git a/photon-server/src/main/java/org/photonvision/vision/pipe/impl/FindBoardCornersPipe.java b/photon-server/src/main/java/org/photonvision/vision/pipe/impl/FindBoardCornersPipe.java index deba68f2b..8fe5b76f5 100644 --- a/photon-server/src/main/java/org/photonvision/vision/pipe/impl/FindBoardCornersPipe.java +++ b/photon-server/src/main/java/org/photonvision/vision/pipe/impl/FindBoardCornersPipe.java @@ -39,10 +39,26 @@ public class FindBoardCornersPipe Size imageSize; Size patternSize; + // Tune to taste for a reasonable tradeoff between making + // the findCorners portion work hard, versus the subpixel refinement work hard. + final int FIND_CORNERS_WIDTH_PX = 320; + + // Configure the optimizations used while using openCV's find corners algorithm + // Since we return results in real-time, we want ensure it goes as fast as possible + // and fails as fast as possible. + final int findChessboardFlags = + Calib3d.CALIB_CB_NORMALIZE_IMAGE + | Calib3d.CALIB_CB_ADAPTIVE_THRESH + | Calib3d.CALIB_CB_FILTER_QUADS + | Calib3d.CALIB_CB_FAST_CHECK; + private MatOfPoint2f boardCorners = new MatOfPoint2f(); + // Intermedeate result mat's + Mat smallerInFrame = new Mat(); + MatOfPoint2f smallerBoardCorners = new MatOfPoint2f(); + // SubCornerPix params - private final Size windowSize = new Size(11, 11); private final Size zeroZone = new Size(-1, -1); private final TermCriteria criteria = new TermCriteria(3, 30, 0.001); @@ -108,6 +124,103 @@ public class FindBoardCornersPipe return findBoardCorners(in); } + /** + * Figures out how much a frame or point cloud must be scaled down by to match the desired size at + * which to run FindCorners + * + * @param inFrame + * @return + */ + private double getFindCornersScaleFactor(Mat inFrame) { + if (inFrame.width() > FIND_CORNERS_WIDTH_PX) { + return ((double) FIND_CORNERS_WIDTH_PX) / inFrame.width(); + } else { + return 1.0; + } + } + + /** + * Finds the minimum spacing between a set of x/y points Currently only considers points whose + * index is next to each other Which, currently, means it traverses one dimension. This is a rough + * heuristic approach which could be refined in the future. + * + *
Note that the current implementation can be fooled under the following conditions: (1) The + * width of the image is an odd number, and the smallest distance was actually on the between the + * last two points in a given row and (2) The smallest distance was actually in the direction + * orthogonal to that which was getting traversed by iterating through the MatOfPoint2f in order. + * + *
I've chosen not to handle these for speed's sake, and because, really, you don't need the + * exact answer for "min distance". you just need something fairly reasonable. + * + * @param inPoints point set to analyze. Must be a "tall" matrix. + * @return min spacing between neighbors + */ + private double getApproxMinSpacing(MatOfPoint2f inPoints) { + double minSpacing = Double.MAX_VALUE; + for (int pointIdx = 0; pointIdx < inPoints.height() - 1; pointIdx += 2) { + + // +1 idx Neighbor distance + double[] startPoint = inPoints.get(pointIdx, 0); + double[] endPoint = inPoints.get(pointIdx + 1, 0); + double deltaX = startPoint[0] - endPoint[0]; + double deltaY = startPoint[1] - endPoint[1]; + double distToNext = Math.sqrt(deltaX * deltaX + deltaY * deltaY); + + minSpacing = Math.min(distToNext, minSpacing); + } + return minSpacing; + } + + /** + * @param inFrame Full-size mat that is going to get scaled down before passing to + * findBoardCorners + * @return the size to scale the input mat to + */ + private Size getFindCornersImgSize(Mat inFrame) { + var findcorners_height = Math.round(inFrame.height() * getFindCornersScaleFactor(inFrame)); + return new Size(FIND_CORNERS_WIDTH_PX, findcorners_height); + } + + /** + * Given an input frame and a set of points from the "smaller" findChessboardCorner analysis, + * re-scale the points back to where they would have been in the input frame + * + * @param inPoints set of points derived from a call to findChessboardCorner on a shrunken mat. + * Must be a "tall" matrix. + * @param origFrame Original frame we're rescaling points back to + * @param outPoints mat into which the output rescaled points get placed + */ + private void rescalePointsToOrigFrame( + MatOfPoint2f inPoints, Mat origFrame, MatOfPoint2f outPoints) { + // Rescale boardCorners back up to the inproc image size + Point[] outPointsArr = new Point[inPoints.height()]; + double sf = getFindCornersScaleFactor(origFrame); + for (int pointIdx = 0; pointIdx < inPoints.height(); pointIdx++) { + double[] pointCoords = inPoints.get(pointIdx, 0); + double outXCoord = pointCoords[0] / sf; + double outYCoord = pointCoords[1] / sf; + outPointsArr[pointIdx] = new Point(outXCoord, outYCoord); + } + outPoints.fromArray(outPointsArr); + } + + /** + * Picks a window size for doing subpixel optimization based on the board type and spacing + * observed between the corners or points in the image + * + * @param inPoints + * @return + */ + private Size getWindowSize(MatOfPoint2f inPoints) { + double windowHalfWidth = 11; // Dot board uses fixed-size window half-width + if (params.type == UICalibrationData.BoardType.CHESSBOARD) { + // Chessboard uses a dynamic sized window based on how far apart the corners are + windowHalfWidth = Math.floor(getApproxMinSpacing(inPoints) * 0.50); + windowHalfWidth = Math.max(1, windowHalfWidth); + } + return new Size(windowHalfWidth, windowHalfWidth); + } + /** * Find chessboard corners given a input mat and output mat to draw on * @@ -125,7 +238,20 @@ public class FindBoardCornersPipe if (params.type == UICalibrationData.BoardType.CHESSBOARD) { // This is for chessboards - boardFound = Calib3d.findChessboardCorners(inFrame, patternSize, boardCorners); + + // Reduce the image size to be much more manageable + Imgproc.resize(inFrame, smallerInFrame, getFindCornersImgSize(inFrame)); + + // Run the chessboard corner finder on the smaller image + boardFound = + Calib3d.findChessboardCorners( + smallerInFrame, patternSize, smallerBoardCorners, findChessboardFlags); + + // Rescale back to original pixel locations + if (boardFound) { + rescalePointsToOrigFrame(smallerBoardCorners, inFrame, boardCorners); + } + } else if (params.type == UICalibrationData.BoardType.DOTBOARD) { // For dot boards boardFound = @@ -134,10 +260,10 @@ public class FindBoardCornersPipe } if (!boardFound) { - // If we can't find a chessboard/dot board, convert the inFrame back to BGR and return false. - + // If we can't find a chessboard/dot board, just return return null; } + var outBoardCorners = new MatOfPoint2f(); boardCorners.copyTo(outBoardCorners); @@ -148,7 +274,8 @@ public class FindBoardCornersPipe this.imageSize = new Size(inFrame.width(), inFrame.height()); // Do sub corner pix for drawing chessboard - Imgproc.cornerSubPix(inFrame, outBoardCorners, windowSize, zeroZone, criteria); + Imgproc.cornerSubPix( + inFrame, outBoardCorners, getWindowSize(outBoardCorners), zeroZone, criteria); // convert back to BGR // Imgproc.cvtColor(inFrame, inFrame, Imgproc.COLOR_GRAY2BGR); diff --git a/photon-server/src/main/java/org/photonvision/vision/pipeline/Calibrate3dPipeline.java b/photon-server/src/main/java/org/photonvision/vision/pipeline/Calibrate3dPipeline.java index 4c3942feb..6dfc22357 100644 --- a/photon-server/src/main/java/org/photonvision/vision/pipeline/Calibrate3dPipeline.java +++ b/photon-server/src/main/java/org/photonvision/vision/pipeline/Calibrate3dPipeline.java @@ -142,13 +142,6 @@ public class Calibrate3dPipeline // update the UI broadcastState(); - - outputColorCVMat.release(); - return new CVPipelineResult( - MathUtils.nanosToMillis(sumPipeNanosElapsed), - fps, - Collections.emptyList(), - new Frame(new CVMat(inputColorMat), frame.frameStaticProperties)); } } @@ -158,7 +151,7 @@ public class Calibrate3dPipeline return new CVPipelineResult( MathUtils.nanosToMillis(sumPipeNanosElapsed), fps, // Unused but here in case - null, + Collections.emptyList(), new Frame(outputColorCVMat, frame.frameStaticProperties)); } diff --git a/photon-server/src/test/java/org/photonvision/vision/pipeline/Calibrate3dPipeTest.java b/photon-server/src/test/java/org/photonvision/vision/pipeline/Calibrate3dPipeTest.java index 77539910d..68e8a9a22 100644 --- a/photon-server/src/test/java/org/photonvision/vision/pipeline/Calibrate3dPipeTest.java +++ b/photon-server/src/test/java/org/photonvision/vision/pipeline/Calibrate3dPipeTest.java @@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import edu.wpi.first.wpilibj.geometry.Rotation2d; import java.io.File; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -32,7 +33,6 @@ import org.junit.jupiter.api.Test; import org.opencv.core.Mat; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; -import org.opencv.imgproc.Imgproc; import org.photonvision.common.util.TestUtils; import org.photonvision.vision.frame.Frame; import org.photonvision.vision.frame.FrameStaticProperties; @@ -81,6 +81,8 @@ public class Calibrate3dPipeTest { @Test public void calibrationPipelineTest() { + int startMatCount = CVMat.getMatCount(); + File dir = new File(TestUtils.getDotBoardImagesPath().toAbsolutePath().toString()); File[] directoryListing = dir.listFiles(); @@ -99,6 +101,7 @@ public class Calibrate3dPipeTest { new CVMat(Imgcodecs.imread(file.getAbsolutePath())), new FrameStaticProperties(640, 480, 60, new Rotation2d(), null))); // TestUtils.showImage(output.outputFrame.image.getMat()); + output.release(); } assertTrue( @@ -107,10 +110,12 @@ public class Calibrate3dPipeTest { .allMatch(it -> it.width() > 0 && it.height() > 0)); calibration3dPipeline.removeSnapshot(0); - calibration3dPipeline.run( - new Frame( - new CVMat(Imgcodecs.imread(directoryListing[0].getAbsolutePath())), - new FrameStaticProperties(640, 480, 60, new Rotation2d(), null))); + calibration3dPipeline + .run( + new Frame( + new CVMat(Imgcodecs.imread(directoryListing[0].getAbsolutePath())), + new FrameStaticProperties(640, 480, 60, new Rotation2d(), null))) + .release(); assertTrue( calibration3dPipeline.foundCornersList.stream() @@ -128,17 +133,54 @@ public class Calibrate3dPipeTest { System.out.println("Standard Deviation: " + cal.standardDeviation); System.out.println( "Mean: " + Arrays.stream(calibration3dPipeline.perViewErrors()).average().toString()); + + // Confirm we didn't get leaky on our mat usage + assertTrue(CVMat.getMatCount() == startMatCount); } @Test - public void calibrateSquaresTest() { + public void calibrateSquares320x240() { + String base = TestUtils.getSquaresBoardImagesPath().toAbsolutePath().toString(); + File dir = Path.of(base, "piCam", "320_240_1").toFile(); + Size sz = new Size(320, 240); + calibrateSquaresCommon(sz, dir); + } - File dir = new File(TestUtils.getSquaresBoardImagesPath().toAbsolutePath().toString()); - File[] directoryListing = dir.listFiles(); + @Test + public void calibrateSquares640x480() { + String base = TestUtils.getSquaresBoardImagesPath().toAbsolutePath().toString(); + File dir = Path.of(base, "piCam", "640_480_1").toFile(); + Size sz = new Size(640, 480); + calibrateSquaresCommon(sz, dir); + } + + @Test + public void calibrateSquares960x720() { + String base = TestUtils.getSquaresBoardImagesPath().toAbsolutePath().toString(); + File dir = Path.of(base, "piCam", "960_720_1").toFile(); + Size sz = new Size(960, 720); + calibrateSquaresCommon(sz, dir); + } + + @Test + public void calibrateSquares1920x1080() { + String base = TestUtils.getSquaresBoardImagesPath().toAbsolutePath().toString(); + File dir = Path.of(base, "piCam", "1920_1080_1").toFile(); + Size sz = new Size(1920, 1080); + calibrateSquaresCommon(sz, dir); + } + + public void calibrateSquaresCommon(Size imgRes, File rootFolder) { + + int startMatCount = CVMat.getMatCount(); + + File[] directoryListing = rootFolder.listFiles(); + + assertTrue(directoryListing.length >= 25); Calibrate3dPipeline calibration3dPipeline = new Calibrate3dPipeline(20); calibration3dPipeline.getSettings().boardType = UICalibrationData.BoardType.CHESSBOARD; - calibration3dPipeline.getSettings().resolution = new Size(320, 240); + calibration3dPipeline.getSettings().resolution = imgRes; for (var file : directoryListing) { if (file.isFile()) { @@ -147,9 +189,11 @@ public class Calibrate3dPipeTest { calibration3dPipeline.run( new Frame( new CVMat(Imgcodecs.imread(file.getAbsolutePath())), - new FrameStaticProperties(320, 240, 67, new Rotation2d(), null))); + new FrameStaticProperties( + (int) imgRes.width, (int) imgRes.height, 67, new Rotation2d(), null))); - // TestUtils.showImage(output.outputFrame.image.getMat(), file.getName()); + // TestUtils.showImage(output.outputFrame.image.getMat(), file.getName(), 1); + output.outputFrame.release(); } } @@ -161,24 +205,43 @@ public class Calibrate3dPipeTest { var cal = calibration3dPipeline.tryCalibration(); calibration3dPipeline.finishCalibration(); - for (var file : directoryListing) { - if (file.isFile()) { - Mat raw = Imgcodecs.imread(file.getAbsolutePath()); - Mat undistorted = new Mat(new Size(600, 600), raw.type()); - Imgproc.undistort( - raw, undistorted, cal.cameraIntrinsics.getAsMat(), cal.cameraExtrinsics.getAsMat()); - - TestUtils.showImage(undistorted, "undistorted " + file.getName(), 1); - } - } + // for (var file : directoryListing) { + // if (file.isFile()) { + // Mat raw = Imgcodecs.imread(file.getAbsolutePath()); + // Mat undistorted = new Mat(new Size(imgRes.width * 2, imgRes.height * 2), raw.type()); + // Imgproc.undistort( + // raw, undistorted, cal.cameraIntrinsics.getAsMat(), + // cal.cameraExtrinsics.getAsMat()); + // + // TestUtils.showImage(undistorted, "undistorted " + file.getName(), 1); //apparently + // flakey in CI? + // raw.release(); + // undistorted.release(); + // } + // } + // Confirm we have indeed gotten valid calibration objects assertNotNull(cal); assertNotNull(cal.perViewErrors); + + // Confirm the calibrated center pixel is fairly close to of the "expected" location at the + // center of the sensor. + // For all our data samples so far, this should be true. + double centerXErrPct = + Math.abs(cal.cameraIntrinsics.data[2] - imgRes.width / 2) / (imgRes.width / 2) * 100.0; + double centerYErrPct = + Math.abs(cal.cameraIntrinsics.data[5] - imgRes.height / 2) / (imgRes.height / 2) * 100.0; + assertTrue(centerXErrPct < 10.0); + assertTrue(centerYErrPct < 10.0); + System.out.println("Per View Errors: " + Arrays.toString(cal.perViewErrors)); System.out.println("Camera Intrinsics : " + cal.cameraIntrinsics.toString()); System.out.println("Camera Extrinsics : " + cal.cameraExtrinsics.toString()); System.out.println("Standard Deviation: " + cal.standardDeviation); System.out.println( "Mean: " + Arrays.stream(calibration3dPipeline.perViewErrors()).average().toString()); + + // Confirm we didn't get leaky on our mat usage + assertTrue(CVMat.getMatCount() == startMatCount); } } diff --git a/photon-server/src/test/resources/calibrationSquaresImg/bad/img21.jpg b/photon-server/src/test/resources/calibrationSquaresImg/bad/img21.jpg deleted file mode 100644 index 3e4e926ac..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/bad/img21.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/bad/img23.jpg b/photon-server/src/test/resources/calibrationSquaresImg/bad/img23.jpg deleted file mode 100644 index 9badd2fc9..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/bad/img23.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/bad/img24.jpg b/photon-server/src/test/resources/calibrationSquaresImg/bad/img24.jpg deleted file mode 100644 index b8784deb2..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/bad/img24.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/bad/img9.jpg b/photon-server/src/test/resources/calibrationSquaresImg/bad/img9.jpg deleted file mode 100644 index 3eafeb000..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/bad/img9.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img1.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img1.jpg deleted file mode 100644 index 343d5abc8..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img1.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img10.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img10.jpg deleted file mode 100644 index 5ccb4e571..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img10.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img11.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img11.jpg deleted file mode 100644 index b8140f063..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img11.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img12.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img12.jpg deleted file mode 100644 index d0ee2e5c6..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img12.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img13.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img13.jpg deleted file mode 100644 index accbf3981..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img13.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img14.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img14.jpg deleted file mode 100644 index 3e084b350..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img14.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img15.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img15.jpg deleted file mode 100644 index 926816385..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img15.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img16.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img16.jpg deleted file mode 100644 index bf65792df..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img16.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img17.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img17.jpg deleted file mode 100644 index f604ccb5a..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img17.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img18.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img18.jpg deleted file mode 100644 index 2cc3118fa..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img18.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img19.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img19.jpg deleted file mode 100644 index 7a82159af..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img19.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img2.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img2.jpg deleted file mode 100644 index b28a91e9e..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img2.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img20.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img20.jpg deleted file mode 100644 index 5aa9d5c24..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img20.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img22.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img22.jpg deleted file mode 100644 index b6f384051..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img22.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img25.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img25.jpg deleted file mode 100644 index 8050f3d0f..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img25.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img26.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img26.jpg deleted file mode 100644 index ec28fdac7..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img26.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img3.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img3.jpg deleted file mode 100644 index 7ed355300..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img3.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img4.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img4.jpg deleted file mode 100644 index a29edef9e..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img4.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img5.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img5.jpg deleted file mode 100644 index 0d04fc8fc..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img5.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img6.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img6.jpg deleted file mode 100644 index 1806b513c..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img6.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img7.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img7.jpg deleted file mode 100644 index 9ab415586..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img7.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/img8.jpg b/photon-server/src/test/resources/calibrationSquaresImg/img8.jpg deleted file mode 100644 index f48300375..000000000 Binary files a/photon-server/src/test/resources/calibrationSquaresImg/img8.jpg and /dev/null differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img1.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img1.jpg new file mode 100644 index 000000000..9a05777f1 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img1.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img10.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img10.jpg new file mode 100644 index 000000000..4f29d7ba4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img10.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img11.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img11.jpg new file mode 100644 index 000000000..bfea1fd27 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img11.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img12.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img12.jpg new file mode 100644 index 000000000..da62da453 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img12.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img13.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img13.jpg new file mode 100644 index 000000000..b3ec91179 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img13.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img14.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img14.jpg new file mode 100644 index 000000000..617be0589 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img14.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img15.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img15.jpg new file mode 100644 index 000000000..c68142ec4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img15.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img16.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img16.jpg new file mode 100644 index 000000000..9a5cdf31a Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img16.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img17.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img17.jpg new file mode 100644 index 000000000..f867b69ef Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img17.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img18.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img18.jpg new file mode 100644 index 000000000..2e83930e9 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img18.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img19.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img19.jpg new file mode 100644 index 000000000..8f7c768af Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img19.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img2.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img2.jpg new file mode 100644 index 000000000..560e00b20 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img2.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img20.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img20.jpg new file mode 100644 index 000000000..8f956da19 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img20.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img21.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img21.jpg new file mode 100644 index 000000000..70e855588 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img21.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img22.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img22.jpg new file mode 100644 index 000000000..e8dc41734 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img22.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img23.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img23.jpg new file mode 100644 index 000000000..98181a3ac Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img23.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img24.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img24.jpg new file mode 100644 index 000000000..70238d0f4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img24.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img25.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img25.jpg new file mode 100644 index 000000000..9120cb441 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img25.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img3.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img3.jpg new file mode 100644 index 000000000..e65ad9bb9 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img3.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img4.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img4.jpg new file mode 100644 index 000000000..ff8221efa Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img4.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img5.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img5.jpg new file mode 100644 index 000000000..3ff6c7884 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img5.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img6.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img6.jpg new file mode 100644 index 000000000..d155926b7 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img6.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img7.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img7.jpg new file mode 100644 index 000000000..bb9b00390 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img7.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img8.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img8.jpg new file mode 100644 index 000000000..89bf7da23 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img8.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img9.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img9.jpg new file mode 100644 index 000000000..9a14d11aa Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/1920_1080_1/img9.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img1.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img1.jpg new file mode 100644 index 000000000..a9c8faa0f Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img1.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img10.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img10.jpg new file mode 100644 index 000000000..c9b7eacdd Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img10.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img11.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img11.jpg new file mode 100644 index 000000000..49c748a8c Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img11.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img12.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img12.jpg new file mode 100644 index 000000000..7f58b43ec Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img12.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img13.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img13.jpg new file mode 100644 index 000000000..3b0841a20 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img13.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img14.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img14.jpg new file mode 100644 index 000000000..df489dd48 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img14.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img15.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img15.jpg new file mode 100644 index 000000000..9dca383e0 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img15.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img16.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img16.jpg new file mode 100644 index 000000000..9d453496e Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img16.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img17.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img17.jpg new file mode 100644 index 000000000..0fd124ffe Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img17.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img18.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img18.jpg new file mode 100644 index 000000000..7b8ca0ca9 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img18.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img19.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img19.jpg new file mode 100644 index 000000000..c8b031075 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img19.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img2.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img2.jpg new file mode 100644 index 000000000..de387800d Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img2.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img20.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img20.jpg new file mode 100644 index 000000000..5ef5b7d22 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img20.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img21.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img21.jpg new file mode 100644 index 000000000..902587a6b Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img21.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img22.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img22.jpg new file mode 100644 index 000000000..dbfa6fe90 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img22.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img23.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img23.jpg new file mode 100644 index 000000000..f61f1c070 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img23.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img24.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img24.jpg new file mode 100644 index 000000000..0cf8767c5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img24.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img25.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img25.jpg new file mode 100644 index 000000000..63aaf5d72 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img25.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img26.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img26.jpg new file mode 100644 index 000000000..83163a4d5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img26.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img3.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img3.jpg new file mode 100644 index 000000000..886357936 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img3.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img4.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img4.jpg new file mode 100644 index 000000000..6ab4952b8 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img4.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img5.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img5.jpg new file mode 100644 index 000000000..8476ca93d Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img5.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img6.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img6.jpg new file mode 100644 index 000000000..d8de6e475 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img6.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img7.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img7.jpg new file mode 100644 index 000000000..f94806dc3 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img7.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img8.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img8.jpg new file mode 100644 index 000000000..9f79f4571 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img8.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img9.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img9.jpg new file mode 100644 index 000000000..938c3ac1e Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/320_240_1/img9.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img1.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img1.jpg new file mode 100644 index 000000000..c1f4daa86 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img1.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img10.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img10.jpg new file mode 100644 index 000000000..ced4af5c8 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img10.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img11.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img11.jpg new file mode 100644 index 000000000..43bbfbc98 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img11.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img12.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img12.jpg new file mode 100644 index 000000000..0c503d5a4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img12.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img13.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img13.jpg new file mode 100644 index 000000000..79f758559 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img13.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img14.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img14.jpg new file mode 100644 index 000000000..2c1f1c656 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img14.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img15.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img15.jpg new file mode 100644 index 000000000..550d3db37 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img15.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img16.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img16.jpg new file mode 100644 index 000000000..9c4f82fba Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img16.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img17.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img17.jpg new file mode 100644 index 000000000..5eb5820b2 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img17.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img18.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img18.jpg new file mode 100644 index 000000000..b9d1f207c Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img18.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img19.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img19.jpg new file mode 100644 index 000000000..d5b34ecd5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img19.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img2.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img2.jpg new file mode 100644 index 000000000..6aa9fe048 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img2.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img20.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img20.jpg new file mode 100644 index 000000000..d0da8e299 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img20.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img21.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img21.jpg new file mode 100644 index 000000000..d3009c7e5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img21.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img22.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img22.jpg new file mode 100644 index 000000000..04aa548cc Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img22.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img23.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img23.jpg new file mode 100644 index 000000000..e22e630de Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img23.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img24.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img24.jpg new file mode 100644 index 000000000..88dafc29f Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img24.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img25.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img25.jpg new file mode 100644 index 000000000..2dffa988c Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img25.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img3.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img3.jpg new file mode 100644 index 000000000..e2b01051c Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img3.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img4.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img4.jpg new file mode 100644 index 000000000..44ef83947 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img4.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img5.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img5.jpg new file mode 100644 index 000000000..0de666108 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img5.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img6.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img6.jpg new file mode 100644 index 000000000..2b6170933 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img6.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img7.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img7.jpg new file mode 100644 index 000000000..63453d7e4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img7.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img8.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img8.jpg new file mode 100644 index 000000000..3dbe4a9a4 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img8.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img9.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img9.jpg new file mode 100644 index 000000000..9c0d26cbc Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/640_480_1/img9.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img1.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img1.jpg new file mode 100644 index 000000000..8ef67ad63 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img1.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img10.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img10.jpg new file mode 100644 index 000000000..f4019e19b Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img10.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img11.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img11.jpg new file mode 100644 index 000000000..870363eae Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img11.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img12.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img12.jpg new file mode 100644 index 000000000..4c056a67a Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img12.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img13.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img13.jpg new file mode 100644 index 000000000..03120b577 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img13.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img14.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img14.jpg new file mode 100644 index 000000000..01c75560c Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img14.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img15.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img15.jpg new file mode 100644 index 000000000..3b1b2e981 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img15.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img16.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img16.jpg new file mode 100644 index 000000000..2a938c7e8 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img16.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img17.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img17.jpg new file mode 100644 index 000000000..5bfb2dea6 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img17.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img18.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img18.jpg new file mode 100644 index 000000000..cc4252178 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img18.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img19.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img19.jpg new file mode 100644 index 000000000..b180edf0e Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img19.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img2.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img2.jpg new file mode 100644 index 000000000..a9590b0e5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img2.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img20.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img20.jpg new file mode 100644 index 000000000..291a22630 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img20.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img21.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img21.jpg new file mode 100644 index 000000000..84ac128f0 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img21.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img22.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img22.jpg new file mode 100644 index 000000000..8d0ea11aa Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img22.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img23.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img23.jpg new file mode 100644 index 000000000..fc1b91a70 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img23.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img24.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img24.jpg new file mode 100644 index 000000000..7aab28b60 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img24.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img25.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img25.jpg new file mode 100644 index 000000000..529c918de Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img25.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img3.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img3.jpg new file mode 100644 index 000000000..b91a7c2c5 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img3.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img4.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img4.jpg new file mode 100644 index 000000000..ceb1a36b3 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img4.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img5.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img5.jpg new file mode 100644 index 000000000..002c6e856 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img5.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img6.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img6.jpg new file mode 100644 index 000000000..bb153dabf Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img6.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img7.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img7.jpg new file mode 100644 index 000000000..9b82e209d Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img7.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img8.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img8.jpg new file mode 100644 index 000000000..1a88213ea Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img8.jpg differ diff --git a/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img9.jpg b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img9.jpg new file mode 100644 index 000000000..da0635048 Binary files /dev/null and b/photon-server/src/test/resources/calibrationSquaresImg/piCam/960_720_1/img9.jpg differ