private void fill() { if (selectedVertex != -1) { LinkedList<Integer> selected = new LinkedList<Integer>(); Stack<Integer> tmp = new Stack<Integer>(); int vertex; boolean[] painted = new boolean[itm.getVertices().length]; tmp.push(new Integer(selectedVertex)); while (!tmp.isEmpty()) { vertex = tmp.pop(); if (!painted[vertex] && intensities[vertex] >= lowerThreshold) { selected.push(vertex); painted[vertex] = true; for (int i = 0; i < neighbors[vertex].length; ++i) { tmp.push(new Integer(neighbors[vertex][i])); } } } currentSegmentation = new ArrayList<Integer>(selected); HashSet<Integer> curr = new HashSet<Integer>(selected); outline = new ArrayList<Integer>(); for (int v : currentSegmentation) { for (int i = 0; i < neighbors[v].length; i++) { if (!curr.contains(neighbors[v][i])) { outline.add(v); break; } } } } }
public void calculateOutlines(boolean[] result) { if (segmentation == null) { Arrays.fill(result, false); return; } Arrays.fill(result, false); int[] faces = itm.getFaces(); for (int i = 0; i < itm.nFaces; i += 3) { int f1 = faces[i]; int f2 = faces[i + 1]; int f3 = faces[i + 2]; int s1 = segmentation[f1]; int s2 = segmentation[f2]; int s3 = segmentation[f3]; if (s1 > 0 && (s2 == 0 || s3 == 0)) result[f1] = true; if (s2 > 0 && (s1 == 0 || s3 == 0)) result[f2] = true; if (s3 > 0 && (s1 == 0 || s2 == 0)) result[f3] = true; } }
public ArrayList<Integer> calculateOutlines(int label) { if (segmentation == null) return null; HashSet<Integer> outline = new HashSet<Integer>(); int[] faces = itm.getFaces(); for (int i = 0; i < itm.nFaces; i += 3) { int f1 = faces[i]; int f2 = faces[i + 1]; int f3 = faces[i + 2]; int s1 = segmentation[f1]; int s2 = segmentation[f2]; int s3 = segmentation[f3]; if (s1 == label && (s2 == 0 || s3 == 0)) outline.add(f1); if (s2 == label && (s1 == 0 || s3 == 0)) outline.add(f2); if (s3 == label && (s1 == 0 || s2 == 0)) outline.add(f3); } return new ArrayList<Integer>(outline); }