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), )
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)
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
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)
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)
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)