laplacelaplaceLaplaceLaplacelaplace (Operator)
Name
laplacelaplaceLaplaceLaplacelaplace — Näherung des Laplace-Operators durch finite Differenzen.
Signatur
void Laplace(const HObject& Image, HObject* ImageLaplace, const HTuple& ResultType, const HTuple& MaskSize, const HTuple& FilterMask)
HImage HImage::Laplace(const HString& ResultType, const HTuple& MaskSize, const HString& FilterMask) const
HImage HImage::Laplace(const HString& ResultType, Hlong MaskSize, const HString& FilterMask) const
HImage HImage::Laplace(const char* ResultType, Hlong MaskSize, const char* FilterMask) const
HImage HImage::Laplace(const wchar_t* ResultType, Hlong MaskSize, const wchar_t* FilterMask) const
(
Nur Windows)
Beschreibung
laplacelaplaceLaplaceLaplacelaplace filtert die Eingabebilder (ImageImageImageimageimage) mittels
des Laplace-Operators. Abhängig vom Parameter FilterMaskFilterMaskFilterMaskfilterMaskfilter_mask
werden folgende lokale Approximationen an den Laplace-Operator
zugrundegelegt:
- 'n_4'
-
1
1 -4 1
1
- 'n_8'
-
1 1 1
1 -8 1
1 1 1
- 'n_8_isotropic'
10 22 10
22 -128 22
10 22 10
Für die einzelnen Filtermasken werden folgende Normierungen
der Ergebnisgrauwerte, (d.h. Division durch die angegebene Zahl)
durchgeführt: 'n_4' Normierung durch 1, 'n_8', Normierung durch
2 und 'n_8_isotropic' Normierung durch 32.
Für eine 3x3 Laplace-Filterung (
MaskSizeMaskSizeMaskSizemaskSizemask_size
= 3) wird der entsprechende Filter direkt angewandt. Für größere
Laplace-Filter wird das Eingabebild dagegen zunächst mit dem
Gaußfilter (siehe
gauss_imagegauss_imageGaussImageGaussImagegauss_image) oder einem Binomialfilter
(siehe
binomial_filterbinomial_filterBinomialFilterBinomialFilterbinomial_filter) der Größe
MaskSizeMaskSizeMaskSizemaskSizemask_size-2
geglättet. Der Gaußfilter wird durch die oben angegebenen Werte
von
ResultTypeResultTypeResultTyperesultTyperesult_type ausgewählt. Hierbei ist
MaskSizeMaskSizeMaskSizemaskSizemask_size
= 5, 7, 9, 11 oder 13 zu wählen. Der Binomialfilter wird
ausgewählt, indem
'_binomial'"_binomial""_binomial""_binomial""_binomial" an die oben angegebenen
Werte von
ResultTypeResultTypeResultTyperesultTyperesult_type angehängt wird. Hier kann
MaskSizeMaskSizeMaskSizemaskSizemask_size zwischen 5 und 39 gewählt werden. Zusätzlich
ist es hier möglich, unterschiedliche Glättungen in Spalten- und
Zeilenrichtung durch Angabe von zwei Werten in
MaskSizeMaskSizeMaskSizemaskSizemask_size zu
erreichen. Dabei entspricht der erste Wert der Maskenbreite
(Glättung in Spaltenrichtung) und der zweite Wert der Maskenhöhe
(Glättung in Zeilenrichtung) des Binomialfilters. Somit ist z.B.
laplace(O:R:'absolute',MaskSize,N:)laplace(O,R,"absolute",MaskSize,N)Laplace(O,R,"absolute",MaskSize,N)Laplace(O,R,"absolute",MaskSize,N)laplace(O,R,"absolute",MaskSize,N)
|
für
MaskSizeMaskSizeMaskSizemaskSizemask_size >
3 äquivalent zu
gauss_image(O:G:MaskSize-2:)gauss_image(O,G,MaskSize-2)GaussImage(O,G,MaskSize-2)GaussImage(O,G,MaskSize-2)gauss_image(O,G,MaskSize-2)
|
laplace(G:R:'absolute',3,N:)laplace(G,R,"absolute",3,N)Laplace(G,R,"absolute",3,N)Laplace(G,R,"absolute",3,N)laplace(G,R,"absolute",3,N)
|
und
laplace(O:R:'absolute_binomial',MaskSize,N:)laplace(O,R,"absolute_binomial",MaskSize,N)Laplace(O,R,"absolute_binomial",MaskSize,N)Laplace(O,R,"absolute_binomial",MaskSize,N)laplace(O,R,"absolute_binomial",MaskSize,N)
|
ist äquivalent zu
binomial_filter(O:B:MaskSize-2,MaskSize-2:)binomial_filter(O,B,MaskSize-2,MaskSize-2)BinomialFilter(O,B,MaskSize-2,MaskSize-2)BinomialFilter(O,B,MaskSize-2,MaskSize-2)binomial_filter(O,B,MaskSize-2,MaskSize-2)
|
laplace(B:R:'absolute',3,N:)laplace(B,R,"absolute",3,N)Laplace(B,R,"absolute",3,N)Laplace(B,R,"absolute",3,N)laplace(B,R,"absolute",3,N).
|
laplacelaplaceLaplaceLaplacelaplace liefert entweder den Absolutbetrag des
Laplace-gefilterten Eingabebildes (ResultTypeResultTypeResultTyperesultTyperesult_type =
'absolute'"absolute""absolute""absolute""absolute") in einem byte/uint2-Bild oder unmittelbar das
Filterergebnis (ResultTypeResultTypeResultTyperesultTyperesult_type = 'signed'"signed""signed""signed""signed" oder
'signed_clipped'"signed_clipped""signed_clipped""signed_clipped""signed_clipped") mit einem Pixeltyp mit Vorzeichen
zurück. Dabei ist bei 'signed_clipped'"signed_clipped""signed_clipped""signed_clipped""signed_clipped" der Ausgabebildtyp
von derselben Anzahl von Bytes wie der Eingabebildtyp (also int1
oder int2), während bei 'signed'"signed""signed""signed""signed" der Ausgabebildtyp die
nächsthöhere Anzahl an Bytes besitzt (also int2 oder int4).
Achtung
Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate
ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben
wird. Weitere Informationen können im Kapitel Filter gefunden
werden.
Ausführungsinformationen
- 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 Kanalebene.
- Automatisch parallelisiert auf Domainebene.
Parameter
ImageImageImageimageimage (input_object) (multichannel-)image(-array) → objectHImageHObjectHObjectHobject (byte / uint2)
Eingabebild.
ImageLaplaceImageLaplaceImageLaplaceimageLaplaceimage_laplace (output_object) (multichannel-)image(-array) → objectHImageHObjectHObjectHobject * (byte / uint2 / int2 / int2 / int4)
Laplace-gefiltertes Ausgabebild.
ResultTypeResultTypeResultTyperesultTyperesult_type (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Typ des Ergebnisbildes, wobei für byte und uint2 der
Absolutbetrag zurückgegeben wird.
Default:
'absolute'
"absolute"
"absolute"
"absolute"
"absolute"
Werteliste:
'absolute'"absolute""absolute""absolute""absolute", 'absolute_binomial'"absolute_binomial""absolute_binomial""absolute_binomial""absolute_binomial", 'signed'"signed""signed""signed""signed", 'signed_binomial'"signed_binomial""signed_binomial""signed_binomial""signed_binomial", 'signed_clipped'"signed_clipped""signed_clipped""signed_clipped""signed_clipped", 'signed_clipped_binomial'"signed_clipped_binomial""signed_clipped_binomial""signed_clipped_binomial""signed_clipped_binomial"
MaskSizeMaskSizeMaskSizemaskSizemask_size (input_control) integer(-array) → HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Filtergröße.
Default:
3
Werteliste:
3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39
FilterMaskFilterMaskFilterMaskfilterMaskfilter_mask (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Filtermaske für den Laplace-Operator
Default:
'n_4'
"n_4"
"n_4"
"n_4"
"n_4"
Werteliste:
'n_4'"n_4""n_4""n_4""n_4", 'n_8'"n_8""n_8""n_8""n_8", 'n_8_isotropic'"n_8_isotropic""n_8_isotropic""n_8_isotropic""n_8_isotropic"
Beispiel (C)
read_image(&Image,"mreut");
laplace(Image,&Laplace,"signed",3,"n_8_isotropic");
zero_crossing(Laplace,&ZeroCrossings);
Ergebnis
Sind die Parameterwerte korrekt, dann liefert laplacelaplaceLaplaceLaplacelaplace den
Wert 2 (
H_MSG_TRUE)
. Das Verhalten bei leerer Eingabe (keine Eingabebilder
vorhanden) lässt sich mittels
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>)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
Nachfolger
zero_crossingzero_crossingZeroCrossingZeroCrossingzero_crossing,
dual_thresholddual_thresholdDualThresholdDualThresholddual_threshold,
thresholdthresholdThresholdThresholdthreshold
Alternativen
diff_of_gaussdiff_of_gaussDiffOfGaussDiffOfGaussdiff_of_gauss,
laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGausslaplace_of_gauss,
derivate_gaussderivate_gaussDerivateGaussDerivateGaussderivate_gauss
Siehe auch
highpass_imagehighpass_imageHighpassImageHighpassImagehighpass_image,
edges_imageedges_imageEdgesImageEdgesImageedges_image
Modul
Foundation