points_foerstner ( Image : : SigmaGrad, SigmaInt, SigmaPoints, ThreshInhom, ThreshShape, Smoothing, EliminateDoublets : RowJunctions, ColJunctions, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColArea, CoRRArea, CoRCArea, CoCCArea )
Detect points of interest using the Förstner operator.
points_foerstner extracts significant points from an image.
Significant points are points that differ from their neighborhood,
i.e., points where the image function changes in two dimensions. These
changes occur on the one hand at the intersection of image edges (called
junction points), and on the other hand at places where color or brightness
differs from the surrounding neighborhood (called area points).
The point extraction takes place in two steps: In the first step the point
regions, i.e., the inhomogeneous, isotropic regions, are extracted from the
image. To do so, the smoothed matrix
/ n n \
| --- --- |
| \ 2 \ |
| / Ix,c / Ix,c Iy,c |
| --- --- |
| c=1 c=1 |
M = S * | |
| n n |
| --- --- |
| \ \ 2 |
| / Ix,c Iy,c / Iy,c |
| --- --- |
\ c=1 c=1 /
is calculated, where Ix,c and Iy,c are the
first derivatives of each image channel and S stands for a smoothing. If
Smoothing is 'gauss', the derivatives are computed with
Gaussian derivatives of size SigmaGrad and the smoothing is
performed by a Gaussian of size SigmaInt. If Smoothing
is 'mean', the derivatives are computed with a
3 x 3 Sobel filter (and hence SigmaGrad is ignored)
and the smoothing is performed by a SigmaInt x SigmaInt mean filter.
Then
inhomogeneity = Trace(M)
is the degree of inhomogeneity in the image and
Det(M)
isotropy = 4 * -----------------
Trace(M)*Trace(M)
is the degree of the isotropy of the texture in the image. Image points that
have an inhomogeneity greater or equal to ThreshInhom and at the
same time an isotropy greater or equal to ThreshShape are
subsequently examined further.
In the second step, two optimization functions are calculated for the
resulting points. Essentially, these optimization functions average for each
point the distances to the edge directions (for junction points) and the
gradient directions (for area points) within an observation window around
the point. If Smoothing is 'gauss', the averaging is
performed by a Gaussian of size SigmaPoints, if Smoothing
is 'mean', the averaging is performed by a SigmaPoints x SigmaPoints
mean filter. The local minima of the optimization
functions determine the extracted points. Their subpixel precise position is
returned in (RowJunctions, ColJunctions) and
(RowArea, ColArea).
In addition to their position, for each extracted point the elements
CoRRJunctions, CoRCJunctions, and CoCCJunctions
(and CoRRArea, CoRCArea, and CoCCArea,
respectively) of the corresponding covariance matrix are returned. This
matrix facilitates conclusions about the precision of the calculated point
position. To obtain the actual values, it is necessary to estimate the amount
of noise in the input image and to multiply all components of the covariance
matrix with the variance of the noise. (To estimate the amount of noise,
apply intensity to homgeneous image regions or
plane_deviation to image regions, where the gray values form a
plane. In both cases the amount of noise is returned in the
parameter Deviation.) This is illustrated by the example program
%HALCONROOT%\examples\hdevelop\Filter\Points\points_foerstner_ellipses.dev
.
It lies in the nature of this operator that corners often result in two
distinct points: One junction point, where the edges of the corner actually
meet, and one area point inside the corner. Such doublets will be eliminated
automatically, if EliminateDoublets is 'true'. To do so,
each pair of one junction point and one area point is examined. If the
points lie within each others' observation window of the optimization
function, for both points the precision of the point position is calculated
and the point with the lower precision is rejected. If
EliminateDoublets is 'false', every detected point is
returned.
Attention
Note that only odd values for SigmaInt and
SigmaPoints are allowed, if Smoothing is
'mean'. Even values automatically will be replaced by the
next larger odd value.
Parameters
Image (input_object)
|
(multichannel-)image -> object : byte / uint2 / real
|
|
Input image. |
SigmaGrad (input_control)
|
number -> real / integer
|
|
Amount of smoothing used for the calculation of the
gradient. If Smoothing is 'mean',
SigmaGrad is ignored. |
|
Default value: 1.0 |
|
Suggested values: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0 |
|
Typical range of values: 0.7 <= SigmaGrad <= 50.0 |
Recommended increment: 0.1
|
|
Restriction: SigmaGrad > 0.0 |
SigmaInt (input_control)
|
number -> real / integer
|
|
Amount of smoothing used for the integration of the
gradients. |
|
Default value: 2.0 |
|
Suggested values: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0 |
|
Typical range of values: 0.7 <= SigmaInt <= 50.0 |
Recommended increment: 0.1
|
|
Restriction: SigmaInt > 0.0 |
SigmaPoints (input_control)
|
number -> real / integer
|
|
Amount of smoothing used in the optimization
functions. |
|
Default value: 3.0 |
|
Suggested values: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0 |
|
Typical range of values: 0.7 <= SigmaPoints <= 50.0 |
Recommended increment: 0.1
|
|
Restriction: (SigmaPoints >= SigmaInt) && (SigmaPoints > 0.6) |
ThreshInhom (input_control)
|
number -> real / integer
|
|
Threshold for the segmentation of inhomogeneous image
areas. |
|
Default value: 200 |
|
Suggested values: 50, 100, 200, 500, 1000 |
|
Restriction: ThreshInhom >= 0.0 |
ThreshShape (input_control)
|
real -> real
|
|
Threshold for the segmentation of point areas. |
|
Default value: 0.3 |
|
Suggested values: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7 |
|
Typical range of values: 0.01 <= ThreshShape <= 1 |
|
Minimum increment: 0.01
|
Recommended increment: 0.1
|
|
Restriction: (0.0 <= ThreshShape) && (ThreshShape <= 1.0) |
Smoothing (input_control)
|
string -> string
|
|
Used smoothing method. |
|
Default value: 'gauss' |
|
List of values: 'gauss', 'mean' |
EliminateDoublets (input_control)
|
string -> string
|
|
Elimination of multiply detected points. |
|
Default value: 'false' |
|
List of values: 'false', 'true' |
RowJunctions (output_control)
|
point.y-array -> real
|
|
Row coordinates of the detected junction points. |
ColJunctions (output_control)
|
point.x-array -> real
|
|
Column coordinates of the detected junction points. |
CoRRJunctions (output_control)
|
number-array -> real
|
|
Row part of the covariance matrix of the detected
junction points. |
CoRCJunctions (output_control)
|
number-array -> real
|
|
Mixed part of the covariance matrix of the detected
junction points. |
CoCCJunctions (output_control)
|
number-array -> real
|
|
Column part of the covariance matrix of the detected
junction points. |
RowArea (output_control)
|
point.y-array -> real
|
|
Row coordinates of the detected area points. |
ColArea (output_control)
|
point.x-array -> real
|
|
Column coordinates of the detected area points. |
CoRRArea (output_control)
|
number-array -> real
|
|
Row part of the covariance matrix of the detected
area points. |
CoRCArea (output_control)
|
number-array -> real
|
|
Mixed part of the covariance matrix of the detected
area points. |
CoCCArea (output_control)
|
number-array -> real
|
|
Column part of the covariance matrix of the detected
area points. |
Result
points_foerstner returns 2 (H_MSG_TRUE) if all parameters are correct
and no error occurs during the execution. If the input is empty the
behavior can be set via
set_system('no_object_result',<Result>). If necessary, an
exception handling is raised.
Parallelization Information
points_foerstner is reentrant and processed without parallelization.
Possible Successors
gen_cross_contour_xld,
disp_cross
Alternatives
points_harris
References
W. Förstner, E. Gülch: ``A Fast Operator for Detection and Precise
Location of Distinct Points, Corners and Circular features''. In
Proceedings of the Intercommission Conference on Fast Processing of
Photogrametric Data, Interlaken, pp. 281-305, 1987.
W. Förstner: ``Statistische Verfahren für die automatische
Bildanalyse und ihre Bewertung bei der Objekterkennung und
-vermessung''. Volume 370, Series C, Deutsche Geodätische
Kommission, München, 1991.
W. Förstner: ``A Framework for Low Level Feature
Extraction''. European Conference on Computer Vision, LNCS 802,
pp. 383-394, Springer Verlag, 1994.
C. Fuchs: ``Extraktion polymorpher Bildstrukturen und ihre
topologische und geometrische Gruppierung''. Volume 502, Series C,
Deutsche Geodätische Kommission, München, 1998.
Module
Foundation
Copyright © 1996-2008 MVTec Software GmbH