Esempio n. 1
0
  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;
          }
        }
      }
    }
  }
Esempio n. 2
0
  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;
    }
  }
Esempio n. 3
0
  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);
  }