Пример #1
0
  @Test
  public void computeScaleSigma() {

    SiftImageScaleSpace alg = new SiftImageScaleSpace(1.6f, 5, 2, false);

    assertEquals(1.6, alg.computeScaleSigma(0, 0), 1e-4);
    assertEquals(3.2, alg.computeScaleSigma(0, 1), 1e-4);
    assertEquals(4.8, alg.computeScaleSigma(0, 2), 1e-4);

    // compute total gaussian blur from previous set taken at level 2
    double prev = 2 * 1.6;
    // Each level still has 1.6, but at 1/2 the resolution
    double next1 = Math.sqrt(prev * prev + 4 * 1.6 * 1.6);
    double next2 = Math.sqrt(prev * prev + 4 * 3.2 * 3.2);

    assertEquals(next1, alg.computeScaleSigma(1, 0), 1e-4);
    assertEquals(next2, alg.computeScaleSigma(1, 1), 1e-4);
  }
Пример #2
0
  @Test
  public void scaleToImageIndex() {
    SiftImageScaleSpace alg = new SiftImageScaleSpace(1.6f, 5, 2, false);

    // try easy cases exactly on the nominal sigma
    assertEquals(0, alg.scaleToImageIndex(alg.computeScaleSigma(0, 0)));
    assertEquals(1, alg.scaleToImageIndex(alg.computeScaleSigma(0, 1)));
    assertEquals(2, alg.scaleToImageIndex(alg.computeScaleSigma(0, 2)));
    assertEquals(5, alg.scaleToImageIndex(alg.computeScaleSigma(1, 0)));
    assertEquals(6, alg.scaleToImageIndex(alg.computeScaleSigma(1, 1)));
    assertEquals(9, alg.scaleToImageIndex(alg.computeScaleSigma(1, 4)));

    // try cases slightly off from nominal
    assertEquals(0, alg.scaleToImageIndex(alg.computeScaleSigma(0, 0) - 0.01));
    assertEquals(0, alg.scaleToImageIndex(alg.computeScaleSigma(0, 0) + 0.01));
    assertEquals(9, alg.scaleToImageIndex(alg.computeScaleSigma(1, 4) - 0.01));
    assertEquals(9, alg.scaleToImageIndex(alg.computeScaleSigma(1, 4) + 0.01));

    // try the extreme ends, which should round in the wrong direction
    assertEquals(0, alg.scaleToImageIndex(0));
    assertEquals(9, alg.scaleToImageIndex(alg.computeScaleSigma(1, 4) + 1.6 * 2));
  }