Skip to content
Snippets Groups Projects
Commit b7a97729 authored by Markus Holzer's avatar Markus Holzer
Browse files

Generalised boolean_array_bounding_box

parent 24ef1d2f
No related branches found
No related tags found
No related merge requests found
import os import os
import itertools
from collections import Counter from collections import Counter
from contextlib import contextmanager from contextlib import contextmanager
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
...@@ -96,16 +97,21 @@ def fully_contains(l1, l2): ...@@ -96,16 +97,21 @@ def fully_contains(l1, l2):
def boolean_array_bounding_box(boolean_array): def boolean_array_bounding_box(boolean_array):
"""Returns bounding box around "true" area of boolean array""" """Returns bounding box around "true" area of boolean array
dim = len(boolean_array.shape)
>>> a = np.zeros((4, 4), dtype=bool)
>>> a[1:-1, 1:-1] = True
>>> boolean_array_bounding_box(a)
[(1, 3), (1, 3)]
"""
dim = boolean_array.ndim
shape = boolean_array.shape
assert 0 not in shape, "Shape must not contain zero"
bounds = [] bounds = []
for i in range(dim): for ax in itertools.combinations(reversed(range(dim)), dim - 1):
for j in range(dim): nonzero = np.any(boolean_array, axis=ax)
if i != j: t = np.where(nonzero)[0][[0, -1]]
arr_1d = np.any(boolean_array, axis=j) bounds.append((t[0], t[1] + 1))
begin = np.argmax(arr_1d)
end = begin + np.argmin(arr_1d[begin:])
bounds.append((begin, end))
return bounds return bounds
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment