| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- import sys
 
- from skimage.measure import label
 
- import matplotlib.pyplot as plt
 
- import numpy as np
 
- def dil(arr, struct):
 
-     res = np.zeros_like(arr)
 
-     for y in range(1, arr.shape[0] - 1):
 
-         for x in range(1, arr.shape[1] - 1):
 
-             sub = arr[y - 1 : y + 2, x - 1 : x + 2]
 
-             rsub = np.logical_and(arr[y, x], struct)
 
-             res[y - 1 : y + 2, x - 1 : x + 2] = np.logical_or(
 
-                 res[y - 1 : y + 2, x - 1 : x + 2], rsub
 
-             )
 
-     return res
 
- def erros(arr, struct):
 
-     result = np.zeros_like(arr)
 
-     for y in range(1, arr.shape[0] - 1):
 
-         for x in range(1, arr.shape[1] - 1):
 
-             sub = arr[y - 1 : y + 2, x - 1 : x + 2]
 
-             if np.all(sub >= struct):
 
-                 result[y, x] = 1
 
-     return result
 
- def cl(arr, struct):
 
-     return dil(erros(arr, struct), struct)
 
- def op(arr, struct):
 
-     return erros(dil(arr, struct), struct)
 
- if len(sys.argv) < 2:
 
-     print("No path provided")
 
-     exit()
 
- num = np.load(sys.argv[1])
 
- m = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]])
 
- plt.subplot(1, 2, 1)
 
- plt.imshow(num)
 
- plt.subplot(1, 2, 2)
 
- plt.imshow(cl(num, m))
 
- for w in np.unique(label(num))[1:]:
 
-     res = label(cl(num, m))[label(num) == w]
 
-     match len(np.unique(res)[1:]):
 
-         case 1:
 
-             print("Провод не порван")
 
-         case 0:
 
-             print("Провод уничтожен")
 
-         case _:
 
-             print(f"Провод {w} порван на {len(np.unique(res)[1:])}")
 
- plt.show()
 
 
  |