docs: public void process(GrayF32 intensity , GrayS8 direction , float lower , float upper ,
  						GrayU8 output ) {
  		if( lower < 0 )
  			throw new IllegalArgumentException("Lower must be >= 0!");
  		InputSanityCheck.checkSameShape(intensity,direction,output);
  
  		// set up internal data structures
  		this.intensity = intensity;
  		this.direction = direction;
  		this.output = output;
  		this.lower = lower;
  		ImageMiscOps.fill(output,0);
  
  		// step through each pixel in the image
  		for( int y = 0; y < intensity.height; y++ ) {
  			int indexInten = intensity.startIndex + y*intensity.stride;
  
  			for( int x = 0; x < intensity.width; x++ , indexInten++ ) {
  				// start a search if a pixel is found that's above the threshold
  				if( intensity.data[indexInten] >= upper ) {
  					trace( x,y,indexInten);
  				}
  			}
  		}
  	}