Exemple #1
0
def findMaxGradientValueOnNormal(gradient_magnitude, gradient_orientation, p1, p2, normal_orientation):
    #Get integer coordinates on the straight line between p1 and p2
	pts = SIGBTools.getLineCoordinates(p1, p2)
	values = gradient_magnitude[pts[:,1],pts[:,0]]
	#orientations = gradient_orientation[pts[:,1],pts[:,0]]
	#normal_angle = np.arctan2(normal_orientation[1], normal_orientation[0]) * (180 / math.pi)

	# orientation_difference = abs(orientations - normal_angle)
	# print orientation_difference[0:10]
	# max_index = 0 #np.argmax(values)
	# max_value = 0
	# for index in range(len(values)):
	# 	if orientation_difference[index] < 20:
	# 		if values[index] > max_value:
	# 			max_index = index
	# 			max_value = values[index]
	#print orientations[max_index], normal_angle
	max_index = np.argmax(values)
	return pts[max_index]
def findMaxGradientValueOnNormal(gm, gd,resolution,p1,p2):
	pts = SIGBTools.getLineCoordinates(p1, p2)
	temp=pts/resolution
	normVal=gm[temp[:,1],temp[:,0]]	
	found=False
	temp=len(normVal)
	accuracy=6
	bestAngle=360.0
	if temp<accuracy:
		accuracy=temp
	while found!=True | accuracy>1:
		maxValueIndexes=np.where(normVal==max(normVal))
		maxValueIndex=maxValueIndexes[0][0]
		maxX=pts[maxValueIndex][0]
		maxY=pts[maxValueIndex][1]
		vect=np.subtract(p1,p2)
		endX=vect[0]
		endY=vect[1]
		length=math.sqrt(math.pow(endX, 2)+math.pow(endY, 2))
		p1NormX,p1NormY=endX/length, endY/length
		length=math.sqrt(math.pow(maxX, 2)+math.pow(maxY, 2))
		p2NormX,p2NormY=maxX/length, maxY/length 
		dot=np.dot((p1NormX,p1NormY),(p2NormX,p2NormY))
		angle=math.degrees(math.acos(dot))
		if angle>180:
			angle=math.fabs(angle-360)
		if angle<20:
			found=True
			retX,retY=maxX,maxY
			return retX, retY			
		else:
			if angle<bestAngle:
				bestAngle=angle
				retX,retY=maxX,maxY
			normVal=np.delete(normVal, maxValueIndex, axis=0)
		accuracy=accuracy-1
	return retX, retY