コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
ファイル: parse_graph.py プロジェクト: IshJ/EquationTree
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
コード例 #4
0
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
コード例 #5
0
ファイル: parse_graph.py プロジェクト: Darriall/geosolver
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
コード例 #6
0
ファイル: instance_exists.py プロジェクト: Darriall/geosolver
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
コード例 #7
0
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
コード例 #8
0
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)
コード例 #9
0
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)