def mark_outliers(error_list, trim_stddev): print("Marking outliers...") sum = 0.0 count = len(error_list) # numerically it is better to sum up a list of floatting point # numbers from smallest to biggest (error_list is sorted from # biggest to smallest) for line in reversed(error_list): sum += line[0] # stats on error values print(" computing stats...") mre = sum / count stddev_sum = 0.0 for line in error_list: error = line[0] stddev_sum += (mre-error)*(mre-error) stddev = math.sqrt(stddev_sum / count) print("mre = %.4f stddev = %.4f" % (mre, stddev)) # mark match items to delete print(" marking outliers...") mark_count = 0 for line in error_list: # print "line:", line if line[0] > mre + stddev * trim_stddev: cull.mark_feature(matches, line[1], line[2], line[0]) mark_count += 1 return mark_count
def mark_image_features(index, matches): # iterate through the match dictionary and mark any matches for # the specified image for deletion print("Marking feature matches for image:", index) count = 0 new_matches = [] for i, match in enumerate(matches): for j, p in enumerate(match[2:]): if p[0] == index: cull.mark_feature(matches, i, j, 0) count += 1 return count