Example #1
0
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))