ClassesClassesClassesClasses | | | | Operators

dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold (Operator)

Name

dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold — Threshold operator for signed images.

Signature

dual_threshold(Image : RegionCrossings : MinSize, MinGray, Threshold : )

Herror dual_threshold(const Hobject Image, Hobject* RegionCrossings, const Hlong MinSize, double MinGray, double Threshold)

Herror T_dual_threshold(const Hobject Image, Hobject* RegionCrossings, const Htuple MinSize, const Htuple MinGray, const Htuple Threshold)

Herror dual_threshold(Hobject Image, Hobject* RegionCrossings, const HTuple& MinSize, const HTuple& MinGray, const HTuple& Threshold)

HRegionArray HImage::DualThreshold(const HTuple& MinSize, const HTuple& MinGray, const HTuple& Threshold) const

HRegionArray HImageArray::DualThreshold(const HTuple& MinSize, const HTuple& MinGray, const HTuple& Threshold) const

void DualThreshold(const HObject& Image, HObject* RegionCrossings, const HTuple& MinSize, const HTuple& MinGray, const HTuple& Threshold)

HRegion HImage::DualThreshold(Hlong MinSize, double MinGray, double Threshold) const

void HOperatorSetX.DualThreshold(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*RegionCrossings, [in] VARIANT MinSize, [in] VARIANT MinGray, [in] VARIANT Threshold)

IHRegionX* HImageX.DualThreshold(
[in] Hlong MinSize, [in] double MinGray, [in] double Threshold)

static void HOperatorSet.DualThreshold(HObject image, out HObject regionCrossings, HTuple minSize, HTuple minGray, HTuple threshold)

HRegion HImage.DualThreshold(int minSize, double minGray, double threshold)

Description

dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold segments the input image into a region with gray values >= Threshold (“positive” regions) and a region with gray values <= -Threshold (“negative” regions). Only “positive” or “negative” regions having a size larger than MinSizeMinSizeMinSizeMinSizeMinSizeminSize are taken into account. And regions whose maximum gray value is less than MinGrayMinGrayMinGrayMinGrayMinGrayminGray in absolute value are suppressed.

The segmentation performed is not complete, i.e., the “positive” and “negative” regions together do not necessarily cover the entire image: Areas with a gray value between -ThresholdThresholdThresholdThresholdThresholdthreshold and ThresholdThresholdThresholdThresholdThresholdthreshold, -MinGrayMinGrayMinGrayMinGrayMinGrayminGray and MinGrayMinGrayMinGrayMinGrayMinGrayminGray, respectively, are not taken into account.

dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold is usually called after applying a Laplace operator (laplacelaplaceLaplacelaplaceLaplaceLaplace, laplace_of_gausslaplace_of_gaussLaplaceOfGausslaplace_of_gaussLaplaceOfGaussLaplaceOfGauss, derivate_gaussderivate_gaussDerivateGaussderivate_gaussDerivateGaussDerivateGauss or diff_of_gaussdiff_of_gaussDiffOfGaussdiff_of_gaussDiffOfGaussDiffOfGauss) to an image or with the difference of two images (sub_imagesub_imageSubImagesub_imageSubImageSubImage).

The zero crossings of a Laplace image correspond to edges in an image, and are the separating regions of the “positive” and “negative” regions in the Laplace image. They can be determined by calling dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold with ThresholdThresholdThresholdThresholdThresholdthreshold = 1 and then creating the complement regions with complementcomplementComplementcomplementComplementComplement. The parameter MinGrayMinGrayMinGrayMinGrayMinGrayminGray determines the noise invariance, while MinSizeMinSizeMinSizeMinSizeMinSizeminSize determines the resolution of the edge detection.

Using byte images, only the positive part of the operator is applied. Therefore dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold behaves like a standard threshold operator (thresholdthresholdThresholdthresholdThresholdThreshold) with successive connectionconnectionConnectionconnectionConnectionConnection and select_grayselect_graySelectGrayselect_graySelectGraySelectGray.

Parallelization

Parameters

ImageImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte / int1 / int2 / int4 / real)

Input image.

RegionCrossingsRegionCrossingsRegionCrossingsRegionCrossingsRegionCrossingsregionCrossings (output_object)  region-array objectHRegionHRegionHRegionArrayHRegionXHobject *

Positive and negative regions.

MinSizeMinSizeMinSizeMinSizeMinSizeminSize (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Regions smaller than MinSize are suppressed.

Default value: 20

Suggested values: 0, 10, 20, 50, 100, 200, 500, 1000

Typical range of values: 0 ≤ MinSize MinSize MinSize MinSize MinSize minSize ≤ 10000 (lin)

Minimum increment: 1

Recommended increment: 10

MinGrayMinGrayMinGrayMinGrayMinGrayminGray (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Regions whose maximum absolute gray value is smaller than MinGray are suppressed.

Default value: 5.0

Suggested values: 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 9.0, 11.0, 15.0, 20.0

Typical range of values: 0.001 ≤ MinGray MinGray MinGray MinGray MinGray minGray ≤ 10000.0 (lin)

Minimum increment: 1.0

Recommended increment: 10.0

Restriction: MinGray > 0

ThresholdThresholdThresholdThresholdThresholdthreshold (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Regions that have a gray value smaller than Threshold (or larger than -Threshold) are suppressed.

Default value: 2.0

Suggested values: 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 9.0, 11.0, 15.0, 20.0

Typical range of values: 0.001 ≤ Threshold Threshold Threshold Threshold Threshold threshold ≤ 10000.0 (lin)

Minimum increment: 1.0

Recommended increment: 10.0

Restriction: Threshold >= 1 && Threshold <= MinGray

Example (HDevelop)

* Edge detection with the Laplace operator (and edge thinning)
diff_of_gauss(Image,Laplace,2.0,1.6)
* find "`positive"' and "`negative"' regions:
dual_threshold(Laplace,Region,20,2,1)
* The zero runnings are the complement to these image section:
complement(Region,ZeroCrossings)

* Simulation of dual_threshold
dual_threshold(Laplace,Result,MinS,MinG,Threshold)
threshold(Laplace,Tmp1,Threshold,999999)
connection(Tmp1,Tmp2)
select_shape(Tmp2,Tmp3,'area','and',MinS,999999)
select_gray(Laplace,Tmp3,Tmp4,'max','and',MinG,999999)
threshold(Laplace,Tmp5,-999999,-Threshold)
connection(Tmp5,Tmp6)
select_shape(Tmp6,Tmp7,'area','and',MinS,999999)
select_gray(Laplace,Tmp7,Tmp8,'min','and',-999999,-MinG)
concat_obj(Tmp4,Tmp8,Result)

Example (C)

/* Edge detection with the Laplace operator (and edge thinning) */
diff_of_gauss(Image,&Laplace,2.0,1.6) ;
/* find "`positive"' and "`negative"' regions: */
dual_threshold(Laplace,&Region,20,2,1) ;
/*The zero runnings are the complement to these image section: */
complement(Region,ZeroCrossings) ;

Example (HDevelop)

* Edge detection with the Laplace operator (and edge thinning)
diff_of_gauss(Image,Laplace,2.0,1.6)
* find "`positive"' and "`negative"' regions:
dual_threshold(Laplace,Region,20,2,1)
* The zero runnings are the complement to these image section:
complement(Region,ZeroCrossings)

* Simulation of dual_threshold
dual_threshold(Laplace,Result,MinS,MinG,Threshold)
threshold(Laplace,Tmp1,Threshold,999999)
connection(Tmp1,Tmp2)
select_shape(Tmp2,Tmp3,'area','and',MinS,999999)
select_gray(Laplace,Tmp3,Tmp4,'max','and',MinG,999999)
threshold(Laplace,Tmp5,-999999,-Threshold)
connection(Tmp5,Tmp6)
select_shape(Tmp6,Tmp7,'area','and',MinS,999999)
select_gray(Laplace,Tmp7,Tmp8,'min','and',-999999,-MinG)
concat_obj(Tmp4,Tmp8,Result)

Example (C++ (HALCON 5.0-10.0))

#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]),
               laplace;
  HWindow      win;

  HRegionArray region,
               nulldg;

  image.Display (win);

  laplace = image.DiffOfGauss (2.0, 1.6);
  region  = laplace.DualThreshold (20, 2, 1);
  nulldg  = region.Complement ();

  laplace.Display (win);     win.Click ();
  region.Display (win);      win.Click ();
  nulldg.Display (win);      win.Click ();

  return (0);
}

Example (HDevelop)

* Edge detection with the Laplace operator (and edge thinning)
diff_of_gauss(Image,Laplace,2.0,1.6)
* find "`positive"' and "`negative"' regions:
dual_threshold(Laplace,Region,20,2,1)
* The zero runnings are the complement to these image section:
complement(Region,ZeroCrossings)

* Simulation of dual_threshold
dual_threshold(Laplace,Result,MinS,MinG,Threshold)
threshold(Laplace,Tmp1,Threshold,999999)
connection(Tmp1,Tmp2)
select_shape(Tmp2,Tmp3,'area','and',MinS,999999)
select_gray(Laplace,Tmp3,Tmp4,'max','and',MinG,999999)
threshold(Laplace,Tmp5,-999999,-Threshold)
connection(Tmp5,Tmp6)
select_shape(Tmp6,Tmp7,'area','and',MinS,999999)
select_gray(Laplace,Tmp7,Tmp8,'min','and',-999999,-MinG)
concat_obj(Tmp4,Tmp8,Result)

Example (HDevelop)

* Edge detection with the Laplace operator (and edge thinning)
diff_of_gauss(Image,Laplace,2.0,1.6)
* find "`positive"' and "`negative"' regions:
dual_threshold(Laplace,Region,20,2,1)
* The zero runnings are the complement to these image section:
complement(Region,ZeroCrossings)

* Simulation of dual_threshold
dual_threshold(Laplace,Result,MinS,MinG,Threshold)
threshold(Laplace,Tmp1,Threshold,999999)
connection(Tmp1,Tmp2)
select_shape(Tmp2,Tmp3,'area','and',MinS,999999)
select_gray(Laplace,Tmp3,Tmp4,'max','and',MinG,999999)
threshold(Laplace,Tmp5,-999999,-Threshold)
connection(Tmp5,Tmp6)
select_shape(Tmp6,Tmp7,'area','and',MinS,999999)
select_gray(Laplace,Tmp7,Tmp8,'min','and',-999999,-MinG)
concat_obj(Tmp4,Tmp8,Result)

Result

dual_thresholddual_thresholdDualThresholddual_thresholdDualThresholdDualThreshold returns 2 (H_MSG_TRUE) if all parameters are correct. The behavior with respect to the input images and output regions can be determined by setting the values of the flags 'no_object_result'"no_object_result""no_object_result""no_object_result""no_object_result""no_object_result", 'empty_region_result'"empty_region_result""empty_region_result""empty_region_result""empty_region_result""empty_region_result", and 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region""store_empty_region" with set_systemset_systemSetSystemset_systemSetSystemSetSystem. If necessary, an exception is raised.

Possible Predecessors

min_max_graymin_max_grayMinMaxGraymin_max_grayMinMaxGrayMinMaxGray, sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp, binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_imagegauss_imageGaussImagegauss_imageGaussImageGaussImage, reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain, diff_of_gaussdiff_of_gaussDiffOfGaussdiff_of_gaussDiffOfGaussDiffOfGauss, sub_imagesub_imageSubImagesub_imageSubImageSubImage, derivate_gaussderivate_gaussDerivateGaussderivate_gaussDerivateGaussDerivateGauss, laplace_of_gausslaplace_of_gaussLaplaceOfGausslaplace_of_gaussLaplaceOfGaussLaplaceOfGauss, laplacelaplaceLaplacelaplaceLaplaceLaplace, expand_regionexpand_regionExpandRegionexpand_regionExpandRegionExpandRegion

Possible Successors

connectionconnectionConnectionconnectionConnectionConnection, dilation1dilation1Dilation1dilation1Dilation1Dilation1, erosion1erosion1Erosion1erosion1Erosion1Erosion1, openingopeningOpeningopeningOpeningOpening, closingclosingClosingclosingClosingClosing, rank_regionrank_regionRankRegionrank_regionRankRegionRankRegion, shape_transshape_transShapeTransshape_transShapeTransShapeTrans, skeletonskeletonSkeletonskeletonSkeletonSkeleton

Alternatives

thresholdthresholdThresholdthresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold, check_differencecheck_differenceCheckDifferencecheck_differenceCheckDifferenceCheckDifference

See also

connectionconnectionConnectionconnectionConnectionConnection, select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape, select_grayselect_graySelectGrayselect_graySelectGraySelectGray

Module

Foundation


ClassesClassesClassesClasses | | | | Operators