Skip to content

char_thresholdCharThresholdCharThresholdchar_thresholdchar_thresholdπŸ”—

Short descriptionπŸ”—

char_thresholdCharThresholdCharThresholdchar_thresholdchar_threshold β€” Perform a threshold segmentation for extracting characters.

SignatureπŸ”—

char_threshold( image Image, region HistoRegion, out region Characters, number Sigma, number Percent, out integer Threshold )void CharThreshold( const HObject& Image, const HObject& HistoRegion, HObject* Characters, const HTuple& Sigma, const HTuple& Percent, HTuple* Threshold )static void HOperatorSet.CharThreshold( HObject image, HObject histoRegion, out HObject characters, HTuple sigma, HTuple percent, out HTuple threshold )def char_threshold( image: HObject, histo_region: HObject, sigma: float, percent: Union[int, float] ) -> Tuple[HObject, Sequence[int]]

def char_threshold_s( image: HObject, histo_region: HObject, sigma: float, percent: Union[int, float] ) -> Tuple[HObject, int]Herror char_threshold( const Hobject Image, const Hobject HistoRegion, Hobject* Characters, double Sigma, double Percent, Hlong* Threshold )

Herror T_char_threshold( const Hobject Image, const Hobject HistoRegion, Hobject* Characters, const Htuple Sigma, const Htuple Percent, Htuple* Threshold )

HRegion HImage::CharThreshold( const HRegion& HistoRegion, double Sigma, const HTuple& Percent, HTuple* Threshold ) const

HRegion HImage::CharThreshold( const HRegion& HistoRegion, double Sigma, double Percent, Hlong* Threshold ) const

HRegion HImage.CharThreshold( HRegion histoRegion, double sigma, HTuple percent, out HTuple threshold )

HRegion HImage.CharThreshold( HRegion histoRegion, double sigma, double percent, out int threshold )

DescriptionπŸ”—

The main application of char_thresholdCharThreshold is to segment single-channel images of dark characters on bright paper. The operator works as follows: First, a histogram of the gray values in the image Imageimageimage is computed for the points in the region HistoRegionhistoRegionhisto_region{}. To eliminate noise, the histogram is smoothed with the given Sigmasigmasigma (Gaussian smoothing). In the histogram, the background (white paper) corresponds to a large peak at high gray values, while the characters form a small peak at low gray values. In contrast to the operator binary_thresholdBinaryThreshold (with Methodmethodmethod='smooth_histo'"smooth_histo"), which locates the minimum between the two peaks, here the threshold for the segmentation is determined in relation to the maximum of the histogram, i.e., the background, with the following condition:

         histogram[threshold] * 100.0 < histogram[maximum] * (100.0 - Percent)

For example, if you choose Percentpercentpercent = 95 the operator locates the gray value whose frequency is at most 5 percent of the maximum frequency. Because char_thresholdCharThreshold assumes that the characters are darker than the background, the threshold is searched for β€œto the left” of the maximum.

In comparison to binary_thresholdBinaryThreshold, this operator should be used if there is no clear minimum between the histogram peaks corresponding to the characters and the background, respectively, or if there is no peak corresponding to the characters at all. This may happen, e.g., if the image contains only few characters or in the case of a non-uniform illumination.

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on internal data level.

ParametersπŸ”—

Imageimageimage (input_object) singlechannelimage(-array) β†’ object (byte)HObject (byte)HImage (byte)HObject (byte)Hobject (byte)

Input image.

HistoRegionhistoRegionhisto_region (input_object) region β†’ objectHObjectHRegionHObjectHobject

Region in which the histogram is computed.

Characterscharacterscharacters (output_object) region(-array) β†’ objectHObjectHRegionHObjectHobject *

Dark regions (characters).

Sigmasigmasigma (input_control) number β†’ (real)HTuple (double)HTuple (double)floatHtuple (double)

Sigma for the Gaussian smoothing of the histogram.

Default: 2.02.0
Suggested values: 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.00.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0
Value range: 0.0 ≀ Sigma ≀ 50.0 (lin)
Minimum increment: 0.01
Recommended increment: 0.2

Percentpercentpercent (input_control) number β†’ (real / integer)HTuple (double / Hlong)HTuple (double / int / long)Union[int, float]Htuple (double / Hlong)

Percentage for the gray value difference.

Default: 9595
Suggested values: 90, 92, 95, 96, 97, 98, 99, 99.5, 10090, 92, 95, 96, 97, 98, 99, 99.5, 100
Value range: 0.0 ≀ Percent ≀ 100.0 (lin)
Minimum increment: 0.1
Recommended increment: 0.5

Thresholdthresholdthreshold (output_control) integer(-array) β†’ (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Calculated threshold.

ExampleπŸ”—

(HDevelop)

read_image (Image, 'letters')
char_threshold (Image, Image, Seg, 0.0, 5.0, Threshold)
connection (Seg, Connected)
(C)
read_image(&Image,"letters")\;
char_threshold(Image,Image,&Seg,0.0,5.0,&Threshold)\;
connection(Seg,&Connected)\;
set_colored(WindowHandle,12)\;
set_shape(WindowHandle,"rectangle1")\;
disp_region(Connected,WindowHandle)\;
(C++)
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std\;
#endif
#include "HalconCpp.h"
using namespace Halcon\;

int main (int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "Usage : " << argv[0] << " 'image' " << endl\;
    return -1\;
  }
 HImage       image(argv[1])\;
  HWindow      w\;
  HTuple       threshold\;
 w.SetDraw("margin")\;
  w.SetShape("rectangle1")\;
  w.SetColored(12)\;
 image.Display(w)\;
 HRegionArray reg = image.CharThreshold(image,0,5,&threshold)\;
  HRegionArray con = reg.Connection()\;
 cout << "Display image after CharThreshold segmentation " << endl\;
  con.Display(w)\;
  w.Click()\;
 return 0\;
}

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

anisotropic_diffusionAnisotropicDiffusion, median_imageMedianImage, illuminateIlluminate

Possible successors

connectionConnection, select_shapeSelectShape, select_graySelectGray

Alternatives

binary_thresholdBinaryThreshold, auto_thresholdAutoThreshold, gray_histoGrayHisto, smooth_funct_1d_gaussSmoothFunct1dGauss, thresholdThreshold

ModuleπŸ”—

Foundation