docs: public void filter(double sigma, double k, int minDistance) {
  
  		computeDerivatives(sigma);
  		// fastComputeDerivatives();
  
  		float[][] harrismap = computeHarrisMap(k);
  
  		for (int y = 1; y < height - 1; y++) {
  			for (int x = 1; x < width - 1; x++) {
  
  				float h = harrismap[x][y];
  				if (h <= 1E-3)
  					continue;
  
  				if (!isSpatialMaxima(harrismap, x, y))
  					continue;
  
  				corners.add(new Corner(x, y, h));
  			}
  		}
  
  		//System.out.println(corners.size() + " potential corners found.");
  
  		// remove corners to close to each other (keep the highest measure)
  
  		Iterator<Corner> iter = corners.iterator();
  		while (iter.hasNext()) {
  			Corner p = iter.next();
  			for (Corner n : corners) {
  				if (n == p)
  					continue;
  				int dist = (int) Math.sqrt((p.x - n.x) * (p.x - n.x)
  						+ (p.y - n.y) * (p.y - n.y));
  				if (dist > minDistance)
  					continue;
  				if (n.h < p.h)
  					continue;
  				iter.remove();
  				break;
  			}
  		}
  
  		// output
  		/*
  		 * int[][] output = new int[width][height]; for (int y = 0; y < height;
  		 * y++) for (int x = 0; x < width; x++) output[x][y] = (int)
  		 * (image[x][y] * 0.75); // original image // (darker)
  		 * 
  		 * // for each corner for (Corner p : corners) { // add the cross sign
  		 * over the image for (int dt = -3; dt <= 3; dt++) { if (p.x + dt >= 0
  		 * && p.x + dt < width) output[p.x + dt][p.y] = 255; if (p.y + dt >= 0
  		 * && p.y + dt < height) output[p.x][p.y + dt] = 255; }
  		 * System.out.println("corner found at: " + p.x + "," + p.y + " (" + p.h
  		 * + ")"); } System.out.println(corners.size() + " corners found.");
  		 * 
  		 * return output;
  		 */
  	}