From 14d53f068b65b244c150a05e483e56cf6fdc38a5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tomas=20Wenstr=C3=B6m?= Date: Mon, 8 May 2017 21:47:20 +0200 Subject: [PATCH] Changed to model 4 (testing) --- src/kaka/cakelight/Frame.java | 71 +++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/src/kaka/cakelight/Frame.java b/src/kaka/cakelight/Frame.java index c0bc76c..0ae0d41 100644 --- a/src/kaka/cakelight/Frame.java +++ b/src/kaka/cakelight/Frame.java @@ -11,9 +11,10 @@ import static kaka.cakelight.Main.timeIt; public class Frame { private byte[] data; private Configuration config; - private Mat colImage; - private Mat rowImage; +// private Mat colImage; +// private Mat rowImage; private Mat converted; + private Mat[] images; private Frame(byte[] data) { this.data = data; @@ -56,7 +57,8 @@ public class Frame { Imgproc.cvtColor(cropped, converted, config.video.format); // timeIt("model 1", () -> model1(converted, Imgproc.INTER_AREA)); // timeIt("model 2", () -> model2(converted, Imgproc.INTER_AREA)); - timeIt("model 3", () -> model3(converted, Imgproc.INTER_AREA)); +// timeIt("model 3", () -> model3(converted, Imgproc.INTER_AREA)); + timeIt("model 4", () -> model4(converted, Imgproc.INTER_AREA)); // save(converted, "/home/kaka/test-converted.data"); // save(resized, "/home/kaka/test-resized.data"); src.release(); @@ -74,32 +76,57 @@ public class Frame { } private void model3(Mat src, int interpolation) { - colImage = new Mat(); - rowImage = new Mat(); - Imgproc.resize(src, colImage, new Size(config.leds.cols, 9), 0, 0, interpolation); - Imgproc.resize(src, rowImage, new Size(16, config.leds.rows), 0, 0, interpolation); - } - - public Color getLedColor(ListPosition listPosition, int xy) { +// colImage = new Mat(); +// rowImage = new Mat(); +// Imgproc.resize(src, colImage, new Size(config.leds.cols, 9), 0, 0, interpolation); +// Imgproc.resize(src, rowImage, new Size(16, config.leds.rows), 0, 0, interpolation); + } + + private void model4(Mat src, int interpolation) { + int width = 3 * src.cols() / 16; + int height = 3 * src.rows() / 9; + Mat[] cropped = new Mat[] { + /* LEFT */ src.submat(0, src.rows(), 0, width), + /* RIGHT */ src.submat(0, src.rows(), src.cols() - width, src.cols()), + /* TOP */ src.submat(0, height, 0, src.cols()), + /* BOTTOM */ src.submat(src.rows() - height, src.rows(), 0, src.cols()), + }; + images = new Mat[] {new Mat(), new Mat(), new Mat(), new Mat()}; +// Imgproc.resize(cropped[ListPosition.LEFT.ordinal()], images[ListPosition.LEFT.ordinal()], new Size(3, config.leds.rows), 0, 0, interpolation); + Imgproc.resize(cropped[0], images[0], new Size(3, config.leds.rows), 0, 0, interpolation); + Imgproc.resize(cropped[1], images[1], new Size(3, config.leds.rows), 0, 0, interpolation); + Imgproc.resize(cropped[2], images[2], new Size(config.leds.cols, 3), 0, 0, interpolation); + Imgproc.resize(cropped[3], images[3], new Size(config.leds.cols, 3), 0, 0, interpolation); +// Imgproc.resize(src, colImage, new Size(config.leds.cols, 9), 0, 0, interpolation); +// Imgproc.resize(src, rowImage, new Size(16, config.leds.rows), 0, 0, interpolation); + } + + private Color getLedColor(ListPosition listPosition, int xy) { // TODO: maybe use highest value from pixels? 100 % from 1st, 66 % from 2nd, 33 % from 3rd. colors might be strange. switch (listPosition) { case LEFT: - return interpolatedRowColor(xy, 0, 1, 2); + return interpolatedRowColor(images[0], xy, 0, 1, 2); +// return interpolatedRowColor(xy, 0, 1, 2); case RIGHT: - return interpolatedRowColor(xy, 15, 14, 13); + return interpolatedRowColor(images[1], xy, 2, 1, 0); +// return interpolatedRowColor(xy, 15, 14, 13); case TOP: - return interpolatedColColor(xy, 0, 1, 2); + return interpolatedColColor(images[2], xy, 0, 1, 2); +// return interpolatedColColor(xy, 0, 1, 2); case BOTTOM: - return interpolatedColColor(xy, 8, 7, 6); + return interpolatedColColor(images[3], xy, 2, 1, 0); +// return interpolatedColColor(xy, 8, 7, 6); } return null; } - private Color interpolatedRowColor(int y, int x1, int x2, int x3) { + // private Color interpolatedRowColor(int y, int x1, int x2, int x3) { + private Color interpolatedRowColor(Mat rowImage, int y, int x1, int x2, int x3) { return pixelToColor(rowImage, x3, y).interpolate(pixelToColor(rowImage, x2, y), 0.65).interpolate(pixelToColor(rowImage, x1, y), 0.65); } - private Color interpolatedColColor(int x, int y1, int y2, int y3) { +// private Color interpolatedColColor(int x, int y1, int y2, int y3) { + private Color interpolatedColColor(Mat colImage, int x, int y1, int y2, int y3) { return pixelToColor(colImage, x, y3).interpolate(pixelToColor(colImage, x, y2), 0.65).interpolate(pixelToColor(colImage, x, y1), 0.65); } @@ -121,13 +148,13 @@ public class Frame { return buff; } - public Mat getColImage() { - return colImage; - } +// public Mat getColImage() { +// return colImage; +// } - public Mat getRowImage() { - return rowImage; - } +// public Mat getRowImage() { +// return rowImage; +// } public Mat getConvertedImage() { return converted; -- 2.11.0