docs: public static void equalizeLocalCol( GrayU16 input , int radius , int startX , GrayU16 output ,
  										 IWorkArrays workArrays) {
  
  		int width = 2*radius+1;
  		int area = width*width;
  		int maxValue = workArrays.length()-1;
  		int[] histogram = workArrays.pop();
  		int[] transform = workArrays.pop();
  
  		// specify the top and bottom of the histogram window and make sure it is inside bounds
  		int hist0 = startX;
  		int hist1 = startX+width;
  		if( hist1 > input.width ) {
  			hist1 = input.width;
  			hist0 = hist1 - width;
  		}
  
  		// initialize the histogram.  ignore top border
  		localHistogram(input,hist0,0,hist1,width,histogram);
  
  		// compute transformation table
  		int sum = 0;
  		for( int i = 0; i < histogram.length; i++ ) {
  			transform[i] = sum += histogram[i];
  		}
  
  		// compute the output across the row
  		int indexIn = input.startIndex + radius*input.stride + startX;
  		int indexOut = output.startIndex + radius*output.stride + startX;
  		for( int x = 0; x < radius; x++ ) {
  			int inputValue =  input.data[indexIn++] & 0xff;
  			output.data[indexOut++] = (short)((transform[ inputValue ]*maxValue)/area);
  		}
  
  		// move down while equalizing the rows one at a time
  		for( int y = radius+1; y < input.height-radius; y++ ) {
  
  			// remove the top most row
  			indexIn = input.startIndex + (y-radius-1)*input.stride;
  			for( int x = hist0; x < hist1; x++ ) {
  				histogram[input.data[indexIn + x] & 0xFFFF]--;
  			}
  			// add the bottom most row
  			indexIn += width*input.stride;
  			for( int x = hist0; x < hist1; x++ ) {
  				histogram[input.data[indexIn + x] & 0xFFFF]++;
  			}
  
  			// compute transformation table
  			sum = 0;
  			for( int i = 0; i < histogram.length; i++ ) {
  				transform[i] = sum += histogram[i];
  			}
  
  			// compute the output across the row
  			indexIn = input.startIndex + y*input.stride + startX;
  			indexOut = output.startIndex + y*output.stride + startX;
  			for( int x = 0; x < radius; x++ ) {
  				int inputValue =  input.data[indexIn++] & 0xff;
  				output.data[indexOut++] = (short)((transform[ inputValue ]*maxValue)/area);
  			}
  		}
  		workArrays.recycle(histogram);
  		workArrays.recycle(transform);
  	}