KlassenKlassenKlassenKlassen | | | | Operatoren

dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold (Operator)

Name

dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold — Segmentieren mit lokalem Schwellenwert.

Signatur

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

Herror dyn_threshold(const Hobject OrigImage, const Hobject ThresholdImage, Hobject* RegionDynThresh, double Offset, const char* LightDark)

Herror T_dyn_threshold(const Hobject OrigImage, const Hobject ThresholdImage, Hobject* RegionDynThresh, const Htuple Offset, const Htuple LightDark)

Herror dyn_threshold(Hobject OrigImage, Hobject ThresholdImage, Hobject* RegionDynThresh, const HTuple& Offset, const HTuple& LightDark)

HRegion HImage::DynThreshold(const HImage& ThresholdImage, const HTuple& Offset, const HTuple& LightDark) const

HRegionArray HImageArray::DynThreshold(const HImageArray& ThresholdImage, const HTuple& Offset, const HTuple& LightDark) const

void DynThreshold(const HObject& OrigImage, const HObject& ThresholdImage, HObject* RegionDynThresh, const HTuple& Offset, const HTuple& LightDark)

HRegion HImage::DynThreshold(const HImage& ThresholdImage, const HTuple& Offset, const HString& LightDark) const

HRegion HImage::DynThreshold(const HImage& ThresholdImage, double Offset, const HString& LightDark) const

HRegion HImage::DynThreshold(const HImage& ThresholdImage, double Offset, const char* LightDark) const

void HOperatorSetX.DynThreshold(
[in] IHUntypedObjectX* OrigImage, [in] IHUntypedObjectX* ThresholdImage, [out] IHUntypedObjectX*RegionDynThresh, [in] VARIANT Offset, [in] VARIANT LightDark)

IHRegionX* HImageX.DynThreshold(
[in] IHImageX* ThresholdImage, [in] VARIANT Offset, [in] BSTR LightDark)

static void HOperatorSet.DynThreshold(HObject origImage, HObject thresholdImage, out HObject regionDynThresh, HTuple offset, HTuple lightDark)

HRegion HImage.DynThreshold(HImage thresholdImage, HTuple offset, string lightDark)

HRegion HImage.DynThreshold(HImage thresholdImage, double offset, string lightDark)

Beschreibung

dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold wählt aus den Eingabebildern die Bildpunkte (g_{o} = g_{OrigImageOrigImageOrigImageOrigImageOrigImageorigImage}) aus, die der Schwellenwertbedingung genügen. Sei g_{t} = g_{ThresholdImageThresholdImageThresholdImageThresholdImageThresholdImagethresholdImage} dann lautet diese Bedingung bei LightDarkLightDarkLightDarkLightDarkLightDarklightDark = 'light':

Bei LightDarkLightDarkLightDarkLightDarkLightDarklightDark = 'dark' lautet sie:
Bei LightDarkLightDarkLightDarkLightDarkLightDarklightDark = 'equal':
Und bei LightDarkLightDarkLightDarkLightDarkLightDarklightDark = 'not_equal':

Typischerweise werden als Vergleichskomponenten das Original und eine geglättete Version eines Bildes verwendet (z.B. mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, etc.). Dann entspricht dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold in seiner Wirkung etwa der Anwendung von thresholdthresholdThresholdthresholdThresholdThreshold auf ein hochpassgefiltertes Bild (highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage).

Es lassen sich Objektkanten finden, wobei die Größe (Durchmesser) der gesuchten Objekte durch die Maskengröße des Tiefpassfilters und die Steigung, bzw. Amplitude der Kante festgelegt wird.

Je größer der Maskendurchmesser gewählt wird, desto größer sind die gefundenen Regionen. Als Faustregel sollte die Maskengröße etwa doppelt so groß wie der Durchmesser der gesuchten Objekte sein. Es ist wichtig, den Parameter OffsetOffsetOffsetOffsetOffsetoffset nicht auf Null zu setzen, da dann zu viele kleine Regionen gefunden werden (Rauschen). Sinnvoll sind Werte, die betragsmäßig zwischen 5 und 40 liegen. Je größer OffsetOffsetOffsetOffsetOffsetoffset gewählt wird, desto weniger Punkte werden gefunden und umso kleiner werden die Regionen.

Alle Punkte eines Eingabebildes, die die obige Bedingung erfüllen, werden gemeinsam als eine Region abgespeichert. Die Zusammenhangskomponenten können gegebenenfalls mit connectionconnectionConnectionconnectionConnectionConnection berechnet werden.

Achtung

Wird OffsetOffsetOffsetOffsetOffsetoffset auf -1 .. 1 gesetzt, dann wird i.a. eine sehr verrauschte Region erzeugt, die viel Speicherplatz benötigt. Wird OffsetOffsetOffsetOffsetOffsetoffset zu groß gewählt (etwa > 60), dann kann es vorkommen, dass kein Punkt die Schwellenwertbedingung erfüllt (also eine leere Region berechnet wird). Wird OffsetOffsetOffsetOffsetOffsetoffset zu klein gewählt (etwa < -60) dann können alle Punkte die Schwellenwertbedingung erfüllen. Es wird also eine maximale Region erzeugt.

Parallelisierung

Parameter

OrigImageOrigImageOrigImageOrigImageOrigImageorigImage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte / int2 / uint2 / int4 / real)

Eingabebild.

ThresholdImageThresholdImageThresholdImageThresholdImageThresholdImagethresholdImage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte / int2 / uint2 / int4 / real)

Bild mit den lokalen Werten.

RegionDynThreshRegionDynThreshRegionDynThreshRegionDynThreshRegionDynThreshregionDynThresh (output_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject *

Segmentierte Region.

OffsetOffsetOffsetOffsetOffsetoffset (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Schwellenwert für die Segmentation.

Defaultwert: 5.0

Wertevorschläge: 1.0, 3.0, 5.0, 7.0, 10.0, 20.0, 30.0

Typischer Wertebereich: -255.0 ≤ Offset Offset Offset Offset Offset offset ≤ 255.0 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 5

Restriktion: -255 < Offset && Offset < 255

LightDarkLightDarkLightDarkLightDarkLightDarklightDark (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Helle,dunkle oder ähnliche Bereiche suchen.

Defaultwert: 'light' "light" "light" "light" "light" "light"

Werteliste: 'dark'"dark""dark""dark""dark""dark", 'equal'"equal""equal""equal""equal""equal", 'light'"light""light""light""light""light", 'not_equal'"not_equal""not_equal""not_equal""not_equal""not_equal"

Beispiel (HDevelop)

* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)

Beispiel (C)

/* Looking for regions with the diameter D */
mean_image(Image,&Mean,D*2+1,D*2+1);
dyn_threshold(Image,Mean,&Seg,5.0,"light");
connection(Seg,&Region);

Beispiel (HDevelop)

* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)

Beispiel (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[])
{
  HImage   image ("monkey"),
           mean;
  HWindow  win;

  if (argc != 2)
  {
    cout << "Using: " << argv[0] << " <diameter>" << endl;
    exit (1);
  }

  int d = atoi (argv[1]) * 2 + 1;

  image.Display (win);

  mean = image.MeanImage (d, d);

  HRegionArray seg = image.DynThreshold (mean, 5.0, "light");
  HRegionArray reg = seg.Connection ();

  win.SetColored (12);
  reg.Display (win);
  win.Click ();

  return (0);
}

Beispiel (HDevelop)

* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)

Beispiel (HDevelop)

* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)

Komplexität

Sei A die Fläche der Eingaberegion, dann ist die Laufzeitkomplexität O(A)

Ergebnis

dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold liefert den Wert 2 (H_MSG_TRUE), falls die Parameter korrekt sind. 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""no_object_result", 'empty_region_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""store_empty_region" einstellbar (siehe set_systemset_systemSetSystemset_systemSetSystemSetSystem). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage, binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter

Nachfolger

connectionconnectionConnectionconnectionConnectionConnection, select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape, reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain, select_grayselect_graySelectGrayselect_graySelectGraySelectGray, rank_regionrank_regionRankRegionrank_regionRankRegionRankRegion, dilation1dilation1Dilation1dilation1Dilation1Dilation1, openingopeningOpeningopeningOpeningOpening, erosion1erosion1Erosion1erosion1Erosion1Erosion1

Alternativen

check_differencecheck_differenceCheckDifferencecheck_differenceCheckDifferenceCheckDifference, thresholdthresholdThresholdthresholdThresholdThreshold

Siehe auch

highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage, sub_imagesub_imageSubImagesub_imageSubImageSubImage

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren