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