def __calculate_perimeter_scoring():
    """Return a 512 element vector which gives the perimeter given surrounding pts
    
    """
    #
    # This is the array from the paper - a 256 - element array leaving out
    # the center point. The first value is the index, the second, the perimeter
    #
    prashker = np.array([                                                        
        [0 ,4    ],[32,4    ],[64,3    ],[96 ,1.414],[128,4    ],[160,4    ],[192,1.414],[224,2.828],
        [1 ,4    ],[33,4    ],[65,3    ],[97 ,1.414],[129,4    ],[161,4    ],[193,3    ],[225,3    ],
        [2 ,3    ],[34,3    ],[66,2    ],[98 ,2    ],[130,3    ],[162,3    ],[194,2    ],[226,2    ],
        [3 ,1.414],[35,1.414],[67,2    ],[99 ,2    ],[131,3    ],[163,3    ],[195,2    ],[227,2    ],
        [4 ,4    ],[36,4    ],[68,3    ],[100,3    ],[132,4    ],[164,4    ],[196,1.414],[228,3    ],
        [5 ,4    ],[37,4    ],[69,3    ],[101,3    ],[133,4    ],[165,4    ],[197,3    ],[229,3    ],
        [6 ,1.414],[38,3    ],[70,2    ],[102,2    ],[134,1.414],[166,3    ],[198,2    ],[230,2    ],
        [7 ,2.828],[39,3    ],[71,2    ],[103,2    ],[135,3    ],[167,3    ],[199,2    ],[231,1.414],
        [8 ,3    ],[40,1.414],[72,2    ],[104,2    ],[136,3    ],[168,1.414],[200,1.414],[232,1.414],
        [9 ,1.414],[41,2.828],[73,1.414],[105,1.414],[137,3    ],[169,3    ],[201,1.414],[233,1.414],
        [10,2    ],[42,1.414],[74,1    ],[106,1    ],[138,2    ],[170,2    ],[202,1    ],[234,1.414],
        [11,2    ],[43,1.414],[75,1    ],[107,1    ],[139,2    ],[171,2    ],[203,1    ],[235,1    ],
        [12,3    ],[44,3    ],[76,2    ],[108,2    ],[140,3    ],[172,3    ],[204,2    ],[236,2    ],
        [13,1.414],[45,3    ],[77,2    ],[109,2    ],[141,3    ],[173,3    ],[205,1.414],[237,1.414],
        [14,1.414],[46,1.414],[78,1    ],[110,1    ],[142,2    ],[174,1.414],[206,2    ],[238,1    ],
        [15,1.414],[47,1.414],[79,1.414],[111,1    ],[143,2    ],[175,1.414],[207,1    ],[239,1    ],
        [16,3    ],[48,3    ],[80,2    ],[112,1.414],[144,1.414],[176,1.414],[208,2    ],[240,1.414],
        [17,3    ],[49,3    ],[81,2    ],[113,2    ],[145,3    ],[177,3    ],[209,2    ],[241,2    ],
        [18,2    ],[50,2    ],[82,1    ],[114,1    ],[146,1.414],[178,2    ],[210,1    ],[242,1.414],
        [19,1.414],[51,2    ],[83,1    ],[115,2    ],[147,1.414],[179,1.414],[211,1    ],[243,1    ],
        [20,1.414],[52,3    ],[84,1.414],[116,1.414],[148,2.828],[180,3    ],[212,1.414],[244,1.414],
        [21,1.414],[53,3    ],[85,2    ],[117,1.414],[149,3    ],[181,3    ],[213,2    ],[245,1.414],
        [22,2    ],[54,2    ],[86,1    ],[118,1    ],[150,1.414],[182,2    ],[214,1    ],[246,1    ],
        [23,1.414],[55,2    ],[87,1.414],[119,1    ],[151,1.414],[183,1.414],[215,1    ],[247,1    ],
        [24,2    ],[56,2    ],[88,1    ],[120,1    ],[152,2    ],[184,2    ],[216,1    ],[248,1    ],
        [25,2    ],[57,2    ],[89,1    ],[121,1.414],[153,2    ],[185,2    ],[217,1    ],[249,1    ],
        [26,1    ],[58,1    ],[90,0    ],[122,0    ],[154,1    ],[186,2    ],[218,0    ],[250,0    ],
        [27,1    ],[59,1.414],[91,0    ],[123,0    ],[155,1    ],[187,1    ],[219,0    ],[251,0    ],
        [28,2    ],[60,2    ],[92,1    ],[124,1    ],[156,2    ],[188,2    ],[220,1.414],[252,1    ],
        [29,2    ],[61,2    ],[93,2    ],[125,1    ],[157,2    ],[189,1.414],[221,1    ],[253,1    ],
        [30,1    ],[62,1    ],[94,0    ],[126,0    ],[158,1.414],[190,1    ],[222,0    ],[254,0    ],
        [31,1    ],[63,1    ],[95,0    ],[127,0    ],[159,1    ],[191,1    ],[223,0    ],[255,0]])
    score = np.zeros((512,))
    i = np.zeros((prashker.shape[0]),int)
    for j in range(4): # 1,2,4,8
        i = i+((prashker[:,0].astype(int) // 2**j)%2)*2**j
    i = i+16
    for j in range(4,8):
        i = i+((prashker[:,0].astype(int) // 2**j)%2)*2**(j+1)
    score[i.astype(int)] = prashker[:,1]
    return score
def __calculate_perimeter_scoring ( ) : prashker = np . array ( [ [ 0 , 4 ] , [ 32 , 4 ] , [ 64 , 3 ] , [ 96 , 1.414 ] , [ 128 , 4 ] , [ 160 , 4 ] , [ 192 , 1.414 ] , [ 224 , 2.828 ] , [ 1 , 4 ] , [ 33 , 4 ] , [ 65 , 3 ] , [ 97 , 1.414 ] , [ 129 , 4 ] , [ 161 , 4 ] , [ 193 , 3 ] , [ 225 , 3 ] , [ 2 , 3 ] , [ 34 , 3 ] , [ 66 , 2 ] , [ 98 , 2 ] , [ 130 , 3 ] , [ 162 , 3 ] , [ 194 , 2 ] , [ 226 , 2 ] , [ 3 , 1.414 ] , [ 35 , 1.414 ] , [ 67 , 2 ] , [ 99 , 2 ] , [ 131 , 3 ] , [ 163 , 3 ] , [ 195 , 2 ] , [ 227 , 2 ] , [ 4 , 4 ] , [ 36 , 4 ] , [ 68 , 3 ] , [ 100 , 3 ] , [ 132 , 4 ] , [ 164 , 4 ] , [ 196 , 1.414 ] , [ 228 , 3 ] , [ 5 , 4 ] , [ 37 , 4 ] , [ 69 , 3 ] , [ 101 , 3 ] , [ 133 , 4 ] , [ 165 , 4 ] , [ 197 , 3 ] , [ 229 , 3 ] , [ 6 , 1.414 ] , [ 38 , 3 ] , [ 70 , 2 ] , [ 102 , 2 ] , [ 134 , 1.414 ] , [ 166 , 3 ] , [ 198 , 2 ] , [ 230 , 2 ] , [ 7 , 2.828 ] , [ 39 , 3 ] , [ 71 , 2 ] , [ 103 , 2 ] , [ 135 , 3 ] , [ 167 , 3 ] , [ 199 , 2 ] , [ 231 , 1.414 ] , [ 8 , 3 ] , [ 40 , 1.414 ] , [ 72 , 2 ] , [ 104 , 2 ] , [ 136 , 3 ] , [ 168 , 1.414 ] , [ 200 , 1.414 ] , [ 232 , 1.414 ] , [ 9 , 1.414 ] , [ 41 , 2.828 ] , [ 73 , 1.414 ] , [ 105 , 1.414 ] , [ 137 , 3 ] , [ 169 , 3 ] , [ 201 , 1.414 ] , [ 233 , 1.414 ] , [ 10 , 2 ] , [ 42 , 1.414 ] , [ 74 , 1 ] , [ 106 , 1 ] , [ 138 , 2 ] , [ 170 , 2 ] , [ 202 , 1 ] , [ 234 , 1.414 ] , [ 11 , 2 ] , [ 43 , 1.414 ] , [ 75 , 1 ] , [ 107 , 1 ] , [ 139 , 2 ] , [ 171 , 2 ] , [ 203 , 1 ] , [ 235 , 1 ] , [ 12 , 3 ] , [ 44 , 3 ] , [ 76 , 2 ] , [ 108 , 2 ] , [ 140 , 3 ] , [ 172 , 3 ] , [ 204 , 2 ] , [ 236 , 2 ] , [ 13 , 1.414 ] , [ 45 , 3 ] , [ 77 , 2 ] , [ 109 , 2 ] , [ 141 , 3 ] , [ 173 , 3 ] , [ 205 , 1.414 ] , [ 237 , 1.414 ] , [ 14 , 1.414 ] , [ 46 , 1.414 ] , [ 78 , 1 ] , [ 110 , 1 ] , [ 142 , 2 ] , [ 174 , 1.414 ] , [ 206 , 2 ] , [ 238 , 1 ] , [ 15 , 1.414 ] , [ 47 , 1.414 ] , [ 79 , 1.414 ] , [ 111 , 1 ] , [ 143 , 2 ] , [ 175 , 1.414 ] , [ 207 , 1 ] , [ 239 , 1 ] , [ 16 , 3 ] , [ 48 , 3 ] , [ 80 , 2 ] , [ 112 , 1.414 ] , [ 144 , 1.414 ] , [ 176 , 1.414 ] , [ 208 , 2 ] , [ 240 , 1.414 ] , [ 17 , 3 ] , [ 49 , 3 ] , [ 81 , 2 ] , [ 113 , 2 ] , [ 145 , 3 ] , [ 177 , 3 ] , [ 209 , 2 ] , [ 241 , 2 ] , [ 18 , 2 ] , [ 50 , 2 ] , [ 82 , 1 ] , [ 114 , 1 ] , [ 146 , 1.414 ] , [ 178 , 2 ] , [ 210 , 1 ] , [ 242 , 1.414 ] , [ 19 , 1.414 ] , [ 51 , 2 ] , [ 83 , 1 ] , [ 115 , 2 ] , [ 147 , 1.414 ] , [ 179 , 1.414 ] , [ 211 , 1 ] , [ 243 , 1 ] , [ 20 , 1.414 ] , [ 52 , 3 ] , [ 84 , 1.414 ] , [ 116 , 1.414 ] , [ 148 , 2.828 ] , [ 180 , 3 ] , [ 212 , 1.414 ] , [ 244 , 1.414 ] , [ 21 , 1.414 ] , [ 53 , 3 ] , [ 85 , 2 ] , [ 117 , 1.414 ] , [ 149 , 3 ] , [ 181 , 3 ] , [ 213 , 2 ] , [ 245 , 1.414 ] , [ 22 , 2 ] , [ 54 , 2 ] , [ 86 , 1 ] , [ 118 , 1 ] , [ 150 , 1.414 ] , [ 182 , 2 ] , [ 214 , 1 ] , [ 246 , 1 ] , [ 23 , 1.414 ] , [ 55 , 2 ] , [ 87 , 1.414 ] , [ 119 , 1 ] , [ 151 , 1.414 ] , [ 183 , 1.414 ] , [ 215 , 1 ] , [ 247 , 1 ] , [ 24 , 2 ] , [ 56 , 2 ] , [ 88 , 1 ] , [ 120 , 1 ] , [ 152 , 2 ] , [ 184 , 2 ] , [ 216 , 1 ] , [ 248 , 1 ] , [ 25 , 2 ] , [ 57 , 2 ] , [ 89 , 1 ] , [ 121 , 1.414 ] , [ 153 , 2 ] , [ 185 , 2 ] , [ 217 , 1 ] , [ 249 , 1 ] , [ 26 , 1 ] , [ 58 , 1 ] , [ 90 , 0 ] , [ 122 , 0 ] , [ 154 , 1 ] , [ 186 , 2 ] , [ 218 , 0 ] , [ 250 , 0 ] , [ 27 , 1 ] , [ 59 , 1.414 ] , [ 91 , 0 ] , [ 123 , 0 ] , [ 155 , 1 ] , [ 187 , 1 ] , [ 219 , 0 ] , [ 251 , 0 ] , [ 28 , 2 ] , [ 60 , 2 ] , [ 92 , 1 ] , [ 124 , 1 ] , [ 156 , 2 ] , [ 188 , 2 ] , [ 220 , 1.414 ] , [ 252 , 1 ] , [ 29 , 2 ] , [ 61 , 2 ] , [ 93 , 2 ] , [ 125 , 1 ] , [ 157 , 2 ] , [ 189 , 1.414 ] , [ 221 , 1 ] , [ 253 , 1 ] , [ 30 , 1 ] , [ 62 , 1 ] , [ 94 , 0 ] , [ 126 , 0 ] , [ 158 , 1.414 ] , [ 190 , 1 ] , [ 222 , 0 ] , [ 254 , 0 ] , [ 31 , 1 ] , [ 63 , 1 ] , [ 95 , 0 ] , [ 127 , 0 ] , [ 159 , 1 ] , [ 191 , 1 ] , [ 223 , 0 ] , [ 255 , 0 ] ] ) score = np . zeros ( ( 512 , ) ) i = np . zeros ( ( prashker . shape [ 0 ] ) , int ) for j in range ( 4 ) : i = i + ( ( prashker [ : , 0 ] . astype ( int ) // 2 ** j ) % 2 ) * 2 ** j i = i + 16 for j in range ( 4 , 8 ) : i = i + ( ( prashker [ : , 0 ] . astype ( int ) // 2 ** j ) % 2 ) * 2 ** ( j + 1 ) score [ i . astype ( int ) ] = prashker [ : , 1 ] return score
Return a 512 element vector which gives the perimeter given surrounding pts