code: public void process( T image , GrayS32 output ) {
  		InputSanityCheck.checkSameShape(image,output);
  		stopRequested = false;
  
  //		long time0 = System.currentTimeMillis();
  
  		search.process(image);
  		if( stopRequested ) return;
  
  //		long time1 = System.currentTimeMillis();
  
  		FastQueue<float[]> regionColor = search.getModeColor();
  		GrayS32 pixelToRegion = search.getPixelToRegion();
  		GrowQueue_I32 regionPixelCount = search.getRegionMemberCount();
  		FastQueue<Point2D_I32> modeLocation = search.getModeLocation();
  
  		merge.process(pixelToRegion,regionPixelCount,regionColor,modeLocation);
  		if( stopRequested ) return;
  
  //		long time2 = System.currentTimeMillis();
  
  		segment.process(pixelToRegion, output, regionPixelCount);
  		if( stopRequested ) return;
  
  //		long time3 = System.currentTimeMillis();
  
  		if( prune != null)
  			prune.process(image,output,regionPixelCount,regionColor);
  
  //		long time4 = System.currentTimeMillis();
  
  //		System.out.println("Search: "+(time1-time0)+" Merge: "+(time2-time1)+
  //				" segment: "+(time3-time2)+" Prune: "+(time4-time3));
  	}
docs: Performs mean-shift segmentation on the input image.   The
  total number of regions can be found by calling {@link #getNumberOfRegions()}.
  
  @param image Image
  @param output Storage for output image.  Each pixel is set to the region it belongs to.