Предположим, у вас есть массив 2D numpy с некоторыми случайными значениями и окружающими нулями.
Пример "наклонный прямоугольник":
import numpy as np
from skimage import transform
img1 = np.zeros((100,100))
img1[25:75,25:75] = 1.
img2 = transform.rotate(img1, 45)
Теперь я хочу найти наименьший ограничивающий прямоугольник для всех ненулевых данных. Например:
a = np.where(img2 != 0)
bbox = img2[np.min(a[0]):np.max(a[0])+1, np.min(a[1]):np.max(a[1])+1]
Каким будет быстрый способ достижения этого результата? Я уверен, что есть лучший способ, поскольку функция np.where занимает довольно много времени, если я, например. с использованием наборов данных 1000x1000.
Изменить: Должно также работать в 3D...