From c71884486b729da469390562a232a2eed10389b4 Mon Sep 17 00:00:00 2001
From: Walt Mankowski <wmankowski@coe.drexel.edu>
Date: Wed, 3 Aug 2016 16:15:23 -0400
Subject: [PATCH] cleaned up code

* removed commented-out lines and most of the IJ.log() calls
* replaced vector of covariance matrix code with empty Mat
* restored seeding of RNG in constructor
* trimmed back import statements
---
 src/ImageJ/Demo_Pixel_Replication.class | Bin 10050 -> 8547 bytes
 src/ImageJ/Demo_Pixel_Replication.java  | 118 +++---------------------
 2 files changed, 12 insertions(+), 106 deletions(-)

diff --git a/src/ImageJ/Demo_Pixel_Replication.class b/src/ImageJ/Demo_Pixel_Replication.class
index b93e6f65527073fe6c482c886466be859450ebeb..abfd6f25b4ce98887396f6b55dc3cf91c4faff58 100644
GIT binary patch
delta 4790
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
W4u*-KHVmYf07(@f>9gPzc@6+nl>}4(

delta 6262
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

diff --git a/src/ImageJ/Demo_Pixel_Replication.java b/src/ImageJ/Demo_Pixel_Replication.java
index 36c8ffb..3073d3f 100755
--- a/src/ImageJ/Demo_Pixel_Replication.java
+++ b/src/ImageJ/Demo_Pixel_Replication.java
@@ -4,8 +4,6 @@ import ij.process.*;
 import ij.gui.*;
 import java.awt.*;
 import java.awt.image.*;
-import java.nio.ByteBuffer;
-import java.nio.FloatBuffer;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Random;
@@ -15,16 +13,8 @@ import java.util.List;
 import org.opencv.core.Core;
 import org.opencv.core.Mat;
 import org.opencv.core.CvType;
-import org.opencv.core.Scalar;
-import org.opencv.core.MatOfPoint2f;
-import org.opencv.core.Size;
-import org.opencv.ml.*;
+import org.opencv.ml.EM;
 import org.opencv.imgproc.Imgproc;
-import org.opencv.utils.Converters;
-
-// import org.bytedeco.javacpp.indexer.*;
-// import org.bytedeco.javacpp.indexer.DoubleIndexer;
-// import org.bytedeco.javacpp.opencv_ml.*;
 
 public class Demo_Pixel_Replication implements PlugInFilter {
 
@@ -44,7 +34,7 @@ public class Demo_Pixel_Replication implements PlugInFilter {
         UniqPts = new ArrayList<>();
         PrPts = new ArrayList<>();
         rnd = new Random();
-        // Core.setRNGSeed(rnd.nextInt());
+        Core.setRNGSeed(rnd.nextInt());
     }
 
     public int setup(String arg, ImagePlus imp) {
@@ -82,8 +72,6 @@ public class Demo_Pixel_Replication implements PlugInFilter {
 
         // use distance transform to populate UniqPts and PrPts
         Mat distMat = DistTransform(ipMat);
-        // byte buff[] = new byte[distMat.total() * distMat.channels()];
-        // distMat.get(0, 0, buff);
 
         for (int y=r.y; y<(r.y+r.height); y++) {
             for (int x=r.x; x<(r.x+r.width); x++) {
@@ -92,9 +80,7 @@ public class Demo_Pixel_Replication implements PlugInFilter {
                 if (n > 0) {
                     Point p = new Point(x, y);
                     UniqPts.add(p);
-                    long rep = Math.round((double)n/1.0);
-                    // long rep = 1;
-                    if (rep == 0) rep = 1;
+                    long rep = Math.round((double)n);
                     for (int i = 0; i < rep; i++) {
                         PrPts.add(p);
                     }
@@ -102,7 +88,7 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             }
         }
 
-        IJ.log(String.format("%d unique points, %d pixel rep points", UniqPts.size(), PrPts.size()));
+        // IJ.log(String.format("%d unique points, %d pixel rep points", UniqPts.size(), PrPts.size()));
 
         // compute the gmm
         EM em = computeGMM(k);
@@ -134,8 +120,6 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             Core.eigen(covs.get(i), true, eigVal, eigVec);
             double[] valIdx = new double[2];
             eigVal.get(0, 0, valIdx);
-            // DoubleIndexer valIdx = eigVal.createIndexer();
-            // if (valIdx.get(0,0) > valIdx.get(1,0)) {
             if (valIdx[0] > valIdx[1]) {
                 hi = 0;
                 lo = 1;
@@ -146,16 +130,8 @@ public class Demo_Pixel_Replication implements PlugInFilter {
 
             double A = Math.sqrt(valIdx[hi] * 20 / 3);
             double B = Math.sqrt(valIdx[lo] * 20 / 3);
-            // double aspectRatio = B / A;
 
             EllipseRoi elRoi = makeEllipseRoi(means.row(i), eigVec.row(hi), A, B);
-            // Mat end1 = new Mat();
-            // Mat end2 = new Mat();
-            // scaleAdd(eigVec.row(hi), A, means.row(i), end1);
-            // scaleAdd(eigVec.row(hi), -A, means.row(i), end2);
-            // DoubleIndexer end1Idx = end1.createIndexer();
-            // DoubleIndexer end2Idx = end2.createIndexer();
-            // EllipseRoi elRoi = new EllipseRoi(end1Idx.get(0,0), end1Idx.get(0,1), end2Idx.get(0,0), end2Idx.get(0,1), aspectRatio);
             elRoi.setStrokeWidth(2);
             elRoi.setStrokeColor(Color.red);
             ellipses.add(elRoi);
@@ -184,19 +160,15 @@ public class Demo_Pixel_Replication implements PlugInFilter {
     private Mat PrPts2Mat(ArrayList<Point> PrPts, double pct) {
         ArrayList<Point> ShufPts = new ArrayList<Point>(PrPts);
         Collections.shuffle(ShufPts);
-        // ArrayList<MatOfPoint2f> SampPts = new ArrayList<MatOfPoint2f>(ShufPts.subList(0, (int) (ShufPts.size() * pct)));
-        // return PrPts2Mat(SampPts);
         return PrPts2Mat(new ArrayList<Point>(ShufPts.subList(0, (int) (ShufPts.size() * pct))));
     }
 
     private Mat PrPts2Mat(ArrayList<Point> PrPts) {
         Mat emMat = new Mat(PrPts.size(), 2, CvType.CV_32FC1);
-        // FloatIndexer emMatIndexer = emMat.createIndexer();
         for (int i = 0; i < PrPts.size(); i++) {
             Point p = PrPts.get(i);
             float[] vals = { p.x, p.y };
             emMat.put(i, 0, vals);
-            // emMatIndexer.put(i, 1, p.y());
         }
 
         return emMat;
@@ -206,7 +178,6 @@ public class Demo_Pixel_Replication implements PlugInFilter {
         EM bestEm = new EM();
         double bestScore = -1e300;
         int bestI = 0;
-        // Mat initMeans = randomInitMeans(k);
 
         for (int i = 1; i <= Replicates; i++) {
             IJ.log(String.format("replicate %d", i));
@@ -214,7 +185,6 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             Mat logLikelihoods = new Mat(PrPts.size(), 1, CvType.CV_64FC1);
             Mat labels = new Mat(PrPts.size(), 1, CvType.CV_32FC1);
             Mat covs0 = makeInitCovs(k);
-            // ArrayList<Mat> covs0 = makeInitCovs(k);
             Mat weights0 = makeInitWeights(k);
             em.setInt("nclusters", k);
             em.setInt("covMatType", EM.COV_MAT_GENERIC);
@@ -224,16 +194,8 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             // Mat emMat = PrPts2Mat(PrPts, 0.10);
             Mat emMat = PrPts2Mat(PrPts);
             Mat initMeans = randomInitMeans(k);
-            // em.trainE(emMat, initMeans, noArray());
-            // if (!em.trainE(emMat, initMeans, new Mat(), new Mat(), logLikelihoods, labels, new Mat()))
-            // try {
-                IJ.log("calling trainE");
-                if (!em.trainE(emMat, initMeans, covs0, weights0, logLikelihoods, labels, new Mat()))
-                // if (!em.train(emMat, logLikelihoods, new Mat(), new Mat()))
-                    IJ.log("trainE() returned false!");
-            // } catch (Exception e) {
-            //     IJ.log(String.format("exception calling trainE: %s", e.getMessage()));
-            // }
+            if (!em.trainE(emMat, initMeans, covs0, weights0, logLikelihoods, labels, new Mat()))
+                IJ.log("trainE() returned false!");
             double score = addUp(logLikelihoods.col(0));
             IJ.log(String.format("score = %f", score));
             if (score > bestScore) {
@@ -243,73 +205,27 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             }
         }
 
-        IJ.log(String.format("best replicate was %d", bestI));
+        // IJ.log(String.format("best replicate was %d", bestI));
         return bestEm;
     }
 
     private double addUp(Mat m) {
-        // DoubleIndexer idx = m.createIndexer();
         double total = 0;
         double[] data = new double[(int) m.total()];
         m.get(0, 0, data);
 
-        for (int i = 0; i < m.total(); i++)
-            total += data[i];
-
-        // for (int r = 0; r < m.rows(); r++) {
-        //     double[] idx = m.get(r, 0);
-        //     // total += idx.get(r, 0);
-        //     total += idx[0];
-        // }
+        for (double val : data)
+            total += val;
 
         return total;
     }
 
     private Mat makeInitCovs(int k) {
-    // private ArrayList<Mat> makeInitCovs(int k) {
-        // Mat covs0 = new Mat(1, 4*k, CV_64FC1); 
-        // DoubleIndexer idx = covs0.createIndexer();
-        // for (int i = 0; i < 4*k; i += 4) {
-        //     idx.put(0, i,   1);
-        //     idx.put(0, i+1, 0);
-        //     idx.put(0, i+2, 0);
-        //     idx.put(0, i+3, 1);
-        // }
-
-        // return covs0;
-        // return new Mat();
-        // return Mat.eye(new Size(2,2), CvType.CV_64F);
-
-        IJ.log("eye = " + Mat.eye(new Size(2,2), CvType.CV_64F).dump());
-        IJ.log("eye channels = " + Mat.eye(new Size(2,2), CvType.CV_64F).channels());
-        IJ.log("eye size = " + Mat.eye(new Size(2,2), CvType.CV_64F).size());
-
-        ArrayList<Mat> mats = new ArrayList<Mat>();
-        for (int i = 0; i < k; i++) 
-            mats.add(Mat.eye(new Size(2,2), CvType.CV_64F));
-        // return mats;
-
-        Mat res = Converters.vector_Mat_to_Mat(mats);
-        // res = res.reshape(2, 2);
-        Size size = res.size();
-        IJ.log(String.format("mats.size() = %d, res.size() = %f x %f", mats.size(), size.height, size.width));
-        IJ.log("covs = " + res.dump());
-        IJ.log("res.channels = " + res.channels());
-        IJ.log("res.size = " + res.size());
-        return res;
+        return new Mat();
     }
 
     private Mat makeInitWeights(int k) {
-        // Mat weights0 = new Mat(k, 1, CV_64FC1);
-        // DoubleIndexer idx = weights0.createIndexer();
-        // double weight = 1/k;
-
-        // for (int r = 0; r < k; r++)
-        //     idx.put(r, 0, weight);
-
-        // return weights0;
-        // return new Mat();
-        return new Mat(k, 1, CvType.CV_64F, new Scalar(1/k));
+        return new Mat();
     }
 
     private EllipseRoi makeEllipseRoi(Mat center, Mat unitVec, double A, double B) {
@@ -326,7 +242,6 @@ public class Demo_Pixel_Replication implements PlugInFilter {
         end1.get(0, 0, data1);
         end2.get(0, 0, data2);
 
-        // return new EllipseRoi(end1Idx.get(0,0), end1Idx.get(0,1), end2Idx.get(0,0), end2Idx.get(0,1), aspectRatio);
         return new EllipseRoi(data1[0], data1[1], data2[0], data2[1], aspectRatio);
     }
 
@@ -343,25 +258,16 @@ public class Demo_Pixel_Replication implements PlugInFilter {
             int j = rnd.nextInt(UniqPts.size());
             if (!used.contains(j)) {
                 Point p = UniqPts.get(j);
-                // meansIdx.put(i, 0, p.x());
-                // meansIdx.put(i, 1, p.y());
                 meansData[n++] = p.x;
                 meansData[n++] = p.y;
                 used.add(j);
-                IJ.log(String.format("random pt %d: (%d,%d)", i, p.x, p.y));
+                // IJ.log(String.format("random pt %d: (%d,%d)", i, p.x, p.y));
                 i++;
             }
         }
 
         means.put(0, 0, meansData);
 
-        for (int r = 0; r < means.rows(); r++) {
-            for (int c = 0; c < means.cols(); c++) {
-                double[] val = means.get(r, c);
-                IJ.log(String.format("means(%d,%d) = %f", r, c, val[0]));
-            }
-        }
-
         return means;
     }
 }
-- 
GitLab