Thresholding
            Transforms a grayscale image into a binary image where all pixels with an initial gray level value lying between two user-defined bounds are set to 1 and all others are set to 0.
Access to parameter description
For an introduction:
Threshold with 2 bounds is the default behavior, but a threshold with a single bound may be achieved by setting $\lambda_1$ or $\lambda_2$ to the minimum or maximum value of the input data range (for example, 0 or 255, respectively for 8-bit unsigned data).
        
The definition is: $$ O(n,m)=\left\{\begin{array}{ll} 1 & \mbox{if } \lambda_1 \leq I(n,m) \leq \lambda_2 \\ 0 & \mbox{if I(n,m) <} \lambda_1 \mbox{ or I(n,m)>} \lambda_2 \end{array}\right. $$
  

Figure 1. Thresholding a grayscale image
        
Note: This algorithm is dedicated to be applied on grayscale images. However, for convenience, it does not return an exception when applied on a color image. It simply processes the last color channel; for instance, the blue channel in the case of an RGB image.
        
See also
See related example
		Access to parameter description
For an introduction:
- section Image Segmentation
 - section Binarization
 
Threshold with 2 bounds is the default behavior, but a threshold with a single bound may be achieved by setting $\lambda_1$ or $\lambda_2$ to the minimum or maximum value of the input data range (for example, 0 or 255, respectively for 8-bit unsigned data).
The definition is: $$ O(n,m)=\left\{\begin{array}{ll} 1 & \mbox{if } \lambda_1 \leq I(n,m) \leq \lambda_2 \\ 0 & \mbox{if I(n,m) <} \lambda_1 \mbox{ or I(n,m)>} \lambda_2 \end{array}\right. $$

Figure 1. Thresholding a grayscale image
Note: This algorithm is dedicated to be applied on grayscale images. However, for convenience, it does not return an exception when applied on a color image. It simply processes the last color channel; for instance, the blue channel in the case of an RGB image.
See also
See related example
Function Syntax
This function returns the outputBinaryImage output parameter.
                        
                    
// Function prototype.
std::shared_ptr< iolink::ImageView >
thresholding( std::shared_ptr< iolink::ImageView > inputImage,
              iolink::Vector2d thresholdRange,
              std::shared_ptr< iolink::ImageView > outputBinaryImage = NULL );
                    
This function returns the outputBinaryImage output parameter.
                        
                    // Function prototype. thresholding( input_image, threshold_range = [128, 255], output_binary_image = None )
This function returns the outputBinaryImage output parameter.
                        
                
// Function prototype.
public static IOLink.ImageView
Thresholding( IOLink.ImageView inputImage,
              double[] thresholdRange = null,
              IOLink.ImageView outputBinaryImage = null );
                    Class Syntax
Parameters
| Class Name | Thresholding | 
|---|
| Parameter Name | Description | Type | Supported Values | Default Value | |
|---|---|---|---|---|---|
![]()  | 
  inputImage    | 
 The input image. | Image | Binary, Label, Grayscale or Multispectral | nullptr | 
![]()  | 
  thresholdRange    | 
 The low and high threshold levels. | Vector2d | Any value | {128.f, 255.f} | 
![]()  | 
  outputBinaryImage    | 
 The output binary image. Its dimensions are forced to the same values as the input. | Image | nullptr | |
Object Examples
auto foam = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam.vip" );
Thresholding thresholdingAlgo;
thresholdingAlgo.setInputImage( foam );
thresholdingAlgo.setThresholdRange( {128.0, 255.0} );
thresholdingAlgo.execute();
std::cout << "outputBinaryImage:" << thresholdingAlgo.outputBinaryImage()->toString();
            
foam = imagedev.read_vip_image(imagedev_data.get_image_path("foam.vip"))
thresholding_algo = imagedev.Thresholding()
thresholding_algo.input_image = foam
thresholding_algo.threshold_range = [128.0, 255.0]
thresholding_algo.execute()
print( "output_binary_image:", str( thresholding_algo.output_binary_image ) );
            
ImageView foam = Data.ReadVipImage( @"Data/images/foam.vip" );
Thresholding thresholdingAlgo = new Thresholding
{
    inputImage = foam,
    thresholdRange = new double[]{128.0, 255.0}
};
thresholdingAlgo.Execute();
Console.WriteLine( "outputBinaryImage:" + thresholdingAlgo.outputBinaryImage.ToString() );
            Function Examples
auto foam = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam.vip" );
auto result = thresholding( foam, {128.0, 255.0} );
std::cout << "outputBinaryImage:" << result->toString();
            
foam = imagedev.read_vip_image(imagedev_data.get_image_path("foam.vip"))
result = imagedev.thresholding( foam, [128.0, 255.0] )
print( "output_binary_image:", str( result ) );
            
ImageView foam = Data.ReadVipImage( @"Data/images/foam.vip" );
IOLink.ImageView result = Processing.Thresholding( foam, new double[]{128.0, 255.0} );
Console.WriteLine( "outputBinaryImage:" + result.ToString() );
            
