예제 #1
0
  private void transposePicture() {
    final Picture transposedPicture = new Picture(picture.height(), picture.width());
    final int width = transposedPicture.width();
    final int height = transposedPicture.height();

    for (int i = 0; i < width; i++) {
      for (int j = 0; j < height; j++) {
        transposedPicture.set(i, j, picture.get(j, i));
      }
    }

    picture = transposedPicture;
  }
예제 #2
0
  // energy of pixel at column x and row y
  public double energy(final int x, final int y) {
    checkBounds(x, y);

    if (onTheEdge(x, y)) {
      return EDGE_ENERGY;
    }

    final Color leftPixel = picture.get(x - 1, y);
    final Color rightPixel = picture.get(x + 1, y);
    final double RX = leftPixel.getRed() - rightPixel.getRed();
    final double GX = leftPixel.getGreen() - rightPixel.getGreen();
    final double BX = leftPixel.getBlue() - rightPixel.getBlue();

    final Color topPixel = picture.get(x, y - 1);
    final Color bottomPixel = picture.get(x, y + 1);
    final double RY = topPixel.getRed() - bottomPixel.getRed();
    final double GY = topPixel.getGreen() - bottomPixel.getGreen();
    final double BY = topPixel.getBlue() - bottomPixel.getBlue();

    final double deltaXSquared = (RX * RX) + (GX * GX) + (BX * BX);
    final double deltaYSquared = (RY * RY) + (GY * GY) + (BY * BY);

    return Math.sqrt(deltaXSquared + deltaYSquared);
  }
예제 #3
0
  // remove vertical seam from current picture
  public void removeVerticalSeam(final int[] seam) {
    checkSeam(seam, height(), width());

    final int width = width() - 1;
    final int height = height();
    final Picture newPicture = new Picture(width, height);

    for (int j = 0; j < height; j++) {
      for (int i = 0; i < width; i++) {
        int index;
        if (i < seam[j]) {
          index = i;
        } else {
          index = i + 1;
        }
        final Color color = picture.get(index, j);
        newPicture.set(i, j, color);
      }
    }

    picture = newPicture;
  }