docs: public static void computeScoreRow(GrayU8 left, GrayU8 right, int row, int[] scores,
  									   int minDisparity , int maxDisparity , int regionWidth ,
  									   int elementScore[] ) {
  
  		// disparity as the outer loop to maximize common elements in inner loops, reducing redundant calculations
  		for( int d = minDisparity; d < maxDisparity; d++ ) {
  			int dispFromMin = d - minDisparity;
  
  			// number of individual columns the error is computed in
  			final int colMax = left.width-d;
  			// number of regions that a score/error is computed in
  			final int scoreMax = colMax-regionWidth;
  
  			// indexes that data is read to/from for different data structures
  			int indexScore = left.width*dispFromMin + dispFromMin;
  			int indexLeft = left.startIndex + left.stride*row + d;
  			int indexRight = right.startIndex + right.stride*row;
  
  			// Fill elementScore with scores for individual elements for this row at disparity d
  			computeScoreRowSad(left, right, colMax, indexLeft, indexRight, elementScore);
  
  			// score at the first column
  			int score = 0;
  			for( int i = 0; i < regionWidth; i++ )
  				score += elementScore[i];
  
  			scores[indexScore++] = score;
  
  			// scores for the remaining columns
  			for( int col = 0; col < scoreMax; col++ , indexScore++ ) {
  				scores[indexScore] = score += elementScore[col+regionWidth] - elementScore[col];
  			}
  		}
  	}