docs: private void computeRemainingRows(GrayU8 left, GrayU8 right )
  	{
  		for( int row = regionHeight; row < left.height; row++ , activeVerticalScore++) {
  			int oldRow = row%regionHeight;
  			int previous[] = verticalScore[ (activeVerticalScore -1) % regionHeight ];
  			int active[] = verticalScore[ activeVerticalScore % regionHeight ];
  
  			// subtract first row from vertical score
  			int scores[] = horizontalScore[oldRow];
  			for( int i = 0; i < lengthHorizontal; i++ ) {
  				active[i] = previous[i] - scores[i];
  			}
  
  			UtilDisparityScore.computeScoreRow(left, right, row, scores,
  					minDisparity,maxDisparity,regionWidth,elementScore);
  
  			// add the new score
  			for( int i = 0; i < lengthHorizontal; i++ ) {
  				active[i] += scores[i];
  			}
  
  			if( activeVerticalScore >= regionHeight-1 ) {
  				int top[] = verticalScore[ (activeVerticalScore -2*radiusY) % regionHeight ];
  				int middle[] = verticalScore[ (activeVerticalScore -radiusY) % regionHeight ];
  				int bottom[] = verticalScore[ activeVerticalScore % regionHeight ];
  
  				computeScoreFive(top,middle,bottom,fiveScore,left.width);
  				computeDisparity.process(row - (1 + 4*radiusY) + 2*radiusY+1, fiveScore );
  			}
  		}
  	}