def testTwoObjectsOneSpanning(self): image = np.zeros([100, 200, 3], dtype=np.uint8) image[:, :, 0] = draw_square_by_corner(image[:, :, 0], 10, (5, 10), 100) image[:, :, 1] = draw_square_by_corner(image[:, :, 1], 10, (5, 10), 100) image[:, :, 2] = draw_square_by_corner(image[:, :, 2], 12, (5, 10), 100) image[:, :, 1] = draw_square_by_corner(image[:, :, 1], 25, (45, 40), 200) slices = mask_to_objects_3d(image, assume_unique_labels=True) self.assertIsInstance(slices, list) self.assertEqual(len(slices), 2, msg="found 2 objects") self.assertEqual(len(slices[0]), 3) self.assertEqual(slices[0][0].label, 100) self.assertEqual(slices[0][0].depth, 0) self.assertTrue(slices[0][0].polygon.equals(box(10, 5, 20, 15))) self.assertEqual(slices[0][1].label, 100) self.assertEqual(slices[0][1].depth, 1) self.assertTrue(slices[0][1].polygon.equals(box(10, 5, 20, 15))) self.assertEqual(slices[0][2].label, 100) self.assertEqual(slices[0][2].depth, 2) self.assertTrue(slices[0][2].polygon.equals(box(10, 5, 22, 17))) self.assertEqual(len(slices[1]), 1) self.assertEqual(slices[1][0].label, 200) self.assertEqual(slices[1][0].depth, 1) self.assertTrue(slices[1][0].polygon.equals(box(40, 45, 65, 70)))
def testAdjacentWithoutSeperation(self): image = np.zeros([300, 200], dtype=np.int) image = draw_square_by_corner(image, 50, (150, 50), color=255) image = draw_square_by_corner(image, 50, (150, 101), color=127) slices = mask_to_objects_2d(image) # sort by bounding box top left corner slices = sorted(slices, key=lambda s: s.polygon.bounds[:2]) self.assertEqual(len(slices), 2) self.assertEqual(slices[0].label, 255) self.assertEqual(slices[1].label, 127)
def testSeveralObjects(self): image = np.zeros([300, 200], dtype=np.int) image = draw_square_by_corner(image, 50, (150, 50), color=255) image = draw_square_by_corner(image, 50, (205, 105), color=127) slices = mask_to_objects_2d(image) # sort by bounding box top left corner slices = sorted(slices, key=lambda s: s.polygon.bounds[:2]) self.assertEqual(len(slices), 2) self.assertEqual(slices[0].label, 255) self.assertTrue(slices[0].polygon.equals(box(50, 150, 100, 200)), msg="Polygon is equal") self.assertEqual(slices[1].label, 127) self.assertTrue(slices[1].polygon.equals(box(105, 205, 155, 255)), msg="Polygon is equal")
def testOffset(self): image = np.zeros([300, 200], dtype=np.int) image = draw_square_by_corner(image, 100, (150, 50), color=255) slices = mask_to_objects_2d(image, offset=(255, 320)) self.assertEqual(len(slices), 1) self.assertEqual(slices[0].label, 255) self.assertTrue(slices[0].polygon.equals(box(305, 470, 405, 570)), msg="Polygon is equal")
def testExportOneSquare(self): image = np.zeros([300, 200], dtype=np.int) image = draw_square_by_corner(image, 100, (150, 50), color=255) slices = mask_to_objects_2d(image) self.assertEqual(len(slices), 1) self.assertEqual(slices[0].label, 255) self.assertTrue(slices[0].polygon.equals(box(50, 150, 150, 250)), msg="Polygon is equal")