def matter(cls, m: Matter) -> Matter:
     assert m.n_color() <= 2
     if m.is_mesh:
         return m
     elif m.n_color() == 0:
         return m
     elif m.n_color() == 1:
         color_count = m.color_count()
         for c in range(10):
             if color_count[c] > 0 and c != m.background_color:
                 base_color = c
         new_matter: Matter = m.copy()
         new_values = m.background_color * np.ones(m.shape, dtype=np.int)
         new_values[m.values == m.background_color] = base_color
         new_matter.set_values(new_values)
         return new_matter
     else:  # m.n_color() == 2
         color_count = m.color_count()
         switch = []
         for c in range(10):
             if color_count[c] > 0 and c != m.background_color:
                 switch.append(c)
         new_matter: Matter = m.copy()
         new_values = m.background_color * np.ones(m.shape, dtype=np.int)
         new_values[m.values == switch[0]] = switch[1]
         new_values[m.values == switch[1]] = switch[0]
         new_matter.set_values(new_values)
         return new_matter
Ejemplo n.º 2
0
def point_cross_cnt_mat(m: Matter, y_arr: np.array) -> Tuple[np.array, int]:
    assert m.n_color() == 1
    color_cnt = m.color_count()
    color_cnt[m.background_color] = 0
    m_color = [c for c in range(10) if color_cnt[c] > 0][0]
    x_arr = np.zeros(y_arr.shape, dtype=np.int)
    try:
        x_arr[m.x0:m.x0 + m.shape[0], m.y0:m.y0 + m.shape[1]] = m.values
    except:
        print(x_arr, y_arr, m.x0, m.x0 + m.shape[0], m.y0, m.y0 + m.shape[1])
        raise
    return point_cross_cnt_arr(x_arr, y_arr, m_color), m_color
Ejemplo n.º 3
0
def point_cross_fit_mat(m: Matter, n_row, n_col, op_arr: np.array) -> Matter:
    assert m.n_color() == 1
    color_cnt = m.color_count()
    color_cnt[m.background_color] = 0
    m_color = [c for c in range(10) if color_cnt[c] > 0][0]

    x_arr = np.zeros((n_row, n_col), dtype=np.int)
    x_arr[m.x0:m.x0 + m.shape[0], m.y0:m.y0 + m.shape[1]] = m.values

    res_arr = point_cross_fit_arr(x_arr, m_color, op_arr[m_color])
    new_values = np.zeros(x_arr.shape, dtype=int)
    new_values[res_arr == 1] = m_color
    new_values[res_arr == 0] = m.background_color
    new_matter = m.copy()
    new_matter.set_values(new_values)
    new_matter.x0 = 0
    new_matter.y0 = 0

    return new_matter