From f0bac8410e4dd45f328bbd0c6b924d1c72e6d6dd Mon Sep 17 00:00:00 2001 From: Walt Mankowski <wmankowski@coe.drexel.edu> Date: Thu, 28 Jul 2016 16:14:34 -0400 Subject: [PATCH] added relicates and numiters to gui fixed bug in summing logLiklihoods still having issues with randomness --- src/ImageJ/Demo_Pixel_Replication.class | Bin 9246 -> 10253 bytes src/ImageJ/Demo_Pixel_Replication.java | 77 ++++++++++++++++++++---- 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/ImageJ/Demo_Pixel_Replication.class b/src/ImageJ/Demo_Pixel_Replication.class index aae38ecec2287eee0c651123e85a142620694308..4fb78d61790c294acb0c5eec90bc6d1b5026c554 100644 GIT binary patch delta 5512 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 Vj3*gCFrH%IWIWBl$asc<69CB|<evZl delta 4445 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 diff --git a/src/ImageJ/Demo_Pixel_Replication.java b/src/ImageJ/Demo_Pixel_Replication.java index 85f5fdb..345dd02 100755 --- a/src/ImageJ/Demo_Pixel_Replication.java +++ b/src/ImageJ/Demo_Pixel_Replication.java @@ -21,6 +21,8 @@ public class Demo_Pixel_Replication implements PlugInFilter { int k; Random rnd; + int Replicates = 5; + int MaxIter = 100; // foreground points in ip ArrayList<Point2f> UniqPts; @@ -44,12 +46,17 @@ public class Demo_Pixel_Replication implements PlugInFilter { String[] kChoices = {"2", "3", "4", "5", "6"}; GenericDialog gd = new GenericDialog("Number of ellipses"); - gd.addChoice("Number of ellipses:", kChoices, kChoices[0]); + gd.addChoice("Number of ellipses:", kChoices, kChoices[2]); + gd.addNumericField("Number of replicates", Replicates, 0); + gd.addNumericField("Maximum number of iterations", MaxIter, 0); + gd.showDialog(); if (gd.wasCanceled()) { return false; } else { k = gd.getNextChoiceIndex() + 2; + Replicates = (int) gd.getNextNumber(); + MaxIter = (int) gd.getNextNumber(); return true; } } @@ -72,8 +79,8 @@ public class Demo_Pixel_Replication implements PlugInFilter { if (n > 0) { Point2f p = new Point2f(x, y); UniqPts.add(p); - // long rep = Math.round((double)n/10.0); - long rep = 1; + long rep = Math.round((double)n/1.0); + // long rep = 1; if (rep == 0) rep = 1; for (int i = 0; i < rep; i++) { PrPts.add(p); @@ -176,42 +183,83 @@ public class Demo_Pixel_Replication implements PlugInFilter { private EM computeGMM(int k) { EM bestEm = new EM(); double bestScore = -1e300; + int bestI = 0; + // Mat initMeans = randomInitMeans(k); - for (int i = 1; i <= 10; i++) { + for (int i = 1; i <= Replicates; i++) { IJ.log(String.format("replicate %d", i)); EM em = new EM(); Mat logLikelihoods = new Mat(PrPts.size(), 1, CV_64FC1); Mat labels = new Mat(PrPts.size(), 1, CV_32FC1); + Mat covs0 = makeInitCovs(k); + Mat weights0 = makeInitWeights(k); em.set("nclusters", k); em.set("covMatType", EM.COV_MAT_GENERIC); - em.set("maxIters", 1000); + em.set("maxIters", MaxIter); em.set("epsilon", 1e-6); // Mat emMat = PrPts2Mat(PrPts, 0.10); Mat emMat = PrPts2Mat(PrPts); Mat initMeans = randomInitMeans(k); // em.trainE(emMat, initMeans, noArray()); - em.trainE(emMat, initMeans, new Mat(), new Mat(), logLikelihoods, labels, new Mat()); - double score = addUp(logLikelihoods.row(0)); + // 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())); + // } + double score = addUp(logLikelihoods.col(0)); IJ.log(String.format("score = %f", score)); if (score > bestScore) { bestEm = em; bestScore = score; + bestI = i; } } + IJ.log(String.format("best replicate was %d", bestI)); return bestEm; } private double addUp(Mat m) { DoubleIndexer idx = m.createIndexer(); double total = 0; - for (int c = 0; c < m.cols(); c++) - total += idx.get(0, c); + for (int r = 0; r < m.rows(); r++) { + total += idx.get(r, 0); + } return total; } + private 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(); + } + + 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(); + } + private EllipseRoi makeEllipseRoi(Mat center, Mat unitVec, double A, double B) { Mat end1 = new Mat(); Mat end2 = new Mat(); @@ -230,8 +278,8 @@ public class Demo_Pixel_Replication implements PlugInFilter { // We're using a simple naive algorithm since we assume k << n. private Mat randomInitMeans(int k) { HashSet<Integer> used = new HashSet<Integer>(); - Mat means = new Mat(k, 2, CV_32FC1); - FloatIndexer meansIdx = means.createIndexer(); + Mat means = new Mat(k, 2, CV_64FC1); + DoubleIndexer meansIdx = means.createIndexer(); int i = 0; while (i < k) { @@ -245,6 +293,13 @@ public class Demo_Pixel_Replication implements PlugInFilter { i++; } } + + for (int r = 0; r < means.rows(); r++) { + for (int c = 0; c < means.cols(); c++) { + IJ.log(String.format("means(%d,%d) = %f", r, c, meansIdx.get(r, c))); + } + } + return means; } } -- GitLab