code: public static GrayU8 edge4(GrayU8 input, GrayU8 output, boolean outsideZero ) {
  		output = InputSanityCheck.checkDeclare(input, output);
  
  		if( BoofConcurrency.USE_CONCURRENT ) {
  			ImplBinaryInnerOps_MT.edge4(input, output);
  		} else {
  			ImplBinaryInnerOps.edge4(input, output);
  		}
  		ImplBinaryBorderOps.edge4(input, output, outsideZero);
  
  		return output;
  	}
docs: <p>
  Binary operation which is designed to remove all pixels but ones which are on the edge of an object.
  The edge is defined as lying on the object and not being surrounded by a pixel along a 4-neighborhood.
  </p>
  <p/>
  <p>
  NOTE: There are many ways to define an edge, this is just one of them.
  </p>
  
  @param input  Input image. Not modified.
  @param output If not null, the output image.  If null a new image is declared and returned.  Modified.
  @param outsideZero if true then pixels outside the image are treated as zero, otherwise one
  @return Output image.