|
|
|
|
|
"""Downsample binary masks preserving thin positives. |
|
|
|
|
|
We use area-based resize on float32 masks followed by a >0 threshold. |
|
|
This emulates block-wise max pooling: any positive in the source region |
|
|
produces a positive in the target pixel. |
|
|
""" |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
|
|
|
def downsample_label_maxpool(mask: np.ndarray, out_h: int, out_w: int) -> np.ndarray: |
|
|
""" |
|
|
Args: |
|
|
mask: HxW binary (0/1) numpy array |
|
|
out_h, out_w: target size |
|
|
Returns: |
|
|
H'xW' binary array via max-pooling-like downsample |
|
|
""" |
|
|
assert mask.ndim == 2 |
|
|
|
|
|
import cv2 |
|
|
|
|
|
m = mask.astype(np.float32) |
|
|
r = cv2.resize(m, (out_w, out_h), interpolation=cv2.INTER_AREA) |
|
|
out = (r > 0.0).astype(np.uint8) |
|
|
return out |
|
|
|