Download AdeptVision User`s Guide

Transcript
Appendix G
ac.refine.vloc( )
ac.refine.vloc( )
The following program is supplied on the Advanced Camera Calibration disk in
the file ADV_USER.V2. If this program is present when the calibration program
is running, it will automatically be used to refine the location of vision locations to
be used in calibration computations. Therefore, all calibration objects must be
close to perfect circles, since this routine uses VFIND.ARC instructions to
determine new centers for them.
.PROGRAM ac.refine.vloc(vloc, error)
; ABSTRACT:Refine the location of the circular blob at "vloc".
;
;
The current blob (region) in the queue (the last one
;
VLOCATEd) is the largest blob in the image that is not
;
touching the edges. This routine assumes that it is a
;
circular disk and refines the location by performing a
;
VFIND.ARC with 100% effort level to get a new center value.
;
;
Errors should be rare, since there is no good recovery.
;
In any case, the vloc should be returned unchanged when
;
refinement is not possible.
;
; INPUT PARM: vloc
Current centroid of blob
;
(already corrected for perspective distortion)
;
; OUTPUT PARM: loc
Revised vision location.
;
error
Pass back an error code
;
(ec.no.disk, for example).
;
; SIDE EFFECTS: The edge strength is changed for the current virtual
;
camera.
;
;* Copyright (c) 1990 by Adept Technology, Inc.
AUTO cx, cy, data[10], ok, radius, range, vb[14], xyr, ys
error = 0
;Do not return any errors.
VGETCAL (ac.cam.virt) vb[]
xyr = vb[vb.xy.ratio]
ys = vb[vb.y.scale]*8
; Approximate radius, assuming the blob is a circle.
radius = SQRT(VFEATURE(vf.area)*xyr/PI)*ys
cx = DX(vloc)
cy = DY(vloc)
range = 20*ys
AdeptVision User’s Guide, Rev. A
;Get radius
331