Changed to model 4 (testing)
authorTomas Wenström <tomas.wenstrom@gmail.com>
Mon, 8 May 2017 19:47:20 +0000 (21:47 +0200)
committerTomas Wenström <tomas.wenstrom@gmail.com>
Mon, 8 May 2017 19:47:20 +0000 (21:47 +0200)
src/kaka/cakelight/Frame.java

index c0bc76c..0ae0d41 100644 (file)
@@ -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;