code: static public void inner4(GrayF32 intensity , GrayS8 direction , GrayF32 output )
  	{
  		final int w = intensity.width;
  		final int h = intensity.height-1;
  
  		BoofConcurrency.loopFor(1,h,y->{
  			int indexI = intensity.startIndex + y*intensity.stride+1;
  			int indexD = direction.startIndex + y*direction.stride+1;
  			int indexO = output.startIndex + y*output.stride+1;
  
  			int end = indexI + w - 2;
  			for( ; indexI < end; indexI++ , indexD++, indexO++ ) {
  				int dir = direction.data[indexD];
  				int dx,dy;
  				
  				if( dir == 0 ) {
  					dx = 1; dy = 0;
  				} else if( dir == 1 ) {
  					dx = 1; dy = 1;
  				} else if( dir == 2 ) {
  					dx = 0; dy = 1;
  				} else {
  					dx = 1; dy = -1;
  				}
  
  				float middle = intensity.data[indexI];
  
  				// suppress the value if either of its neighboring values are more than or equal to it
  				if( intensity.data[indexI-dx-dy*intensity.stride] > middle || intensity.data[indexI+dx+dy*intensity.stride] > middle ) {
  					output.data[indexO] = 0;
  				} else {
  					output.data[indexO] = middle;
  				}
  			}
  		});
  	}
docs: Only processes the inner image.  Ignoring the border.