Name
dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold — Segmentieren mit lokalem Schwellenwert.
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
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.
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.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
- Automatisch parallelisiert auf Domainebene.
Bild mit den lokalen Werten.
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
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"
* 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)
/* 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);
* 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)
#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);
}
* 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)
* 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)
Sei A die Fläche der Eingaberegion, dann ist die
Laufzeitkomplexität O(A)
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.
mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage,
smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage,
binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter,
gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter
connectionconnectionConnectionconnectionConnectionConnection,
select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape,
reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain,
select_grayselect_graySelectGrayselect_graySelectGraySelectGray,
rank_regionrank_regionRankRegionrank_regionRankRegionRankRegion,
dilation1dilation1Dilation1dilation1Dilation1Dilation1,
openingopeningOpeningopeningOpeningOpening,
erosion1erosion1Erosion1erosion1Erosion1Erosion1
check_differencecheck_differenceCheckDifferencecheck_differenceCheckDifferenceCheckDifference,
thresholdthresholdThresholdthresholdThresholdThreshold
highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage,
sub_imagesub_imageSubImagesub_imageSubImageSubImage
Foundation