@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); }
@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)); }