Exemple #1
0
def computeCornerResponse(img, radius, max_number_points,
                          harris_threshold_rel):
    max_dimension = max([img.shape[0], img.shape[1]])

    gray_img = toGrayScale(img)

    edge_discard = 20
    harris_img, interest_points = harris.get_harris_corners(
        gray_img, edge_discard, harris_threshold_rel)

    num_points_found = len(interest_points[0])
    interest_points_transposed = np.transpose(interest_points)
    dists = harris.dist2(interest_points_transposed,
                         interest_points_transposed)

    max_global = float("-inf")
    max_global_index = None
    for index in xrange(num_points_found):
        y = interest_points[0][index]
        x = interest_points[1][index]
        if harris_img[y, x] > max_global:
            max_global_index = index
            max_global = harris_img[y, x]

    indexes_selected = [max_global_index]

    for r in reversed(xrange(radius, max_dimension)):
        for candidate_index in xrange(num_points_found):
            isGood = True
            for good_index in indexes_selected:
                if dists[candidate_index, good_index] < r * r:
                    isGood = False
                    break
            if isGood:
                indexes_selected.append(candidate_index)
                print "Found " + str(len(indexes_selected)) + " out of " + str(
                    max_number_points) + " points expected."
                if len(indexes_selected) >= max_number_points:
                    break
        if len(indexes_selected) >= max_number_points:
            break

    points = []
    for index in indexes_selected:
        points.append((interest_points[1][index], interest_points[0][index]))

    print "Total points used: " + str(len(points))

    figure, axis = plt.subplots(ncols=3)
    axis[0].imshow(img, vmin=0, vmax=1)
    axis[1].imshow(harris_img, vmin=0, vmax=1)
    axis[2].imshow(img, vmin=0, vmax=1)

    for x, y in points:
        marker = plt.Circle((x, y), 2, color='r')
        axis[2].add_artist(marker)

    plt.show()

    return points
Exemple #2
0
def feature_match(desc_imA, desc_imB):
    results = {}
    for point_A, vector_A in desc_imA.items():
        dists = {}
        for point_B, vector_B in desc_imB.items():
            dists[point_B] = harris.dist2(vector_A, vector_B)[0][0]
        dists = sorted((value, key) for (key, value) in dists.items())

        if dists[0][0] / dists[1][0] < .3:
            results[point_A] = dists[0][1]
    return results
Exemple #3
0
def feature_match(desc_imA, desc_imB):
    threshold = .3
    results = {}
    for point_A, vector_A in desc_imA.items():
        dists = {}
        for point_B, vector_B in desc_imB.items():
            dists[point_B] = harris.dist2(vector_A, vector_B)[0][0]
        dists = sorted((value, key) for (key, value) in dists.items())

        best = dists[0]
        secondbest = dists[1]
        if best[0] / secondbest[0] < threshold:
            results[point_A] = best[1]
    return results
Exemple #4
0
def computeCornerResponse(img, radius, max_number_points,harris_threshold_rel):
	max_dimension = max([img.shape[0],img.shape[1]])

	gray_img = img

	edge_discard = EDGE_DISCARD
	harris_img, interest_points = harris.get_harris_corners(gray_img,edge_discard,harris_threshold_rel)

	num_points_found = len(interest_points[0])
	interest_points_transposed = np.transpose(interest_points)
	dists = harris.dist2(interest_points_transposed,interest_points_transposed)


	max_global = float("-inf")
	max_global_index = None
	for index in xrange(num_points_found):
		y = interest_points[0][index]
		x = interest_points[1][index]
		if harris_img[y,x] > max_global:
			max_global_index = index
			max_global = harris_img[y,x] 

	indexes_selected = [max_global_index]

	for r in reversed(xrange(radius,max_dimension)):
		for candidate_index in xrange(num_points_found):
			isGood = True
			for good_index in indexes_selected:
				if dists[candidate_index,good_index] < r*r:
					isGood = False
					break
			if isGood:
				indexes_selected.append(candidate_index)
				# print "Found " + str(len(indexes_selected)) + " out of " + str(max_number_points) + " points expected."
				if len(indexes_selected) >= max_number_points:
					break
		if len(indexes_selected) >= max_number_points:
			break

	points = []
	for index in indexes_selected:
		points.append((interest_points[1][index],interest_points[0][index]))

	return points
Exemple #5
0
def ANMS(points, eps, H):
    radius_values = {}
    for center in points:
        H_i = H[center[0], center[1]]
        interest_points = []
        for point in points:
            H_j = H[point[0], point[1]]
            if H_i < (eps * H_j):
                interest_points.append(point)
        if len(interest_points) > 0:
            radius_values[center] = np.amin(
                harris.dist2(np.array([center]), np.array(interest_points)))
    radius_values = sorted(
        (value, key) for (key, value) in radius_values.items())[::-1]

    top_500 = [[], []]
    for i in range(500):
        top_500[0].append(radius_values[i][1][0])
        top_500[1].append(radius_values[i][1][1])

    return top_500
Exemple #6
0
def ANMS(points, eps, H):
    remain_num = 500
    radius = {}
    for center in points:
        rC, cC = center[0], center[1]
        interest_points = []
        H_C = H[rC, cC]
        for point in points:
            H_p = H[point[0], point[1]]
            if H_C < (eps * H_p):
                interest_points.append(point)
        if len(interest_points) > 0:
            radius[center] = np.amin(
                harris.dist2(np.array([center]), np.array(interest_points)))
    radius_values = sorted(((value, key) for (key, value) in radius.items()),
                           reverse=True)
    top_500 = [[], []]
    for i in range(remain_num):
        top_500[0].append(radius_values[i][1][0])
        top_500[1].append(radius_values[i][1][1])

    return top_500