docs: static public void border8(GrayF32 _intensity , GrayS8 direction , GrayF32 output )
  	{
  		int w = _intensity.width;
  		int h = _intensity.height-1;
  
  		ImageBorder_F32 intensity = (ImageBorder_F32)FactoryImageBorderAlgs.value(_intensity, 0);
  
  		// top border
  		//CONCURRENT_BELOW BoofConcurrency.loopFor(0,w,x->{
  		for( int x = 0; x < w; x++ ) {
  			int dir = direction.get(x,0);
  			int dx,dy;
  
  			if( dir == 0 || dir == 4) {
  				dx = 1; dy = 0;
  			} else if( dir == 1 || dir == -3) {
  				dx = 1; dy = 1;
  			} else if( dir == 2 || dir == -2) {
  				dx = 0; dy = 1;
  			} else {
  				dx = 1; dy = -1;
  			}
  
  			float left = intensity.get(x-dx,-dy);
  			float middle = intensity.get(x,0);
  			float right = intensity.get(x+dx,dy);
  
  			if( left > middle || right > middle ) {
  				output.set(x,0,0);
  			} else {
  				output.set(x,0,middle);
  			}
  		}
  		//CONCURRENT_ABOVE });
  
  		// bottom border
  		//CONCURRENT_BELOW BoofConcurrency.loopFor(0,w,x->{
  		for( int x = 0; x < w; x++ ) {
  			int dir = direction.get(x,h);
  			int dx,dy;
  
  			if( dir == 0 || dir == 4) {
  				dx = 1; dy = 0;
  			} else if( dir == 1 || dir == -3) {
  				dx = 1; dy = 1;
  			} else if( dir == 2 || dir == -2) {
  				dx = 0; dy = 1;
  			} else {
  				dx = 1; dy = -1;
  			}
  
  			float left = intensity.get(x-dx,h-dy);
  			float middle = intensity.get(x,h);
  			float right = intensity.get(x+dx,h+dy);
  
  			if( left > middle || right > middle ) {
  				output.set(x,h,0);
  			} else {
  				output.set(x,h,middle);
  			}
  		}
  		//CONCURRENT_ABOVE });
  
  		// left border
  		//CONCURRENT_BELOW BoofConcurrency.loopFor(1,h,y->{
  		for( int y = 1; y < h; y++ ) {
  			int dir = direction.get(0,y);
  			int dx,dy;
  
  			if( dir == 0 || dir == 4) {
  				dx = 1; dy = 0;
  			} else if( dir == 1 || dir == -3) {
  				dx = 1; dy = 1;
  			} else if( dir == 2 || dir == -2) {
  				dx = 0; dy = 1;
  			} else {
  				dx = 1; dy = -1;
  			}
  
  			float left = intensity.get(-dx,y-dy);
  			float middle = intensity.get(0,y);
  			float right = intensity.get(dx,y+dy);
  
  			if( left > middle || right > middle ) {
  				output.set(0,y,0);
  			} else {
  				output.set(0,y,middle);
  			}
  		}
  		//CONCURRENT_ABOVE });
  
  		// right border
  		int _w = w - 1;
  		//CONCURRENT_BELOW BoofConcurrency.loopFor(1,h,y->{
  		for( int y = 1; y < h; y++ ) {
  			int dir = direction.get(_w,y);
  			int dx,dy;
  
  			if( dir == 0 || dir == 4) {
  				dx = 1; dy = 0;
  			} else if( dir == 1 || dir == -3) {
  				dx = 1; dy = 1;
  			} else if( dir == 2 || dir == -2) {
  				dx = 0; dy = 1;
  			} else {
  				dx = 1; dy = -1;
  			}
  
  			float left = intensity.get(_w-dx,y-dy);
  			float middle = intensity.get(_w,y);
  			float right = intensity.get(_w+dx,y+dy);
  
  			if( left > middle || right > middle ) {
  				output.set(_w,y,0);
  			} else {
  				output.set(_w,y,middle);
  			}
  		}
  		//CONCURRENT_ABOVE });
  	}