laplacelaplaceLaplaceLaplacelaplace (Operator)
Name
laplacelaplaceLaplaceLaplacelaplace
— Calculate the Laplace operator by using finite differences.
Signature
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
(
Windows only)
Description
laplacelaplaceLaplaceLaplacelaplace
filters the input images ImageImageImageimageimage
using a
Laplace operator. Depending on the parameter FilterMaskFilterMaskFilterMaskfilterMaskfilter_mask
the following approximations of the Laplace operator are used:
- 'n_4'"n_4""n_4""n_4""n_4"
1
1 -4 1
1
- 'n_8'"n_8""n_8""n_8""n_8"
1 1 1
1 -8 1
1 1 1
- 'n_8_isotropic'"n_8_isotropic""n_8_isotropic""n_8_isotropic""n_8_isotropic"
10 22 10
22 -128 22
10 22 10
For the three filter masks the following normalizations of the
resulting gray values is applied, (i.e., by dividing the result by
the given divisor): 'n_4'"n_4""n_4""n_4""n_4" normalization by 1, 'n_8'"n_8""n_8""n_8""n_8",
normalization by 2 and for 'n_8_isotropic'"n_8_isotropic""n_8_isotropic""n_8_isotropic""n_8_isotropic" normalization by 32.
For a Laplace operator with size 3x3, the
corresponding filter is applied directly, while for larger filter
sizes the input image is first smoothed using a Gaussian
filter (see
gauss_imagegauss_imageGaussImageGaussImagegauss_image
) or a binomial filter (see
binomial_filterbinomial_filterBinomialFilterBinomialFilterbinomial_filter
) of size
MaskSizeMaskSizeMaskSizemaskSizemask_size
-2. The Gaussian
filter is selected for the above values of
ResultTypeResultTypeResultTyperesultTyperesult_type
.
Here,
MaskSizeMaskSizeMaskSizemaskSizemask_size
= 5, 7, 9, 11, or 13 must be used. The
binomial filter is selected by appending
'_binomial'"_binomial""_binomial""_binomial""_binomial" to the
above values of
ResultTypeResultTypeResultTyperesultTyperesult_type
. Here,
MaskSizeMaskSizeMaskSizemaskSizemask_size
can be
selected between 5 and 39. Furthermore, it is possible to select
different amounts of smoothing for the column and row direction by
passing two values in
MaskSizeMaskSizeMaskSizemaskSizemask_size
. Here, the first value of
MaskSizeMaskSizeMaskSizemaskSizemask_size
corresponds to the mask width (smoothing in the
column direction), while the second value corresponds to the mask
height (smoothing in the row direction) of the binomial filter.
Therefore,
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)
|
for
MaskSizeMaskSizeMaskSizemaskSizemask_size
>
3 is equivalent to
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)
|
and
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)
|
is equivalent to
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
either returns the absolute value of the Laplace
filtered image (ResultTypeResultTypeResultTyperesultTyperesult_type
= 'absolute'"absolute""absolute""absolute""absolute") in a
byte or uint2 image or the signed result (ResultTypeResultTypeResultTyperesultTyperesult_type
=
'signed'"signed""signed""signed""signed" or 'signed_clipped'"signed_clipped""signed_clipped""signed_clipped""signed_clipped"). Here, the output
image type has the same number of bytes per pixel as the input image
(i.e., int1 or int2) for 'signed_clipped'"signed_clipped""signed_clipped""signed_clipped""signed_clipped", while the output
image has the next larger number of pixels (i.e., int2 or int4) for
'signed'"signed""signed""signed""signed".
Attention
Note that filter operators may return unexpected results if
an image with a reduced domain is used as input. Please refer to the
chapter Filters.
Execution Information
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
- Automatically parallelized on channel level.
- Automatically parallelized on domain level.
Parameters
ImageImageImageimageimage
(input_object) (multichannel-)image(-array) →
objectHImageHObjectHObjectHobject (byte / uint2)
Input image.
ImageLaplaceImageLaplaceImageLaplaceimageLaplaceimage_laplace
(output_object) (multichannel-)image(-array) →
objectHImageHObjectHObjectHobject * (byte / uint2 / int2 / int2 / int4)
Laplace-filtered result image.
ResultTypeResultTypeResultTyperesultTyperesult_type
(input_control) string →
HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Type of the result image, whereas for byte and uint2
the absolute value is used.
Default:
'absolute'
"absolute"
"absolute"
"absolute"
"absolute"
List of values:
'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)
Size of filter mask.
Default:
3
List of values:
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*)
Filter mask used in the Laplace operator
Default:
'n_4'
"n_4"
"n_4"
"n_4"
"n_4"
List of values:
'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"
Example (C)
read_image(&Image,"mreut");
laplace(Image,&Laplace,"signed",3,"n_8_isotropic");
zero_crossing(Laplace,&ZeroCrossings);
Result
laplacelaplaceLaplaceLaplacelaplace
returns 2 (
H_MSG_TRUE)
if all parameters are correct. If the
input is empty the behavior can be set via
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>)
. If necessary, an
exception is raised.
Possible Successors
zero_crossingzero_crossingZeroCrossingZeroCrossingzero_crossing
,
dual_thresholddual_thresholdDualThresholdDualThresholddual_threshold
,
thresholdthresholdThresholdThresholdthreshold
Alternatives
diff_of_gaussdiff_of_gaussDiffOfGaussDiffOfGaussdiff_of_gauss
,
laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGausslaplace_of_gauss
,
derivate_gaussderivate_gaussDerivateGaussDerivateGaussderivate_gauss
See also
highpass_imagehighpass_imageHighpassImageHighpassImagehighpass_image
,
edges_imageedges_imageEdgesImageEdgesImageedges_image
Module
Foundation