Source code for hello.fiftyone.connected
from pathlib import Path
import cv2 as cv
from skimage.measure import label, regionprops
from tqdm import tqdm
[docs]
def count_areas(image_dir, pattern="*.png", limit=None):
"""Count connected regions of an integer array.
https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.label
Args:
image_dir (str): _description_
pattern (str): _description_
"""
image_dir = Path(image_dir)
files = sorted([str(f) for f in image_dir.glob(pattern)])
counts = []
for f in tqdm(files):
x = cv.imread(f, 0)
labels = label(x, connectivity=x.ndim)
if limit is None:
n = labels.max()
else:
props = regionprops(labels)
n = len([1 for r in props if r.num_pixels >= limit])
counts.append((f, n))
print(f"{len(counts)=}, sum(counts)={sum([v[1] for v in counts])}")
return counts