min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray (Operator)
Name
min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray
— Determine the minimum and maximum gray values within regions.
Signature
Herror min_max_gray(const Hobject Regions, const Hobject Image, double Percent, double* Min, double* Max, double* Range)
Herror T_min_max_gray(const Hobject Regions, const Hobject Image, const Htuple Percent, Htuple* Min, Htuple* Max, Htuple* Range)
void MinMaxGray(const HObject& Regions, const HObject& Image, const HTuple& Percent, HTuple* Min, HTuple* Max, HTuple* Range)
void HImage::MinMaxGray(const HRegion& Regions, const HTuple& Percent, HTuple* Min, HTuple* Max, HTuple* Range) const
void HImage::MinMaxGray(const HRegion& Regions, double Percent, double* Min, double* Max, double* Range) const
void HRegion::MinMaxGray(const HImage& Image, const HTuple& Percent, HTuple* Min, HTuple* Max, HTuple* Range) const
void HRegion::MinMaxGray(const HImage& Image, double Percent, double* Min, double* Max, double* Range) const
static void HOperatorSet.MinMaxGray(HObject regions, HObject image, HTuple percent, out HTuple min, out HTuple max, out HTuple range)
void HImage.MinMaxGray(HRegion regions, HTuple percent, out HTuple min, out HTuple max, out HTuple range)
void HImage.MinMaxGray(HRegion regions, double percent, out double min, out double max, out double range)
void HRegion.MinMaxGray(HImage image, HTuple percent, out HTuple min, out HTuple max, out HTuple range)
void HRegion.MinMaxGray(HImage image, double percent, out double min, out double max, out double range)
def min_max_gray(regions: HObject, image: HObject, percent: Union[int, float]) -> Tuple[Sequence[float], Sequence[float], Sequence[float]]
def min_max_gray_s(regions: HObject, image: HObject, percent: Union[int, float]) -> Tuple[float, float, float]
Description
The operator min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray
creates the histogram of the
absolute frequencies of the gray values within RegionsRegionsRegionsregionsregions
in
the input image ImageImageImageimageimage
(see gray_histogray_histoGrayHistoGrayHistogray_histo
) and
calculates the number of pixels PercentPercentPercentpercentpercent
corresponding to
the area of the input image. Then it goes inwards on both sides of
the histogram by this number of pixels and determines the smallest
and the largest gray value:
-
Example:
With area = 60, PercentPercentPercentpercentpercent
= 5, d.h. i.e. 3 pixels,
histogram = [2,8,0,7,13,0,0,...,0,10,10,5,3,1,1],
Minimum = 0, Maximum = 255, range = 255
min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray
returns:
MinMinMinminmin
= 1,
MaxMaxMaxmaxmax
= 253,
RangeRangeRangerangerange
= 252.
For images of type int4
, int8
, and real
,
the above calculation is not performed via histograms, but using a rank
selection algorithm.
If PercentPercentPercentpercentpercent
is set to 50,
MinMinMinminmin
= MaxMaxMaxmaxmax
= Median.
If PercentPercentPercentpercentpercent
is 0 no histogram is calculated in
order to enhance the runtime.
Attention
Note that the operator min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray
only considers
the given RegionsRegionsRegionsregionsregions
and ignores any previously set domain
of the input image ImageImageImageimageimage
.
Execution Information
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
Parameters
RegionsRegionsRegionsregionsregions
(input_object) region(-array) →
objectHRegionHObjectHObjectHobject
Regions, the features of which are to be calculated.
ImageImageImageimageimage
(input_object) singlechannelimage →
objectHImageHObjectHObjectHobject (byte / direction / cyclic / int1 / int2 / uint2 / int4 / int8 / real)
Gray value image.
PercentPercentPercentpercentpercent
(input_control) number →
HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Percentage below (above) the absolute maximum
(minimum).
Default:
0
Suggested values:
0, 1, 2, 5, 7, 10, 15, 20, 30, 40, 50
Restriction:
0 <= Percent && Percent <= 50
MinMinMinminmin
(output_control) real(-array) →
HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
“Minimum” gray value.
MaxMaxMaxmaxmax
(output_control) real(-array) →
HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
“Maximum” gray value.
Assertion:
Max >= Min
RangeRangeRangerangerange
(output_control) real(-array) →
HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Difference between Max and Min.
Assertion:
Range >= 0
Example (HDevelop)
* Threshold segmentation with training region:
read_image(Image,'fabrik')
draw_region(Region,WindowHandle)
min_max_gray(Region,Image,5,Min,Max,Range)
threshold(Image,SegmentedRegion,Min,Max)
dev_display(SegmentedRegion)
Example (C)
/* Threshold segmentation with training region: */
read_image(&Image,"fabrik");
draw_region(&Region,WindowHandle);
min_max_gray(Region,Image,5.0,&Min,&Max,NULL);
threshold(Image,&SegmentedRegion,Min,Max);
disp_region(SegmentedRegion,WindowHandle);
Example (C++)
#include "HalconCpp.h"
using namespace Halcon;
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
main()
{
HImage img ("fabrik");
HWindow w;
Htuple range, max;
img.Display (w);
w.Click ();
HRegion reg = w.DrawRegion ();
HImage rdd = img.ReduceDomain (reg);
Htuple min = reg.MinMaxGray (rdd, 5, &max, &range);
HRegionArray imgseg = ((img >= min[0].I()).Connection() &
(img <= max[0].I()).Connection());
cout << "Min = " << min[0].I() << endl;
cout << "Max = " << max[0].I() << endl;
imgseg.Display (w);
w.Click ();
return(0);
}
Example (HDevelop)
* Threshold segmentation with training region:
read_image(Image,'fabrik')
draw_region(Region,WindowHandle)
min_max_gray(Region,Image,5,Min,Max,Range)
threshold(Image,SegmentedRegion,Min,Max)
dev_display(SegmentedRegion)
Result
The operator min_max_graymin_max_grayMinMaxGrayMinMaxGraymin_max_gray
returns the value 2 (
H_MSG_TRUE)
if the
input image has the defined gray values and the parameters are
correct. The behavior in case of empty input (no input images
available) is set via the operator
set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)
.
The behavior in case of an empty region is set via the operator
set_system(::'empty_region_result',<Result>:)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>)
.
If necessary an exception is raised.
Possible Predecessors
draw_regiondraw_regionDrawRegionDrawRegiondraw_region
,
gen_circlegen_circleGenCircleGenCirclegen_circle
,
gen_ellipsegen_ellipseGenEllipseGenEllipsegen_ellipse
,
gen_rectangle1gen_rectangle1GenRectangle1GenRectangle1gen_rectangle1
,
thresholdthresholdThresholdThresholdthreshold
,
regiongrowingregiongrowingRegiongrowingRegiongrowingregiongrowing
Possible Successors
thresholdthresholdThresholdThresholdthreshold
Alternatives
select_grayselect_graySelectGraySelectGrayselect_gray
,
intensityintensityIntensityIntensityintensity
See also
gray_histogray_histoGrayHistoGrayHistogray_histo
,
scale_imagescale_imageScaleImageScaleImagescale_image
,
scale_image_maxscale_image_maxScaleImageMaxScaleImageMaxscale_image_max
,
learn_ndim_normlearn_ndim_normLearnNdimNormLearnNdimNormlearn_ndim_norm
Module
Foundation