Exemplo n.º 1
0
  /**
   * @param itr - tableau contenant les facteurs d'intérêt de l'image
   * @return un graphe représentant ce tableau
   */
  public Graph verticalToGraph(int[][] itr) {
    int nbSommets = width * height + 2;
    int i, j;
    Graph g = new Graph(nbSommets);

    // sommet tout en haut
    for (j = 0; j < width; j++) g.addEdge(new Edge(0, j + 1, 0));

    for (i = 0; i < height - 1; i++) {
      for (j = 0; j < width; j++) {
        // arête vers la gauche
        if (j > 0) {
          g.addEdge(new Edge(width * i + j + 1, width * (i + 1) + (j - 1) + 1, itr[i][j]));
        }
        // arête vers la droite
        if (j < width - 1) {
          g.addEdge(new Edge(width * i + j + 1, width * (i + 1) + (j + 1) + 1, itr[i][j]));
        }
        // arête centrale
        g.addEdge(new Edge(width * i + j + 1, width * (i + 1) + j + 1, itr[i][j]));
      }
    }

    // sommet tout en bas
    for (j = 0; j < width; j++)
      g.addEdge(new Edge(width * (height - 1) + j + 1, height * width + 1, itr[i][j]));

    return g;
  }
Exemplo n.º 2
0
  /**
   * @param itr - tableau contenant les facteurs d'intérêt de l'image
   * @return un graphe représentant ce tableau
   */
  public Graph horizontalToGraph(int[][] itr) {
    int nbSommets = width * height + 2;
    int i, j;
    Graph g = new Graph(nbSommets);

    // sommet tout en haut
    for (j = 0; j < height; j++) g.addEdge(new Edge(0, j + 1, 0));

    for (i = 0; i < width - 1; i++) {
      for (j = 0; j < height; j++) {
        // arête vers le haut
        if (j > 0) {
          g.addEdge(new Edge(height * i + j + 1, height * (i + 1) + j - 1 + 1, itr[j][i]));
        }
        // arête vers le bas
        if (j < height - 1) {
          g.addEdge(new Edge(height * i + j + 1, height * (i + 1) + j + 1 + 1, itr[j][i]));
        }
        // arête centrale
        g.addEdge(new Edge(height * i + j + 1, height * (i + 1) + j + 1, itr[j][i]));
      }
    }

    // sommet tout en bas
    for (j = 0; j < height; j++)
      g.addEdge(new Edge(height * (width - 1) + j + 1, height * width + 1, itr[j][i]));

    return g;
  }
Exemplo n.º 3
0
  /**
   * Graphe vertical pour l'algorithme de Suurballe
   *
   * @param itr - facteurs d'intérêts de l'image
   * @return - graphe vertical des facteurs d'intérêts
   */
  public Graph verticalToGraph2(int[][] itr) {
    int h = (height - 2) * 2 + 2;
    int nbSommets = h * width + 2;
    int i, j;
    Graph g = new Graph(nbSommets);

    // sommet tout en haut
    for (j = 0; j < width; j++) g.addEdge(new Edge(0, j + 1, 0));

    int iCourant = 0;
    // lignes centrales
    for (i = 0; i < h; i++) {
      if (i != h - 1) {
        if (i % 2 == 0) {
          for (j = 0; j < width; j++) {
            // arête vers la gauche
            if (j > 0) {
              g.addEdge(new Edge(i * width + j + 1, (i + 1) * width + j, itr[iCourant][j]));
            }
            // arête vers la droite
            if (j < width - 1) {
              g.addEdge(new Edge(i * width + j + 1, (i + 1) * width + j + 2, itr[iCourant][j]));
            }
            // arête centrale
            g.addEdge(new Edge(i * width + j + 1, (i + 1) * width + j + 1, itr[iCourant][j]));
          }
          iCourant++;
        } else {
          for (j = 0; j < width; j++) {
            g.addEdge(new Edge(i * width + j + 1, (i + 1) * width + j + 1, 0));
          }
        }
      }
    }

    // derniere ligne
    for (j = (nbSommets - 1) - width; j < nbSommets - 1; j++) {
      int pos = j % this.width - 1;
      if (pos == -1) {
        pos = this.width - 1;
      }
      g.addEdge(new Edge(j, nbSommets - 1, itr[height - 1][pos]));
    }

    return g;
  }