Determine gray value thresholds from a histogram.
histo_to_thresh determines gray value thresholds from a histogram for a segmentation of an image using threshold. The thresholds returned are 0, 255, and all minima extracted from the histogram. Before the thresholds are determined the histogram is smoothed with a Gaussian.
|
Histogramm (input_control) |
histogram-array -> integer / real |
| Gray value histogram. | |
|
Sigma (input_control) |
number -> real |
| Sigma for the Gaussian smoothing of the histogram. | |
| Default value: 2.0 | |
| Suggested values: 0.5, 1.0, 2.0, 3.0, 4.0, 5.0 | |
| Typical range of values: 0.1 <= Sigma <= 30.0 (lin) | |
| Minimum increment: 0.01 | |
|
Recommended increment: 0.2 | |
|
MinThresh (output_control) |
integer-array -> integer |
| Minimum thresholds. | |
|
MaxThresh (output_control) |
integer-array -> integer |
| Maximum thresholds. | |
#include <iostream.h>
#include "HalconCpp.h"
int main (int argc, char *argv[])
{
if (argc != 2)
{
cout << "Usage : " << argv[0] << " <name of image>" << endl;
return (-1);
}
HImage image (argv[1]),
Smoothed;
HWindow win;
Tuple MinThres, MaxThres,
HistoAbs, HistoRel,
size = 10,
iter = 3,
thresh = 0.0;
HRegionArray reg = image.GetDomain ();
HistoAbs = reg.GrayHisto (image, &HistoRel);
Smoothed = HistoAbs.FunctionSmoothMean (size, iter);
MinThres = Smoothed.HistoToThresh (thresh, &MaxThres);
HRegionArray seg = image.Threshold (MinThres, MaxThres);
HRegionArray con = seg.Connection ();
/* Alternativkonstrukt fuer Threshold() in
Aufrufkombination mit Connection()
-------------------------------------------------------
HRegionArray con = ((image >= MinThres) &
(image <= MaxThres)).Connection ();
------------------------------------------------------- */
con.Display (win);
win.Click ();
return (0);
}
histo_to_thresh is reentrant and processed without parallelization.
Region processing