def test_corner(self): # Create a corner detector pattern mop = ImageMorph.MorphOp( patterns=['1:(... ... ...)->0', '4:(00. 01. ...)->1']) count, Aout = mop.apply(self.A) self.assertEqual(count, 5) self.assert_img_equal_img_string( Aout, """ ....... ....... ..1.1.. ....... ..1.1.. ....... ....... """) # Test the coordinate counting with the same operator coords = mop.match(self.A) self.assertEqual(len(coords), 4) self.assertEqual(tuple(coords), ((2, 2), (4, 2), (2, 4), (4, 4))) coords = mop.get_on_pixels(Aout) self.assertEqual(len(coords), 4) self.assertEqual(tuple(coords), ((2, 2), (4, 2), (2, 4), (4, 4)))
def test_load_invalid_mrl(self): # Arrange invalid_mrl = 'Tests/images/hopper.png' mop = ImageMorph.MorphOp() # Act / Assert with self.assertRaises(Exception) as e: mop.load_lut(invalid_mrl) self.assertEqual(str(e.exception), 'Wrong size operator file!')
def test_no_operator_loaded(self): mop = ImageMorph.MorphOp() with self.assertRaises(Exception) as e: mop.apply(None) self.assertEqual(str(e.exception), 'No operator loaded') with self.assertRaises(Exception) as e: mop.match(None) self.assertEqual(str(e.exception), 'No operator loaded') with self.assertRaises(Exception) as e: mop.save_lut(None) self.assertEqual(str(e.exception), 'No operator loaded')
def test_set_lut(self): # Arrange lb = ImageMorph.LutBuilder(op_name='corner') lut = lb.build_lut() mop = ImageMorph.MorphOp() # Act mop.set_lut(lut) # Assert self.assertEqual(mop.lut, lut)
def test_roundtrip_mrl(self): # Arrange tempfile = self.tempfile('temp.mrl') mop = ImageMorph.MorphOp(op_name='corner') initial_lut = mop.lut # Act mop.save_lut(tempfile) mop.load_lut(tempfile) # Act / Assert self.assertEqual(mop.lut, initial_lut)
def test_erosion8(self): # erosion8 mop = ImageMorph.MorphOp(op_name='erosion8') count, Aout = mop.apply(self.A) self.assertEqual(count, 8) self.assert_img_equal_img_string( Aout, """ ....... ....... ....... ...1... ....... ....... ....... """)
def test_edge(self): # edge mop = ImageMorph.MorphOp(op_name='edge') count, Aout = mop.apply(self.A) self.assertEqual(count, 1) self.assert_img_equal_img_string( Aout, """ ....... ....... ..111.. ..1.1.. ..111.. ....... ....... """)
def test_erosion4(self): # erosion4 mop = ImageMorph.MorphOp(op_name='dilation4') count, Aout = mop.apply(self.A) self.assertEqual(count, 12) self.assert_img_equal_img_string( Aout, """ ....... ..111.. .11111. .11111. .11111. ..111.. ....... """)
def test_dialation8(self): # dialation8 mop = ImageMorph.MorphOp(op_name='dilation8') count, Aout = mop.apply(self.A) self.assertEqual(count, 16) self.assert_img_equal_img_string( Aout, """ ....... .11111. .11111. .11111. .11111. .11111. ....... """)
def test_non_binary_images(self): im = hopper('RGB') mop = ImageMorph.MorphOp(op_name="erosion8") with self.assertRaises(Exception) as e: mop.apply(im) self.assertEqual(str(e.exception), 'Image must be binary, meaning it must use mode L') with self.assertRaises(Exception) as e: mop.match(im) self.assertEqual(str(e.exception), 'Image must be binary, meaning it must use mode L') with self.assertRaises(Exception) as e: mop.get_on_pixels(im) self.assertEqual(str(e.exception), 'Image must be binary, meaning it must use mode L')
def test_negate(self): # Test 'N' for negate mop = ImageMorph.MorphOp( patterns=['1:(... ... ...)->0', 'N:(00. 01. ...)->1']) count, Aout = mop.apply(self.A) self.assertEqual(count, 8) self.assert_img_equal_img_string( Aout, """ ....... ....... ..1.... ....... ....... ....... ....... """)
def test_mirroring(self): # Test 'M' for mirroring mop = ImageMorph.MorphOp( patterns=['1:(... ... ...)->0', 'M:(00. 01. ...)->1']) count, Aout = mop.apply(self.A) self.assertEqual(count, 7) self.assert_img_equal_img_string( Aout, """ ....... ....... ..1.1.. ....... ....... ....... ....... """)