diff --git a/SLIC/build.gradle b/SLIC/build.gradle index e11883b71d03005019cfc58d4bfbe7001ed83659..6b404701501477297e68b9fa9b558be6fd0db300 100644 --- a/SLIC/build.gradle +++ b/SLIC/build.gradle @@ -11,7 +11,6 @@ repositories { dependencies { compile 'org.slf4j:slf4j-api:1.7.21' - compile 'javax.vecmath:vecmath:1.5.2' compile files("${System.env.ICY_HOME}/icy.jar") // Icy core compile files("${System.env.ICY_HOME}/lib/bioformats.jar") // bioformats diff --git a/SLIC/src/algorithms/danyfel80/islic/SLICTask.java b/SLIC/src/algorithms/danyfel80/islic/SLICTask.java index dc7aac788141476446b5830a42d03c708203e4d6..d63c6bdf833e74d2f8d7a6548fc1552798aa8205 100644 --- a/SLIC/src/algorithms/danyfel80/islic/SLICTask.java +++ b/SLIC/src/algorithms/danyfel80/islic/SLICTask.java @@ -19,6 +19,7 @@ package algorithms.danyfel80.islic; import java.awt.Color; +import java.awt.Point; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; @@ -31,17 +32,13 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.IntStream; -import javax.vecmath.Point2i; -import javax.vecmath.Point3d; -import javax.vecmath.Point3i; -import javax.vecmath.Vector3d; - import icy.image.IcyBufferedImage; import icy.roi.BooleanMask2D; import icy.roi.ROI; import icy.sequence.Sequence; import icy.type.DataType; import icy.type.collection.array.Array2DUtil; +import icy.type.point.Point3D; import plugins.kernel.roi.roi2d.ROI2DArea; /** @@ -64,8 +61,8 @@ public class SLICTask { private List<ROI> rois; private Sequence superPixelsResult; - private Map<Point3i, double[]> colorLUT; - private Map<Point2i, Double> distanceLUT; + private Map<Point3D.Integer, double[]> colorLUT; + private Map<Point, Double> distanceLUT; public SLICTask(Sequence sequence, int SPSize, double rigidity, boolean computeROIs) { this.sequence = sequence; @@ -163,8 +160,8 @@ public class SLICTask { int[] valRGB2 = new int[3]; IntStream.range(0, 3).forEach(c -> { try { - valRGB1[c] = (int) Math.round(255 * (data[c % sequence.getSizeC()][pos1] / sequence.getDataTypeMax())); - valRGB2[c] = (int) Math.round(255 * (data[c % sequence.getSizeC()][pos2] / sequence.getDataTypeMax())); + valRGB1[c] = (int) Math.round(255 * (data[c % sequence.getSizeC()][pos1] / sequence.getDataTypeMax())); + valRGB2[c] = (int) Math.round(255 * (data[c % sequence.getSizeC()][pos2] / sequence.getDataTypeMax())); } catch (Exception e) { throw e; } @@ -179,12 +176,12 @@ public class SLICTask { } private double[] getCIELab(double[][] sequenceData, int pos) { - Point3i rgbPoint = new Point3i(); + int[] rgbVal = new int[3]; IntStream.range(0, 3).forEach(c -> { rgbVal[c] = (int) Math.round(255 * (sequenceData[c % sequence.getSizeC()][pos] / sequence.getDataTypeMax())); }); - rgbPoint.set(rgbVal); + Point3D.Integer rgbPoint = new Point3D.Integer(rgbVal); double[] LAB = colorLUT.get(rgbPoint); if (LAB == null) { @@ -244,7 +241,7 @@ public class SLICTask { diffb = bi - bk; double dc = Math.sqrt(diffl * diffl + diffa * diffa + diffb * diffb); - Point2i dPt = new Point2i((int) Math.min(dx, dy), (int) Math.max(dx, dy)); + Point dPt = new Point((int) Math.min(dx, dy), (int) Math.max(dx, dy)); Double ds = distanceLUT.get(dPt); if (ds == null) { ds = Math.sqrt(dx * dx + dy * dy); @@ -313,16 +310,16 @@ public class SLICTask { boolean[] visited = new boolean[clusters.length]; int[] finalClusters = new int[clusters.length]; - List<Point3d> labs = new ArrayList<>(SPnum); + List<Point3D.Double> labs = new ArrayList<>(SPnum); List<Double> areas = new ArrayList<>(SPnum); - List<Point2i> firstPoints = new ArrayList<>(SPnum); + List<Point> firstPoints = new ArrayList<>(SPnum); // fill known clusters AtomicInteger usedLabels = new AtomicInteger(0); IntStream.range(0, SPnum).forEach(i -> { - Point3d labCenter = new Point3d(); + Point3D.Double labCenter = new Point3D.Double(); AtomicInteger area = new AtomicInteger(0); - Point2i p = new Point2i((int) Math.round(cxs[i]), (int) Math.round(cys[i])); + Point p = new Point((int) Math.round(cxs[i]), (int) Math.round(cys[i])); int pPos = p.x + p.y * sequence.getWidth(); if (clusters[pPos] == i && !visited[pPos]) { @@ -343,9 +340,9 @@ public class SLICTask { for (int x = 0; x < sequence.getWidth(); x++) { int pos = x + yOff; if (!visited[pos]) { - Point3d labCenter = new Point3d(); + Point3D.Double labCenter = new Point3D.Double(); AtomicInteger area = new AtomicInteger(0); - Point2i p = new Point2i(x, y); + Point p = new Point(x, y); findAreaAndColor(sequenceData, clusters, finalClusters, visited, p, labCenter, area, usedLabels.getAndIncrement()); @@ -408,7 +405,7 @@ public class SLICTask { while (appliedLabel != mergedRefs[appliedLabel]) { appliedLabel = mergedRefs[appliedLabel]; } - findAreaAndColor(sequenceData, clusters, finalClusters, visited, firstPoints.get(i), new Point3d(), + findAreaAndColor(sequenceData, clusters, finalClusters, visited, firstPoints.get(i), new Point3D.Double(), new AtomicInteger(0), appliedLabel); } @@ -450,20 +447,22 @@ public class SLICTask { } } - private void findAreaAndColor(double[][] sequenceData, int[] clusters, int[] newClusters, boolean[] visited, - Point2i p, Point3d labCenter, AtomicInteger area, int label) { + private void findAreaAndColor(double[][] sequenceData, int[] clusters, int[] newClusters, boolean[] visited, Point p, + Point3D.Double labCenter, AtomicInteger area, int label) { int posp = p.x + p.y * sequence.getWidth(); area.set(0); - labCenter.set(0, 0, 0); + labCenter.x = 0d; + labCenter.y = 0d; + labCenter.z = 0d; - Deque<Point2i> q = new LinkedList<>(); + Deque<Point> q = new LinkedList<>(); int val = clusters[posp]; visited[posp] = true; q.add(p); while (!q.isEmpty()) { - Point2i pti = q.pop(); + Point pti = q.pop(); int posi = pti.x + pti.y * sequence.getWidth(); newClusters[posi] = label; @@ -475,7 +474,7 @@ public class SLICTask { int[] ds = new int[] {0, -1, 0, 1, 0}; for (int is = 1; is < ds.length; is++) { - Point2i ptn = new Point2i(pti.x + ds[is - 1], pti.y + ds[is]); + Point ptn = new Point(pti.x + ds[is - 1], pti.y + ds[is]); int posn = ptn.x + ptn.y * sequence.getWidth(); if (sequence.getBounds2D().contains(ptn.x, ptn.y) && !visited[posn] && clusters[posn] == val) { visited[posn] = true; @@ -486,23 +485,23 @@ public class SLICTask { } } - private List<Integer> findNeighbors(int[] newClusters, boolean[] visited, Point2i p) { + private List<Integer> findNeighbors(int[] newClusters, boolean[] visited, Point p) { int posp = p.x + p.y * sequence.getWidth(); HashSet<Integer> neighs = new HashSet<>(); - Deque<Point2i> q = new LinkedList<>(); + Deque<Point> q = new LinkedList<>(); int val = newClusters[posp]; visited[posp] = false; q.add(p); while (!q.isEmpty()) { - Point2i pti = q.pop(); + Point pti = q.pop(); int[] ds = new int[] {0, -1, 0, 1, 0}; for (int is = 1; is < ds.length; is++) { - Point2i ptn = new Point2i(pti.x + ds[is - 1], pti.y + ds[is]); + Point ptn = new Point(pti.x + ds[is - 1], pti.y + ds[is]); int posn = ptn.x + ptn.y * sequence.getWidth(); if (sequence.getBounds2D().contains(ptn.x, ptn.y)) { if (newClusters[posn] == val) { @@ -520,8 +519,8 @@ public class SLICTask { return new ArrayList<Integer>(neighs); } - private double computeL(List<Point3d> labs, List<Double> areas, int i, Integer j) { - Vector3d diffLab = new Vector3d(); + private double computeL(List<Point3D.Double> labs, List<Double> areas, int i, Integer j) { + Point3D.Double diffLab = new Point3D.Double(); diffLab.x = labs.get(j).x - labs.get(i).x; diffLab.y = labs.get(j).y - labs.get(i).y; diffLab.z = labs.get(j).z - labs.get(i).z; @@ -533,7 +532,7 @@ public class SLICTask { } } - private ROI2DArea defineROI(int[] newClusters, Point2i p, Point3d labP) { + private ROI2DArea defineROI(int[] newClusters, Point p, Point3D.Double labP) { int posp = p.x + p.y * sequence.getWidth(); double[] lab = new double[] {labP.x, labP.y, labP.z}; int[] rgb = CIELab.toRGB(lab); diff --git a/SLIC/src/plugins/danyfel80/islic/SLIC.java b/SLIC/src/plugins/danyfel80/islic/SLIC.java index 9cdb8402021d5240d66c850bc2ec6871b493b9f3..48aef85ec211a36f4d935aafc7dde871fafd6de9 100644 --- a/SLIC/src/plugins/danyfel80/islic/SLIC.java +++ b/SLIC/src/plugins/danyfel80/islic/SLIC.java @@ -17,15 +17,6 @@ public class SLIC extends EzPlug { @Override protected void initialize() { - try { - Class.forName("javax.vecmath.Point2i"); - Class.forName("javax.vecmath.Point3d"); - Class.forName("javax.vecmath.Point3i"); - Class.forName("javax.vecmath.Vector3d"); - } catch (ClassNotFoundException e) { - System.err.println("Could not load proper vecmath version: " + e); - e.printStackTrace(); - } inSequence = new EzVarSequence("Sequence"); inSPSize = new EzVarInteger("Superpixel size"); inSPReg = new EzVarDouble("Superpixels regularity");