Я хотел бы простейшим способом (без миллиона проверок границ изображения) получить контур с шириной n пикселей, идущих в положительную область, из двоичного 2D-массива.Python: Контур в двоичном двумерном массиве
Пример:
img = np.array([
[0, 0, 0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 0, 0, 0, 0, 0],
])
Для вызова, например, с width = 1. Пиксели положительны, если img [i, j] == 1 и любой сосед (img [i + 1, j], img [i-1, j], img [i, j-1], img [ i, j + 1]) равно 0.
contour1 = get_countor(img, width = 1)
contour1 = ([
[0, 0, 0, 1, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 0, 0, 0, 0, 0],
])
или вызов, например, width = 2. Все пиксели с шириной = 1 являются положительными, а также те, которые удовлетворяют img [i, j] == 1 и для которых с двумя индексами (эвклидово расстояние) существует пиксель со значением 0.
contour2 = get_countor(img, width = 2)
contour2 = ([
[0, 0, 0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 0, 0, 0, 0, 0],
])
Благодарим за помощь.