.PROGRAM lab3() CALL vsetup(grip.loc, camref) VDEF.AOI 2000 = 3, 50, 50, 600, 600, 0 VDISPLAY 1, 1 VPICTURE , 2 VWAIT VWINDOW 2000 VMORPH (, 2) = 2000 VMORPH (, 1) = 2000 FOR i = 1 TO 4 VLOCATE (1, 2) "?", obj.loc IF NOT VFEATURE(1) GOTO 30 x = DX(obj.loc) y = DY(obj.loc) rad = VFEATURE(47) rz = VFEATURE(45) VRULERI (, 2) ruler[] = 1, x, y, rad*1.3, rz+45 IF ruler[2] > 0.8*rad GOTO 20 10 TYPE "Found a square shape" TYPE "Center at", x, y, " Rotated ", rz, " degrees" side = rad/SQRT(2) FOR j = 0 TO 3 angle = rz+j*90-45 dx = side*COS(angle) dy = side*SIN(angle) VFIND.LINE line[] = 1, x+dx, y+dy, side, side*0.5, angle+90 IF line[0] AND (line[5] > 80) THEN TYPE "Line", j+1, " verified" END END GOTO 30 20 TYPE "Found a circular shape" TYPE "Center at", x, y, " Radius=", rad VFIND.ARC arc[] = 1, x, y, rad, rad*0.5 IF arc[0] AND (arc[5] > 90) THEN TYPE "Circle verified" END 30 END .END .PROGRAM vsetup(pic.loc, camref.loc) ; AUTO backlight, cam.virt, threshold, $error, $file LOCAL init, cam.cal[], mm.to.pix[,], mm.to.pmm[,], pix.to.mm[,], pmm.to.mm[,], to.cam backlight = 0 threshold = 125 cam.virt = 1 ;; IF NOT DEFINED(init) THEN init = TRUE ; $file = "d:\camera\area1.dat" ; Directory for camera calibration data $file = "c:\camera\area3.dat" ; For peg picking CALL load.area($file, cam.virt, threshold, backlight, to.cam, cam.cal[], pmm.to.pix[,], pix.to.pmm[,], pmm.to.mm[,], mm.to.pmm[,], $error) END ; ENABLE V.CENTROID, V.2ND.MOMENTS, V.MIN.MAX.RADII, V.SHOW.RECOG, V.SHOW.VERIFY, V.SHOW.BOUNDS, V.SHOW.EDGES, V.PERIMETER ; PARAMETER V.THRESHOLD[1] = threshold PARAMETER V.MAX.AREA[1] = 25000 ; For pegs PARAMETER V.MIN.AREA[1] = 11000 ; For pegs ; PARAMETER V.MAX.AREA[1] = 5000 ; for bar code ; PARAMETER V.MIN.AREA[1] = 500 ; for bar code ; HERE #pic.loc HERE pic.loc DECOMPOSE jt[1] = #pic.loc SET camref.loc = pic.loc:TRANS(,,-jt[3]):TRANS(,,,-jt[4]) ;to.cam ; Take out Z and roll angle from cam.loc ; VDISPLAY 1, 1 ; Graphics overlay of greyscale image RETURN .END .LOCATIONS camref 1 0 0 0 1 0 0 0 1 0 0 0 grip.loc 1 0 0 0 1 0 0 0 1 0 0 0 obj.loc 1 0 0 0 1 0 0 0 1 429.257659912 313.041595459 0 #pic.loc 0 0 0 0 .END .REALS angle 63.792114258 arc[0] -1 arc[1] 0 arc[2] 190.637466431 arc[3] 262.107788086 arc[4] 65 arc[5] 100 arc[6] 1.75 dx 27.636705399 dy 56.145679474 flags 13 i 5 j 4 jt[1] 0 jt[2] 0 jt[3] 0 jt[4] 0 line[0] -1 line[1] 0 line[2] 457.851043701 line[3] 370.762878418 line[4] 150.640838623 line[5] 100 line[6] 0.15625 pix.to.pmm[0,0] 0.210985005 pix.to.pmm[0,1] 0 pix.to.pmm[0,2] 0 pix.to.pmm[1,0] 0 pix.to.pmm[1,1] 0.210874707 pix.to.pmm[1,2] 0 pix.to.pmm[2,0] 0 pix.to.pmm[2,1] 0 pix.to.pmm[2,2] 1 pmm.to.pix[0,0] 4.739673138 pmm.to.pix[0,1] 0 pmm.to.pix[0,2] 0 pmm.to.pix[1,0] 0 pmm.to.pix[1,1] 4.742152691 pmm.to.pix[1,2] 0 pmm.to.pix[2,0] 0 pmm.to.pix[2,1] 0 pmm.to.pix[2,2] 1 rad 88.5 ruler[0] 1 ruler[1] 0 ruler[2] 64.442337036 ruler[3] 63.37935257 ruler[4] 68.5 ruler[5] 95.5 ruler[6] 20.5 ruler[7] 21.5 ruler[8] 24.5 ruler[9] 25.5 ruler[10] 28.5 ruler[11] 29.5 ruler[12] 30.5 ruler[13] 31.5 ruler[14] 32.5 ruler[15] 33.5 ruler[16] 34.5 ruler[17] 35.5 ruler[18] 36.5 ruler[19] 37.5 ruler[20] 38.5 ruler[21] 39.5 ruler[22] 40.5 ruler[23] 41.5 ruler[24] 44.5 ruler[25] 45.5 ruler[26] 46.5 ruler[27] 47.5 ruler[28] 48.5 ruler[29] 49.5 ruler[30] 50.5 ruler[31] 51.5 ruler[32] 52.5 ruler[33] 53.5 ruler[34] 54.5 ruler[35] 55.5 ruler[36] 56.5 ruler[37] 57.5 ruler[38] 58.5 ruler[39] 59.5 ruler[40] 60.5 ruler[41] 61.5 ruler[42] 62.5 ruler[43] 63.5 ruler[44] 66.5 ruler[45] 67.5 ruler[46] 119.5 rz -161.207885742 side 62.578948975 x 429.257659912 y 313.041595459 .END .DOUBLES .END .STRINGS .END