docs: public static <T extends ImageGray<T>> StereoDisparity<T,GrayF32>
  	regionSubpixelWta( DisparityAlgorithms whichAlg ,
  					   int minDisparity , int maxDisparity,
  					   int regionRadiusX, int regionRadiusY ,
  					   double maxPerPixelError ,
  					   int validateRtoL ,
  					   double texture ,
  					   Class<T> imageType ) {
  
  		double maxError = (regionRadiusX*2+1)*(regionRadiusY*2+1)*maxPerPixelError;
  
  		// 3 regions are used not just one in this case
  		if( whichAlg == DisparityAlgorithms.RECT_FIVE )
  			maxError *= 3;
  
  		DisparitySelect select;
  		if( imageType == GrayU8.class || imageType == GrayS16.class ) {
  			select = selectDisparitySubpixel_S32((int) maxError, validateRtoL, texture);
  		} else if( imageType == GrayF32.class ) {
  			select = selectDisparitySubpixel_F32((int) maxError, validateRtoL, texture);
  		} else {
  			throw new IllegalArgumentException("Unknown image type");
  		}
  
  		DisparityScoreRowFormat<T,GrayF32> alg = null;
  
  		switch( whichAlg ) {
  			case RECT:
  				if( imageType == GrayU8.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRect_U8(minDisparity,
  							maxDisparity,regionRadiusX,regionRadiusY,select);
  				} else if( imageType == GrayS16.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRect_S16(minDisparity,
  							maxDisparity, regionRadiusX, regionRadiusY, select);
  				} else if( imageType == GrayF32.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRect_F32(minDisparity,
  							maxDisparity, regionRadiusX, regionRadiusY, select);
  				}
  				break;
  
  			case RECT_FIVE:
  				if( imageType == GrayU8.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRectFive_U8(minDisparity,
  							maxDisparity,regionRadiusX,regionRadiusY,select);
  				} else if( imageType == GrayS16.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRectFive_S16(minDisparity,
  							maxDisparity, regionRadiusX, regionRadiusY, select);
  				} else if( imageType == GrayF32.class ) {
  					alg = FactoryStereoDisparityAlgs.scoreDisparitySadRectFive_F32(minDisparity,
  							maxDisparity, regionRadiusX, regionRadiusY, select);
  				}
  				break;
  
  			default:
  				throw new IllegalArgumentException("Unknown algorithms "+whichAlg);
  
  		}
  		if( alg == null)
  			throw new RuntimeException("Image type not supported: "+imageType.getSimpleName() );
  
  		return new WrapDisparitySadRect<>(alg);
  	}