Skip to content
Back to skills

Min Area Mask Filtering

ASecurity

Removes predicted segmentation masks below a per-class minimum pixel area threshold to eliminate small false positive regions at inference time.

  • 61 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 12, 2026
documentationpython

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill min-area-mask-filtering --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Min Area Mask Filtering?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Min Area Mask Filtering
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-min-area-mask-filtering/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-min-area-mask-filtering)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cv-min-area-mask-filtering
description: >
  Removes predicted segmentation masks below a per-class minimum pixel area threshold to eliminate small false positive regions at inference time.
---
# Min-Area Mask Filtering

## Overview

Segmentation models often produce small spurious predictions — isolated pixel clusters that score above the confidence threshold but are too small to be real objects. Min-area filtering applies a per-class pixel count threshold: after binarizing the predicted mask, any connected component (or entire class mask) with fewer pixels than the threshold is zeroed out. This simple post-processing step typically improves Dice/IoU by 0.5-2% by eliminating false positives, especially in defect detection and medical imaging where true objects have known minimum sizes.

## Quick Start

```python
import numpy as np

def filter_small_masks(pred_masks, min_areas, thresholds):
    """Filter masks below per-class minimum area.

    Args:
        pred_masks: (H, W, C) float array of predicted probabilities
        min_areas: list of minimum pixel counts per class
        thresholds: list of binarization thresholds per class
    Returns:
        Filtered binary masks (H, W, C)
    """
    filtered = np.zeros_like(pred_masks, dtype=np.uint8)
    for c in range(pred_masks.shape[-1]):
        mask = (pred_masks[:, :, c] > thresholds[c]).astype(np.uint8)
        if mask.sum() < min_areas[c]:
            mask = np.zeros_like(mask)
        filtered[:, :, c] = mask
    return filtered

# Per-class thresholds and min areas (tune on validation)
thresholds = [0.5, 0.5, 0.5, 0.5]
min_areas = [600, 600, 1000, 2000]
clean_masks = filter_small_masks(raw_preds, min_areas, thresholds)
```

## Workflow

1. Binarize predicted probabilities with per-class confidence thresholds
2. Count positive pixels per class
3. Zero out any class mask with fewer pixels than its minimum area
4. Encode cleaned masks for submission (e.g., RLE)

## Key Decisions

- **Per-class thresholds**: Different defect types have different minimum sizes — tune each independently
- **Min area values**: Derive from training set statistics (smallest real annotation area)
- **Connected components**: For finer control, filter individual connected components instead of the whole mask
- **Threshold search**: Grid-search both confidence threshold and min-area on validation Dice/IoU

## References

- [Severstal mlcomp+catalyst Inference](https://www.kaggle.com/code/lightforever/severstal-mlcomp-catalyst-infer-0-90672)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.