docs: protected void findLocalScaleSpaceMax(PyramidFloat<T> ss, int layerID) {
  		List<Point2D_I16> candidates = maximums;
  
  		float scale0 = (float) ss.scale[layerID - 1];
  		float scale1 = (float) ss.scale[layerID];
  		float scale2 = (float) ss.scale[layerID + 1];
  
  		float sigma0 = (float) ss.getSigma(layerID - 1);
  		float sigma1 = (float) ss.getSigma(layerID);
  		float sigma2 = (float) ss.getSigma(layerID + 1);
  
  		// For laplacian its t^(2*gamma) where gamma = 3/4
  		float ss0 = (float) (Math.pow(sigma0, 2.0 * 0.75)/scale0);// Is this divide by scale correct?
  		float ss1 = (float) (Math.pow(sigma1, 2.0 * 0.75)/scale1);
  		float ss2 = (float) (Math.pow(sigma2, 2.0 * 0.75)/scale2);
  
  		for (Point2D_I16 c : candidates) {
  
  			GrayF32 intensity = detector.getIntensity();
  
  			float target = intensity.unsafe_get(c.x,c.y);
  			float fx,fy;
  			{
  				float x0 = intensity.unsafe_get(c.x - 1, c.y);
  				float x2 = intensity.unsafe_get(c.x + 1, c.y);
  				float y0 = intensity.unsafe_get(c.x, c.y - 1);
  				float y2 = intensity.unsafe_get(c.x, c.y + 1);
  
  				fx = c.x + polyPeak(x0, target, x2);
  				fy = c.y + polyPeak(y0, target, y2);
  			}
  //			fx=c.x;fy=c.y;
  
  			sparseLaplace.setImage(ss.getLayer(layerID));
  			float val = ss1 * (float) sparseLaplace.compute(c.x,c.y);
  			// search for local maximum or local minimum
  			float adj = Math.signum(val);
  			val *= adj;
  
  
  			// find pixel location in each image's local coordinate
  			int x0 = (int) (fx * scale1 / scale0 + 0.5);
  			int y0 = (int) (fy * scale1 / scale0 + 0.5);
  
  			int x2 = (int) (fx * scale1 / scale2 + 0.5);
  			int y2 = (int) (fy * scale1 / scale2 + 0.5);
  
  			if (checkMax(ss.getLayer(layerID - 1), adj*ss0,val, x0, y0) && checkMax(ss.getLayer(layerID + 1), adj*ss2,val, x2, y2)) {
  				sparseLaplace.setImage(ss.getLayer(layerID-1));
  				float s0 = ss0 * (float) sparseLaplace.compute(x0,y0)*adj;
  				sparseLaplace.setImage(ss.getLayer(layerID+1));
  				float s2 = ss2 * (float) sparseLaplace.compute(x2,y2)*adj;
  
  				double adjSigma;
  				double sigmaInterp = polyPeak(s0, val, s2); // scaled from -1 to 1
  				if( sigmaInterp < 0 ) {
  					adjSigma = sigma0*(-sigmaInterp) + (1+sigmaInterp)*sigma1;
  				} else {
  					adjSigma = sigma2*sigmaInterp + (1-sigmaInterp)*sigma1;
  				}
  
  				// put features into the scale of the upper image
  				foundPoints.add(new ScalePoint(fx * scale1, fy * scale1, adjSigma));
  			}
  		}
  	}