estimate_foe ( : : UpLeftRowB, UpLeftColB, UpLeftRowE, UpLeftColE, UpRightRowB, UpRightColB, UpRightRowE, UpRightColE, DwLeftRowB, DwLeftColB, DwLeftRowE, DwLeftColE, DwRightRowB, DwRightColB, DwRightRowE, DwRightColE : RowFOE, ColFOE )

Calculate vanishing point from given alignments.

The operator estimate_foe calculates the vanishing point from given alignments. At the vanishing point all lines in the image running parallel to the camera axis in three dimensions meet (with perspective projection). These alignments (each starting and ending point) are expected as input by the procedure. UpLeftRowB - UpLeftColE are alignments running from top left to bottom right. Accordingly UpRightRowB - UpRightColE run from top left to bottom right, DwLeftRowB - DwLeftColE from bottom left to top right and DwRightRowB - DwRightColE from bottom right to top left. Each of these four sets of alignments can also be empty. The routine intersects all lines from UpLeftRowB-UpLeftColE (DwLeftRowB - DwLeftColE) with all lines from UpRightRowB - UpRightColE (DwRightRowB - DwRightColE) and estimates the wanted vanishing point as weighted mean value of all these intersections. The weighting of an intersection is the minimum of the lengths of the intersected lines.

Note: The operator estimate_foe can also be used, for example, for calculating the intersection of straight lines which have been splitted upon segmentation. Either all Up- or all Dw-lines remain unset.


Parameters

UpLeftRowB (input_control)
line.begin.y(-array) -> integer
Line indices of the starting points of the alignments from top left to bottom right.

UpLeftColB (input_control)
line.begin.x(-array) -> integer
Column indices of the starting points of the alignments from top left to bottom right.
Range of values: 0 <= UpLeftColB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpLeftRowE (input_control)
line.end.y(-array) -> integer
Line indices of the ending points of the alignments from top left to bottom right.
Range of values: 0 <= UpLeftRowE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpLeftColE (input_control)
line.end.x(-array) -> integer
Column indices of the ending points of the alignments from top left to bottom right.
Range of values: 0 <= UpLeftColE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpRightRowB (input_control)
line.begin.y(-array) -> integer
Line indices of the starting points of the alignments from top right to bottom left.
Range of values: 0 <= UpRightRowB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpRightColB (input_control)
line.begin.x(-array) -> integer
Column indices of the starting points of the alignments from top right to bottom left.
Range of values: 0 <= UpRightColB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpRightRowE (input_control)
line.end.y(-array) -> integer
Line indices of the ending points of the alignments from top right to bottom left.
Range of values: 0 <= UpRightRowE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

UpRightColE (input_control)
line.end.x(-array) -> integer
Column indices of the ending points of the alignments from top right to bottom left.
Range of values: 0 <= UpRightColE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwLeftRowB (input_control)
line.begin.y(-array) -> integer
Line indices of the starting points of the alignments from bottom left to top right.
Range of values: 0 <= DwLeftRowB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwLeftColB (input_control)
line.begin.x(-array) -> integer
Column indices of the starting points of the alignments from bottom left to top right.
Range of values: 0 <= DwLeftColB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwLeftRowE (input_control)
line.end.y(-array) -> integer
Line indices of the ending points of the alignments from bottom left to top right.
Range of values: 0 <= DwLeftRowE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwLeftColE (input_control)
line.end.x(-array) -> integer
Column indices of the ending points of the alignments from bottom left to top right.
Range of values: 0 <= DwLeftColE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwRightRowB (input_control)
line.begin.y(-array) -> integer
Line indices of the starting points of the alignments from bottom right to top left.
Range of values: 0 <= DwRightRowB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwRightColB (input_control)
line.begin.x(-array) -> integer
Column indices of the starting points of the alignments from bottom right to top left.
Range of values: 0 <= DwRightColB <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwRightRowE (input_control)
line.end.y(-array) -> integer
Line indices of the ending points of the alignments from bottom right to top left.
Range of values: 0 <= DwRightRowE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

DwRightColE (input_control)
line.end.x(-array) -> integer
Column indices of the ending points of the alignments from bottom right to top left.
Range of values: 0 <= DwRightColE <= 512 (lin)
Minimum increment: 1
Recommended increment: 10

RowFOE (output_control)
point.y -> real
Line index of the vanishing point.

ColFOE (output_control)
point.x -> real
Column index of the vanishing point.


Result

The operator estimate_foe returns the value TRUE if the parameters are correctly set. Otherwise an exception is raised.


Possible Predecessors

detect_edges1, split_skeleton2, select_lines1, select_lines2


See also

detect_edges1, select_shape



Copyright © 1996-1997 MVTec Software GmbH