boolean isEdge( int x , int y ) {
		if( edgeThreshold <= 0 )
			return false;

		double xx = derivXX.compute(x,y);
		double xy = derivXY.compute(x,y);
		double yy = derivYY.compute(x,y);

		double Tr = xx + yy;
		double det = xx*yy - xy*xy;

		// Paper quite "In the unlikely event that the determinant is negative, the curvatures have different signs
		// so the point is discarded as not being an extremum"
		if( det <= 0)
			return true;
		else {
			// In paper this is:
			// Tr**2/Det < (r+1)**2/r
			return( Tr*Tr >= edgeThreshold*det);
		}
	}
boolean isEdge ( int x , int y ) { if ( edgeThreshold <= 0 ) return false ; double xx = derivXX . compute ( x , y ) ; double xy = derivXY . compute ( x , y ) ; double yy = derivYY . compute ( x , y ) ; double Tr = xx + yy ; double det = xx * yy - xy * xy ; if ( det <= 0 ) return true ; else { return ( Tr * Tr >= edgeThreshold * det ) ; } }
Performs an edge test to remove false positives.  See 4.1 in [1].