Поскольку ваше пространство поиска очень мало, нам не нужно беспокоиться об ошибках памяти, просто расправляя окно.
Сначала вам понадобится маска , где есть значения в вашем шаблоне
mask
array([[False, False, True, True, False, False],
[False, False, True, True, False, False],
[ True, True, True, True, True, True],
[ True, True, True, True, True, True],
[False, False, True, True, False, False],
[False, False, True, True, False, False]], dtype=bool)
Тогда вам нужен массив Что значения находятся в этих позициях:
val = np.array([ 3., 4., 3., 4., 3., 3., 3., 4., 4., 4.,
3., 3., 3., 4., 4., 4., 3., 4., 3., 4.])
Тогда вам нужно скользящее окно через ваш ввод. Самая простая реализация - это skimage.util.view_as_windows
, но вы можете использовать мою чистую пустышку здесь
windows = skimage.util.view_as_windows(input, pattern.shape)
# or
windows = window_nd(input, pattern.shape)
Теперь, обычно делать windows[mask]
здесь было бы опасно - он может создать огромный массив, если вы свернетесь во многих окнах. Но большинство окон, которые у нас когда-либо были, это 12 * 6 = 72, нам не нужно об этом беспокоиться.
loc = np.where(np.all(window[mask] == val, axis = -1))
Теперь loc
- это координаты верхнего левого угла соответствующих окон.
Или так и должно быть. Может быть, предоставить тестовый пример, который можно скопировать / вставить в интерпретатор?