function numguess=evalimg(arg); %takes an image of a single number outputed from parse.m and outputs an %array of length 10 %representing the variances for this image as compared to each of the %"average" model digits. The lowest variance is the number we guess it is. % the 'average' numbers represent multiple types of each number. arg1 = parse2std(arg); arggrid=graygrid(arg1); %averages here based multiple font types deemed similiar by our research team average_zero_a=[ 207.4000 222.3600 165.9200 223.3800 218.9600; 218.6200 29.5800 0 18.3600 214.8800; 174.0800 0 0 0 170.6800; 224.4000 37.4000 0 33.6600 225.0800; 197.2000 224.4000 162.8600 225.7600 197.8800]; average_zero_b=[ 51.0000 191.7600 216.2400 197.8800 234.6000; 193.8000 183.6000 44.8800 20.4000 185.6400; 234.6000 44.8800 0 83.6400 242.7600; 191.7600 4.0800 59.1600 226.4400 173.4000; 242.7600 204.0000 238.6800 171.3600 16.3200]; average_one_a=[ 201.1667 211.3667 236.3000 120.7000 14.7333; 27.7667 30.0333 218.7333 42.5000 0; 0 2.8333 224.9667 42.5000 0; 14.7333 21.5333 228.3667 58.3667 11.9000; 172.8333 190.9667 241.4000 211.9333 176.8000]; average_one_b=[ 122.4000 136.6800 163.2000 212.1600 220.3200; 143.8200 113.2200 97.9200 134.6400 172.3800; 13.2600 0 0 86.7000 168.3000; 0 0 0 86.7000 168.3000; 0 0 9.1800 95.8800 210.1200]; average_one_c=[ 56.1000 127.5000 186.1500 239.7000 234.6000; 35.7000 91.8000 102.0000 244.8000 91.8000; 20.4000 84.1500 178.5000 155.5500 5.1000; 71.4000 137.7000 150.4500 45.9000 0; 204.0000 206.5500 112.2000 76.5000 30.6000]; average_one_d=[ 10.2000 45.9000 127.5000 224.4000 249.9000; 214.2000 239.7000 229.5000 168.3000 137.7000; 173.4000 51.0000 96.9000 142.8000 66.3000; 0 5.1000 117.3000 163.2000 25.5000; 30.6000 107.1000 224.4000 122.4000 0]; average_two_a=[ 161.1600 236.6400 195.8400 250.9200 136.6800; 169.3200 153.0000 28.5600 189.7200 177.4800; 112.2000 173.4000 204.0000 230.5200 104.0400; 132.6000 212.1600 167.2800 136.6800 183.6000; 218.2800 201.9600 187.6800 204.0000 191.7600]; average_two_b=[ 0 191.2500 232.0500 175.9500 239.7000; 0 145.3500 91.8000 91.8000 242.2500; 5.1000 53.5500 153.0000 249.9000 132.6000; 96.9000 219.3000 198.9000 104.5500 61.2000; 249.9000 229.5000 204.0000 232.0500 170.8500]; average_two_c=[ 217.6000 221.1700 176.9700 228.1400 199.4100; 150.9600 45.3900 9.1800 109.8200 200.2600; 7.9900 35.5300 154.8700 235.4500 129.5400; 70.3800 213.8600 211.4800 80.5800 40.9700; 234.0900 241.0600 190.9100 179.8600 205.8700]; average_three_a =[ 227.1818 224.4000 172.9364 229.5000 219.7636; 91.8000 44.0455 51.9273 147.4364 235.0636; 6.9545 116.3727 211.8818 235.0636 237.8455; 73.2545 24.1091 0 32.9182 229.9636; 226.2545 204.9273 165.5182 219.7636 238.3091]; average_three_b =[ 204.0000 220.3200 222.3600 250.9200 218.2800; 79.5600 91.8000 210.1200 220.3200 55.0800; 77.5200 204.0000 212.1600 199.9200 124.4400; 34.6800 40.8000 85.6800 167.2800 191.7600; 212.1600 212.1600 201.9600 197.8800 112.2000]; average_three_c =[ 0 117.3000 244.8000 181.0500 252.4500; 0 102.0000 183.6000 198.9000 244.8000; 0 130.0500 170.8500 221.8500 168.3000; 84.1500 0 40.8000 186.1500 178.5000; 234.6000 183.6000 211.6500 219.3000 56.1000]; average_four_a =[ 0 81.6000 230.5200 247.8600 25.5000; 74.4600 235.6200 145.8600 249.9000 10.2000; 240.7200 166.2600 25.5000 246.8400 20.4000; 243.7800 213.1800 213.1800 249.9000 215.2200; 42.8400 51.0000 59.1600 242.7600 59.1600]; average_four_b =[ 5.4923 66.6923 179.6769 225.1846 78.4615; 53.3538 196.1538 181.2462 214.9846 42.3692; 196.9385 200.8615 78.4615 208.7077 66.6923; 230.6769 233.0308 234.6000 249.5077 232.2462; 32.9538 105.9231 179.6769 233.0308 185.1692]; average_four_c =[ 38.2500 79.0500 186.1500 153.0000 48.4500; 68.8500 160.6500 168.3000 142.8000 91.8000; 188.7000 175.9500 91.8000 237.1500 127.5000; 232.0500 204.0000 191.2500 229.5000 147.9000; 63.7500 96.9000 165.7500 147.9000 68.8500]; average_four_d =[ 0 13.6000 102.0000 224.4000 251.6000; 44.2000 166.6000 238.0000 248.2000 197.2000; 183.6000 197.2000 125.8000 238.0000 122.4000; 251.6000 231.2000 238.0000 241.4000 231.2000; 34.0000 115.6000 193.8000 132.6000 27.2000]; average_five_a = [ 174.1846 214.2000 176.5385 174.9692 175.7538; 199.2923 185.1692 147.5077 131.0308 62.7692; 131.0308 147.5077 130.2462 176.5385 225.9692; 83.1692 10.2000 3.9231 47.0769 213.4154; 232.2462 204.0000 173.4000 226.7538 200.8615]; average_five_b =[ 117.3000 237.5143 197.4429 193.0714 193.0714; 185.0571 222.2143 152.2714 126.7714 56.1000; 104.9143 129.6857 123.8571 176.3143 214.2000; 75.7714 29.8714 13.1143 69.2143 224.4000; 219.3000 212.7429 195.2571 238.2429 182.1429]; average_five_c =[ 37.4000 141.1000 246.5000 229.5000 214.2000; 90.1000 183.6000 170.0000 86.7000 13.6000; 66.3000 117.3000 166.6000 185.3000 42.5000; 52.7000 34.0000 164.9000 197.2000 37.4000; 210.8000 212.5000 234.6000 90.1000 6.8000]; average_six_a =[ 195.5000 235.4500 180.2000 223.5500 238.0000; 243.9500 119.0000 93.5000 91.8000 109.6500; 246.5000 215.9000 180.2000 229.5000 208.2500; 226.9500 40.8000 1.7000 61.2000 213.3500; 212.5000 232.0500 177.6500 228.6500 199.7500]; average_six_b =[ 83.0571 206.1857 235.3286 198.9000 162.4714; 228.0429 217.8429 143.5286 96.9000 29.8714; 243.3429 187.9714 160.2857 207.6429 225.1286; 214.2000 21.8571 1.4571 45.9000 232.4143; 226.5857 225.8571 169.7571 227.3143 220.0286]; average_six_c =[ 11.4750 107.1000 212.9250 214.2000 130.0500; 94.3500 229.5000 192.5250 82.8750 11.4750; 244.8000 219.3000 198.9000 195.0750 108.3750; 218.0250 53.5500 89.2500 151.7250 112.2000; 219.3000 214.2000 210.3750 181.0500 93.0750]; average_seven_a = [ 242.6143 204.7286 201.8143 220.7571 239.7000; 131.1429 12.3857 53.1857 204.7286 155.9143; 14.5714 32.7857 165.3857 176.3143 38.6143; 26.2286 107.8286 190.1571 78.6857 4.3714; 69.9429 142.8000 126.0429 40.8000 0]; average_seven_b = [ 160.2857 160.2857 160.2857 202.5429 252.0857; 0 0 46.6286 217.1143 171.9429; 0 21.8571 202.5429 183.6000 24.7714; 0 123.8571 202.5429 48.0857 0; 32.0571 214.2000 115.1143 24.7714 0]; average_seven_c = [ 226.9500 194.6500 191.2500 208.2500 237.1500; 97.7500 11.9000 42.5000 184.4500 181.0500; 5.1000 11.0500 130.0500 191.2500 70.5500; 0 55.2500 193.8000 111.3500 12.7500; 0 111.3500 187.0000 43.3500 0]; average_seven_d = [ 190.8857 217.1143 199.6286 230.2286 236.0571; 103.4571 37.8857 116.5714 224.4000 90.3429; 13.1143 104.9143 237.5143 119.4857 4.3714; 91.8000 212.7429 122.4000 5.8286 0; 224.4000 153.0000 29.1429 0 0]; average_eight_a =[ 247.8600 182.5800 125.4600 195.8400 241.7400; 251.9400 136.6800 45.9000 145.8600 246.8400; 211.1400 253.9800 220.3200 248.8800 190.7400; 239.7000 67.3200 10.2000 77.5200 245.8200; 241.7400 202.9800 129.5400 191.7600 244.8000]; average_eight_b = [ 17.8500 137.7000 232.0500 209.1000 234.6000; 25.5000 155.5500 201.4500 219.3000 209.1000; 160.6500 249.9000 234.6000 198.9000 48.4500; 232.0500 94.3500 86.7000 181.0500 30.6000; 244.8000 196.3500 211.6500 168.3000 20.4000]; average_nine_a =[ 28.5600 167.2800 232.5600 212.1600 246.8400; 99.9600 212.1600 138.7200 134.6400 216.2400; 97.9200 214.2000 204.0000 218.2800 175.4400; 20.4000 79.5600 197.8800 216.2400 81.6000; 144.8400 208.0800 206.0400 87.7200 16.3200]; average_nine_b = [ 236.0571 222.9429 166.1143 230.2286 234.6000; 225.8571 29.1429 5.8286 37.8857 215.6571; 222.9429 218.5714 167.5714 224.4000 246.2571; 106.3714 109.2857 109.2857 110.7429 247.7143; 243.3429 206.9143 171.9429 234.6000 202.5429]; average_nine_c = [ 222.8308 233.0308 177.3231 229.1077 232.2462; 231.4615 49.4308 0.7846 23.5385 221.2615; 201.6462 218.9077 171.8308 219.6923 246.3692; 25.1077 102.7846 142.0154 226.7538 225.9692; 169.4769 192.2308 229.1077 212.6308 69.0462]; average_nine_d = [ 201.9600 212.1600 183.6000 218.2800 248.8800; 236.6400 77.5200 48.9600 55.0800 201.9600; 224.4000 222.3600 179.5200 197.8800 208.0800; 28.5600 85.6800 189.7200 218.2800 102.0000; 28.5600 179.5200 224.4000 144.8400 63.2400]; variancearray=[ sum(sum(((arggrid-average_zero_a)/255).^2)) sum(sum(((arggrid-average_zero_b)/255).^2)) sum(sum(((arggrid-average_one_a)/255).^2)) sum(sum(((arggrid-average_one_b)/255).^2)) sum(sum(((arggrid-average_one_c)/255).^2)) sum(sum(((arggrid-average_one_d)/255).^2)) sum(sum(((arggrid-average_two_a)/255).^2)) sum(sum(((arggrid-average_two_b)/255).^2)) sum(sum(((arggrid-average_two_c)/255).^2)) sum(sum(((arggrid-average_three_a)/255).^2)) sum(sum(((arggrid-average_three_b)/255).^2)) sum(sum(((arggrid-average_three_c)/255).^2)) sum(sum(((arggrid-average_four_a)/255).^2)) sum(sum(((arggrid-average_four_b)/255).^2)) sum(sum(((arggrid-average_four_c)/255).^2)) sum(sum(((arggrid-average_four_d)/255).^2)) sum(sum(((arggrid-average_five_a)/255).^2)) sum(sum(((arggrid-average_five_b)/255).^2)) sum(sum(((arggrid-average_five_c)/255).^2)) sum(sum(((arggrid-average_six_a)/255).^2)) sum(sum(((arggrid-average_six_b)/255).^2)) sum(sum(((arggrid-average_six_c)/255).^2)) sum(sum(((arggrid-average_seven_a)/255).^2)) sum(sum(((arggrid-average_seven_b)/255).^2)) sum(sum(((arggrid-average_seven_c)/255).^2)) sum(sum(((arggrid-average_seven_d)/255).^2)) sum(sum(((arggrid-average_eight_a)/255).^2)) sum(sum(((arggrid-average_eight_b)/255).^2)) sum(sum(((arggrid-average_nine_a)/255).^2)) sum(sum(((arggrid-average_nine_b)/255).^2)) sum(sum(((arggrid-average_nine_c)/255).^2)) sum(sum(((arggrid-average_nine_d)/255).^2))]; % create array to pick out actual number from index numarray = [0 0 1 1 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 7 7 7 7 8 8 9 9 9 9]; [variancearray numarray'] [theminval,theminindex]=min(variancearray); %theminindex contains the index of the lowest value % Add hole detection algorithm ... va = variancearray'; arg1 = parse2thin(arg); arg1 = bwmorph(arg1,'spur',Inf); % check for number of holes hole = abs(bweuler(arg1)-1) % if 2 holes, answer is 8 if (hole == 2) theminnum = 8; theminval = va(27); % if 1 hole, then crop top, check holes, crop bottom, check holes % this divides into group [0] [2,6] [4 9] elseif (hole == 1) [theminval,theminidx] = min([va(1:2) va(7:9) va(13:14) va(16) va(20:22) va(29:32)]); hole1array = [0 0 2 2 2 4 4 4 6 6 6 9 9 9 9]; if (theminval < 1) theminnum = hole1array(theminidx); %********big error fixed TWS else holetop = abs(bweuler(arg1(7:25,:))-1) holebottom = abs(bweuler(arg1(1:19,:))-1) % if group 0, answer is 0 if (not(holetop) & not(holebottom)) theminnum = 0; theminval = min([va(1) va(2)]); % compare 2 and 6, answer is one with lower variance elseif (holetop & not(holebottom)) [theminval tmpidx] = min([va(7:9) va(20:22)]); array26 = [2 2 2 6 6 6]; theminnum = array26(tmpidx); % compare 4 and 9, answer is one with lower variance elseif (not(holetop) & holebottom) [theminval tmpidx] = min([va(13:16) va(29:32)]); array49 = [4 4 4 4 9 9 9 9]; theminnum = array49(tmpidx); % if 'error' occurs choose from original variances else theminnum = hole1array(theminidx); end end % if 0 holes, check all numbers with 0 holes elseif (hole == 0) [theminval,tmpidx]= min([va(3:12) va(15) va(17:19) va(23:26)]); hole0array = [1 1 1 1 2 2 2 3 3 3 4 5 5 5 7 7 7 7]; theminnum = hole0array(tmpidx); % if more than 2 holes detected, just choose min variance else [theminval,theminindex]=min(variancearray); theminnum = numarray(theminindex); end numguess = [theminnum; theminval];