예제 #1
0
  /** Flips the image from top to bottom */
  public static void flipVertical(ImageFloat32 img) {
    int h2 = img.height / 2;

    for (int y = 0; y < h2; y++) {
      int index1 = img.getStartIndex() + y * img.getStride();
      int index2 = img.getStartIndex() + (img.height - y - 1) * img.getStride();

      int end = index1 + img.width;

      while (index1 < end) {
        float tmp = img.data[index1];
        img.data[index1++] = img.data[index2];
        img.data[index2++] = (float) tmp;
      }
    }
  }
예제 #2
0
  /**
   * Fills the whole image with the specified pixel value
   *
   * @param img An image.
   * @param value The value that the image is being filled with.
   */
  public static void fill(ImageFloat32 img, float value) {
    final int h = img.getHeight();
    final int w = img.getWidth();

    float[] data = img.data;

    for (int y = 0; y < h; y++) {
      int index = img.getStartIndex() + y * img.getStride();
      for (int x = 0; x < w; x++) {
        data[index++] = value;
      }
    }
  }
예제 #3
0
  /**
   * Sets each value in the image to a value drawn from an uniform distribution that has a range of
   * min <= X < max.
   */
  public static void randomize(ImageFloat32 img, Random rand, float min, float max) {
    final int h = img.getHeight();
    final int w = img.getWidth();

    float range = max - min;

    float[] data = img.data;

    for (int y = 0; y < h; y++) {
      int index = img.getStartIndex() + y * img.getStride();
      for (int x = 0; x < w; x++) {
        data[index++] = rand.nextFloat() * range + min;
      }
    }
  }
예제 #4
0
  /** Adds Gaussian/normal i.i.d noise to each pixel in the image. */
  public static void addGaussian(
      ImageFloat32 img, Random rand, double sigma, float min, float max) {
    final int h = img.getHeight();
    final int w = img.getWidth();

    float[] data = img.data;

    for (int y = 0; y < h; y++) {
      int index = img.getStartIndex() + y * img.getStride();
      for (int x = 0; x < w; x++) {
        float value = (data[index]) + (float) (rand.nextGaussian() * sigma);
        if (value < min) value = min;
        if (value > max) value = max;

        data[index++] = value;
      }
    }
  }