예제 #1
0
def _stitch_two(img1: Image, img2: Image, cell_size: int, overlap: int,
                direction: str) -> Image:
    if direction == "hor":
        img1 = segment_module_part(
            img1,
            0,
            0,
            img1.get_meta("cols") - (overlap // 2),
            img1.get_meta("rows"),
            cell_size,
        )
        img2 = segment_module_part(
            img2,
            overlap // 2,
            0,
            img2.get_meta("cols") - (overlap // 2),
            img2.get_meta("rows"),
            cell_size,
        )
        return img1.from_self(
            data=np.concatenate([img1.data, img2.data], axis=1),
            meta=dict(cols=img1.get_meta("cols") + img2.get_meta("cols") -
                      overlap),
        )
    else:
        img1 = segment_module_part(
            img1,
            0,
            0,
            img1.get_meta("cols"),
            img1.get_meta("rows") - (overlap // 2),
            cell_size,
        )
        img2 = segment_module_part(
            img2,
            0,
            overlap // 2,
            img2.get_meta("cols"),
            img2.get_meta("rows") - (overlap // 2),
            cell_size,
        )
        return img1.from_self(
            data=np.concatenate([img1.data, img2.data], axis=0),
            meta=dict(rows=img1.get_meta("rows") + img2.get_meta("rows") -
                      overlap),
        )
예제 #2
0
def test_segment_padding_transform():
    img = detection.locate_module_and_cells(data.datasets.poly10x6(1)[0])
    part = detection.segment_module_part(img, 0, 0, 3, 2, padding=0.5, size=20)
    x1 = part.get_meta("transform")(np.array([[0.0, 1.0]])).flatten()
    x2 = part.get_meta("transform")(np.array([[2.0, 3.0]])).flatten()
    assert_equal(x1[0], 10)
    assert_equal(x1[1], 30)
    assert_equal(x2[0], 50)
    assert_equal(x2[1], 70)
예제 #3
0
def test_segment_module_part():
    mod = data.datasets.poly10x6(1)[0]
    mod = detection.locate_module_and_cells(mod)
    part = detection.segment_module_part(mod, 1, 2, 2, 3)

    assert_equal(part.shape[1], 2 / 3 * part.shape[0], 0.1)
    assert part.first_col == 1
    assert part.first_row == 2
    assert part.cols == 2
    assert part.rows == 3
예제 #4
0
def test_locate_partial_module():
    img = detection.locate_module_and_cells(data.datasets.poly10x6(1)[0])
    part = detection.segment_module_part(img, 0, 0, 3, 2, padding=0.5)
    part_det = detection.locate_module_and_cells(part, False)

    x1_true = [part_det.shape[1] * 1 / 8, part_det.shape[0] * 1 / 6]
    x2_true = [part_det.shape[1] * 7 / 8, part_det.shape[0] * 5 / 6]
    x1 = part_det.get_meta("transform")(np.array([[0.0, 0.0]])).flatten()
    x2 = part_det.get_meta("transform")(np.array([[3.0, 2.0]])).flatten()
    eps = 0.05 * part_det.shape[1]

    assert_equal(x1[0], x1_true[0], eps)
    assert_equal(x1[1], x1_true[1], eps)
    assert_equal(x2[0], x2_true[0], eps)
    assert_equal(x2[1], x2_true[1], eps)
예제 #5
0
def test_segment_padding():
    img = detection.locate_module_and_cells(data.datasets.poly10x6(1)[0])
    part = detection.segment_module_part(img, 0, 0, 3, 2, padding=0.5)
    assert_equal(part.shape[1] / part.shape[0], 8 / 6)
예제 #6
0
def test_segment_size():
    img = detection.locate_module_and_cells(data.datasets.poly10x6(1)[0])
    part = detection.segment_module_part(img, 1, 3, 2, 1, size=20)
    assert_equal(part.shape[1], 2 * 20)
    assert_equal(part.shape[0], 1 * 20)