dual_thresholddual_thresholdDualThresholdDualThreshold (Operator)

Name

dual_thresholddual_thresholdDualThresholdDualThreshold — Segmentieren mit Schwellen für Bilder mit Vorzeichen.

Signatur

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)

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

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

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

Beschreibung

dual_thresholddual_thresholdDualThresholdDualThresholdDualThreshold segmentiert das Eingabebild in eine Teilregion mit Grauwerten ThresholdThresholdThresholdThresholdthreshold („positive“ Bildbereiche) und eine mit Grauwerten ThresholdThresholdThresholdThresholdthreshold („negative“ Bildbereiche). Nur „positive“ oder „negative“ Teilbereiche mit einer Fläche größer als MinSizeMinSizeMinSizeMinSizeminSize werden dabei berücksichtigt. Teilbereiche, deren maximaler Grauwert betragsmäßig kleiner ist als MinGrayMinGrayMinGrayMinGrayminGray, werden unterdrückt.

Die durchgeführte Segmentation ist nicht vollständig, d.h. die „positiven“ und „negativen“ Ergebnisregionen überdecken zusammengenommen nicht unbedingt das ganze Eingabebild. Es bleiben alle Bildbereiche unberücksichtigt, deren Grauwerte zwischen ThresholdThresholdThresholdThresholdthreshold und ThresholdThresholdThresholdThresholdthreshold (bzw. MinGrayMinGrayMinGrayMinGrayminGray und MinGrayMinGrayMinGrayMinGrayminGray) liegen.

dual_thresholddual_thresholdDualThresholdDualThresholdDualThreshold schließt sich typischerweise an die Anwendung von Laplace-Operatoren wie (laplacelaplaceLaplaceLaplaceLaplace, laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGaussLaplaceOfGauss, derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGauss oder diff_of_gaussdiff_of_gaussDiffOfGaussDiffOfGaussDiffOfGauss) oder eine Bildsubtraktion (sub_imagesub_imageSubImageSubImageSubImage) an. In den Nulldurchgängen des Laplace-Operators spiegeln sich Bildkanten wider, die sich als Trennlinien zwischen den „positiven“ und „negativen“ Bildbereichen bestimmen lassen. Dazu ruft man zuerst dual_thresholddual_thresholdDualThresholdDualThresholdDualThreshold mit ThresholdThresholdThresholdThresholdthreshold = 1 auf und erzeugt dann die komplementäre Regionen mittels complementcomplementComplementComplementComplement. Der Parameter MinGrayMinGrayMinGrayMinGrayminGray steuert dabei die Rauschinvarianz,während MinSizeMinSizeMinSizeMinSizeminSize das Auflösungsvermögen der Kantendetektion steuert.

Bei Pixeltypen ohne Vorzeichen (byte) wird nur die positive Hälfte der Segmentation durchgeführt. dual_thresholddual_thresholdDualThresholdDualThresholdDualThreshold verhält sich also wie eine einfaches Schwellenwertverfahren (thresholdthresholdThresholdThresholdThreshold) mit nachgeschaltetem connectionconnectionConnectionConnectionConnection und select_grayselect_graySelectGraySelectGraySelectGray.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / int1 / int2 / int4 / real)

Eingabebild.

RegionCrossingsRegionCrossingsRegionCrossingsRegionCrossingsregionCrossings (output_object)  region-array objectHRegionHRegionHobject *

„Positive“ und „negative“ Teilregionen.

MinSizeMinSizeMinSizeMinSizeminSize (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Teilregionen mit weniger als MinSize Fläche werden unterdrückt.

Defaultwert: 20

Wertevorschläge: 0, 10, 20, 50, 100, 200, 500, 1000

Typischer Wertebereich: 0 ≤ MinSize MinSize MinSize MinSize minSize ≤ 10000 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

MinGrayMinGrayMinGrayMinGrayminGray (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Teilregionen, deren maximaler Grauwert betragsmäßig kleiner als MinGray ist, werden unterdrückt.

Defaultwert: 5.0

Wertevorschläge: 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 9.0, 11.0, 15.0, 20.0

Typischer Wertebereich: 0.001 ≤ MinGray MinGray MinGray MinGray minGray ≤ 10000.0 (lin)

Minimale Schrittweite: 1.0

Empfohlene Schrittweite: 10.0

Restriktion: MinGray > 0

ThresholdThresholdThresholdThresholdthreshold (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Zurückgeliefert werden Teilregionen, deren Grauwerte größer gleich (bzw. kleiner gleich) Threshold (-Threshold) sind.

Defaultwert: 2.0

Wertevorschläge: 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 9.0, 11.0, 15.0, 20.0

Typischer Wertebereich: 0.001 ≤ Threshold Threshold Threshold Threshold threshold ≤ 10000.0 (lin)

Minimale Schrittweite: 1.0

Empfohlene Schrittweite: 10.0

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

Beispiel (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)

Beispiel (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);

Beispiel (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)

Beispiel (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)

Beispiel (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)

Ergebnis

dual_thresholddual_thresholdDualThresholdDualThresholdDualThreshold liefert normalerweise den Wert 2 (H_MSG_TRUE). Für das Verhalten bzgl. der Eingabebilder und Ausgaberegionen sind die Flags '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" und 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region" einstellbar (siehe set_systemset_systemSetSystemSetSystemSetSystem). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

min_max_graymin_max_grayMinMaxGrayMinMaxGrayMinMaxGray, sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp, binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, diff_of_gaussdiff_of_gaussDiffOfGaussDiffOfGaussDiffOfGauss, sub_imagesub_imageSubImageSubImageSubImage, derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGauss, laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGaussLaplaceOfGauss, laplacelaplaceLaplaceLaplaceLaplace, expand_regionexpand_regionExpandRegionExpandRegionExpandRegion

Nachfolger

connectionconnectionConnectionConnectionConnection, dilation1dilation1Dilation1Dilation1Dilation1, erosion1erosion1Erosion1Erosion1Erosion1, openingopeningOpeningOpeningOpening, closingclosingClosingClosingClosing, rank_regionrank_regionRankRegionRankRegionRankRegion, shape_transshape_transShapeTransShapeTransShapeTrans, skeletonskeletonSkeletonSkeletonSkeleton

Alternativen

thresholdthresholdThresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, check_differencecheck_differenceCheckDifferenceCheckDifferenceCheckDifference

Siehe auch

connectionconnectionConnectionConnectionConnection, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, select_grayselect_graySelectGraySelectGraySelectGray

Modul

Foundation