DECLARE SUB filter () DECLARE SUB smooth () DECLARE SUB copy2to1 () DECLARE SUB setpal () DECLARE SUB showpic1 () DEFINT I-N 'Set up 'ragged diamond', smooth it 'then use 3x3 filter to find the edge SCREEN 12 VIEW (160, 80)-(480, 400), , 12 WINDOW (0, 0)-(64, 64) CONST grey0 = 65536 + 256 + 1 DIM SHARED pic1(63, 63) AS INTEGER, pic2(63, 63) AS INTEGER CONST k1 = 1024 CONST c1 = k1 / 16 setpal RANDOMIZE TIMER DIM SHARED filt(-1 TO 1, -1 TO 1) 'define 3x3 filter FOR i = -1 TO 1 FOR j = -1 TO 1 READ filt(i, j) NEXT NEXT DATA 0,-1, 0 DATA -1, 4,-1 DATA 0,-1, 0 FOR i = 0 TO 63 'make 'ragged diamond' FOR j = 0 TO 63 k = ABS(i - 32) + ABS(j - 32) IF k + 12 * RND < 24 THEN 'change numbers to change image pic1(i, j) = 1 ELSE pic1(i, j) = 0 END IF NEXT NEXT showpic1 FOR n = 1 TO 2 'smooth it twice LOCATE 3, 1 PRINT "pass "; n smooth copy2to1 showpic1 NEXT LOCATE 3, 1 PRINT "Find edge" filter 'use 3x3 filter to find edges copy2to1 showpic1 SUB copy2to1 FOR i = 0 TO 63 FOR j = 0 TO 63 pic1(i, j) = pic2(i, j) NEXT NEXT END SUB SUB filter FOR i = 1 TO 62 'For each interior point FOR j = 1 TO 62 m = 0 'evaluate 3x3 correlation FOR k = -1 TO 1 FOR l = -1 TO 1 m = m + pic1(i + k, j + l) * filt(k, l) NEXT NEXT IF m > 0 THEN pic2(i, j) = 1 'Set corresponding pont in second array ELSE pic2(i, j) = 0 END IF NEXT NEXT END SUB SUB setpal 'Make a set of grey levels FOR i = 1 TO 15 PALETTE i, 4 * i * grey0 NEXT END SUB SUB showpic1 FOR i = 0 TO 63 FOR j = 0 TO 63 LINE (i, j)-STEP(1, 1), 15 * pic1(i, j), BF NEXT NEXT END SUB SUB smooth FOR i = 1 TO 62 FOR j = 1 TO 62 m = 0 FOR k = i - 1 TO i + 1 FOR l = j - 1 TO j + 1 m = m + pic1(k, l) NEXT NEXT IF m > 4 THEN pic2(i, j) = 1 ELSE pic2(i, j) = 0 END IF NEXT NEXT END SUB