def _get_pixels_dict(primitive_parse, line_eps, circle_eps): primitives = primitive_parse.primitives pixels = primitive_parse.image_segment_parse.diagram_image_segment.pixels pixels_dict = {'all': pixels} for key, primitive in primitives.iteritems(): if isinstance(primitive, instantiators['line']): eps = line_eps curr_pixels = _get_pixels_near_line(pixels, primitive, eps) pixels_dict[key] = curr_pixels """ image = cv2.cvtColor(primitive_parse.image_segment_parse.diagram_image_segment.segmented_image, cv2.COLOR_GRAY2BGR) draw_line(image, primitive) display_image(image) for pixel in curr_pixels: draw_point(image, pixel) display_image(image) """ a_pixels = _get_pixels_near_point(pixels, primitive.a, eps) b_pixels = _get_pixels_near_point(pixels, primitive.b, eps) pixels_dict[primitive.a] = a_pixels pixels_dict[primitive.b] = b_pixels elif isinstance(primitive, instantiators['circle']): eps = circle_eps curr_pixels = set( pixel for pixel in pixels if distance_between_circle_and_point(primitive, pixel) < eps) pixels_dict[key] = curr_pixels return pixels_dict
def _get_circle_dict(core_parse): """ A dictionary of dictionaries, where key of the top dictionary is center point. The bottom dictionary contains radii (if multiple circles exist with the same center). :param core_parse: :return: """ # FIXME : this needs to be changed eps = CIRCLE_EPS assert isinstance(core_parse, CoreParse) circle_dict = {} for point_key, dd in core_parse.circles.iteritems(): d = {} for radius_key, circle in dd.iteritems(): points = {} for key in core_parse.intersection_points: point = core_parse.intersection_points[key] if distance_between_circle_and_point(circle, point) <= eps: points[key] = point center_var = core_parse.point_variables[point_key] radius_var = core_parse.radius_variables[point_key][radius_key] circle_var = FormulaNode(signatures['Circle'], [center_var, radius_var]) d[radius_key] = { 'instance': circle, 'points': points, 'variable': circle_var } if len(d) > 0: circle_dict[point_key] = d return circle_dict
def _get_circle_dict(diagram_parse): """ A dictionary of dictionaries, where key of the top dictionary is center point. The bottom dictionary contains radii (if multiple circles exist with the same center). :param diagram_parse: :return: """ # FIXME : this needs to be changed eps = CIRCLE_EPS assert isinstance(diagram_parse, CoreParse) circle_dict = {} for point_key, point in diagram_parse.intersection_points.iteritems(): d = {} radius_key = 0 for circle in diagram_parse.primitive_parse.circles.values(): if distance_between_points(point, circle.center) <= eps: points = {} for key in diagram_parse.intersection_points: point = diagram_parse.intersection_points[key] if distance_between_circle_and_point(circle, point) <= eps: points[key] = point d[radius_key] = {'instance': circle, 'points': points} radius_key += 1 if len(d) > 0: circle_dict[point_key] = d return circle_dict
def _get_pixels_dict(primitive_parse, line_eps, circle_eps): primitives = primitive_parse.primitives pixels = primitive_parse.image_segment_parse.diagram_image_segment.pixels pixels_dict = {'all': pixels} for key, primitive in primitives.iteritems(): if isinstance(primitive, instantiators['line']): eps = line_eps curr_pixels = _get_pixels_near_line(pixels, primitive, eps) pixels_dict[key] = curr_pixels """ image = cv2.cvtColor(primitive_parse.image_segment_parse.diagram_image_segment.segmented_image, cv2.COLOR_GRAY2BGR) draw_line(image, primitive) display_image(image) for pixel in curr_pixels: draw_point(image, pixel) display_image(image) """ a_pixels = _get_pixels_near_point(pixels, primitive.a, eps) b_pixels = _get_pixels_near_point(pixels, primitive.b, eps) pixels_dict[primitive.a] = a_pixels pixels_dict[primitive.b] = b_pixels elif isinstance(primitive, instantiators['circle']): eps = circle_eps curr_pixels = set(pixel for pixel in pixels if distance_between_circle_and_point(primitive, pixel) < eps) pixels_dict[key] = curr_pixels return pixels_dict
def _get_circle_dict(core_parse): """ A dictionary of dictionaries, where key of the top dictionary is center point. The bottom dictionary contains radii (if multiple circles exist with the same center). :param core_parse: :return: """ # FIXME : this needs to be changed eps = CIRCLE_EPS assert isinstance(core_parse, CoreParse) circle_dict = {} for point_key, dd in core_parse.circles.iteritems(): d = {} for radius_key, circle in dd.iteritems(): points = {} for key in core_parse.intersection_points: point = core_parse.intersection_points[key] if distance_between_circle_and_point(circle, point) <= eps: points[key] = point center_var = core_parse.point_variables[point_key] radius_var = core_parse.radius_variables[point_key][radius_key] circle_var = FormulaNode(signatures['Circle'], [center_var, radius_var]) d[radius_key] = {'instance': circle, 'points': points, 'variable': circle_var} if len(d) > 0: circle_dict[point_key] = d return circle_dict
def _circle_exists(diagram_parse, circle): eps = 4 multiplier = 2 assert isinstance(diagram_parse, CoreParse) pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels near_pixels = set(pixel for pixel in pixels if distance_between_circle_and_point(circle, pixel) <= eps) length = circumference(circle) if len(near_pixels) < multiplier*length: return False return True
def _circle_exists(diagram_parse, circle): eps = 4 multiplier = 2 assert isinstance(diagram_parse, CoreParse) pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels near_pixels = set( pixel for pixel in pixels if distance_between_circle_and_point(circle, pixel) <= eps) length = circumference(circle) if len(near_pixels) < multiplier * length: return False return True
def _distance_from_point(point, primitive): if isinstance(primitive, instantiators['line']): return distance_between_line_and_point(primitive, point) elif isinstance(primitive, instantiators['circle']): return distance_between_circle_and_point(primitive, point)