def extendSkeletonTangentsToObjectBorder(image, tangents): extendedTangents = []; for i in range(len(tangents)): l1 = tangents[i][0] l2 = tangents[i][1] lmean = [ (l1[0] + l2[0])/2.0, (l1[1] + l2[1])/2.0 ] # for l1 diff = vf.pDiff(l1, lmean) dist = vf.pLength(diff) delta = [diff[0]/dist, diff[1]/dist] prolonged_l1 = l1 while True: if not( prolonged_l1[0] >= 0 and prolonged_l1[0] < image.shape[1] and prolonged_l1[1] >= 0 and prolonged_l1[1] < image.shape[0]): # point has left the image prolonged_l1 = l1 break pixel = image[int(prolonged_l1[1]),int(prolonged_l1[0])] if pixel[3] < 10: #entering the transparent zone, leaving the object break prolonged_l1 = [prolonged_l1[0] + delta[0], prolonged_l1[1] + delta[1]] prolonged_l1 = (int(prolonged_l1[0]),int(prolonged_l1[1])) diff = vf.pDiff(l2, lmean) dist = vf.pLength(diff) delta = [diff[0]/dist, diff[1]/dist] prolonged_l2 = l2 while True: if not( prolonged_l2[0] >= 0 and prolonged_l2[0] < image.shape[1] and prolonged_l2[1] >= 0 and prolonged_l2[1] < image.shape[0]): # point has left the image prolonged_l2 = l2 #print 'point left the image' break pixel = image[int(prolonged_l2[1]),int(prolonged_l2[0])] if pixel[3] < 10: #entering the transparent zone, leaving the object #print 'found end of object' break prolonged_l2 = [prolonged_l2[0] + delta[0], prolonged_l2[1] + delta[1]] #print prolonged_l2 prolonged_l2 = (int(prolonged_l2[0]),int(prolonged_l2[1])) extendedTangents.append( [ prolonged_l1, prolonged_l2 ] ) #print 'prolong: ', [l1,l2], [ prolonged_l1, prolonged_l2 ] return extendedTangents
def test_length(self): self.assertEqual( vectorFunctions.pLength(self.p1), 0) self.assertEqual( vectorFunctions.pLength(self.p2), 1) self.assertEqual( vectorFunctions.pLength(self.p3), 2) self.assertEqual( vectorFunctions.pLength(self.p5), math.sqrt(8))