Skip to content
Back to skills

Dbscan Ensemble Fusion

ASecurity

Fuses 3D object detections from multiple models by clustering nearby predictions with DBSCAN and taking cluster centroids.

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

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill dbscan-ensemble-fusion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dbscan Ensemble Fusion?

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

Security grade badge for Dbscan Ensemble Fusion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-dbscan-ensemble-fusion/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-dbscan-ensemble-fusion)

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-dbscan-ensemble-fusion
description: >
  Fuses 3D object detections from multiple models by clustering nearby predictions with DBSCAN and taking cluster centroids.
---
# DBSCAN Ensemble Fusion

## Overview

When multiple detection models produce overlapping 3D point predictions, fuse them by clustering nearby detections with DBSCAN. Each cluster's centroid becomes a single fused detection. Unlike NMS which needs box IoU, DBSCAN works directly on point coordinates — ideal for particle picking, cell detection, and any centroid-based 3D detection.

## Quick Start

```python
from sklearn.cluster import DBSCAN
import numpy as np

def fuse_detections(all_preds, eps=10.0, min_samples=2):
    """Fuse detections from multiple models.
    all_preds: list of arrays, each (N_i, 3) in (z, y, x) coords.
    """
    coords = np.vstack(all_preds)
    if len(coords) == 0:
        return np.empty((0, 3))
    clustering = DBSCAN(eps=eps, min_samples=min_samples).fit(coords)
    centroids = []
    for label in set(clustering.labels_):
        if label == -1:  # noise — include as single detections
            noise_pts = coords[clustering.labels_ == label]
            centroids.extend(noise_pts)
        else:
            cluster_pts = coords[clustering.labels_ == label]
            centroids.append(cluster_pts.mean(axis=0))
    return np.array(centroids)
```

## Workflow

1. Collect (z, y, x) predictions from each model
2. Concatenate all predictions into one array
3. Run DBSCAN with `eps` = expected merge radius, `min_samples` = minimum agreement count
4. Compute centroid per cluster; optionally discard noise points (single-model detections)
5. Output fused detection coordinates

## Key Decisions

- **eps**: Set to expected particle radius or localization error; too large merges distinct objects
- **min_samples**: 2 = fuse if any two models agree; higher = stricter consensus filter
- **Noise handling**: Keep noise points for recall; discard for precision
- **Per-class fusion**: Run DBSCAN separately per class to prevent cross-class merging
- **Weighted centroids**: Weight by model confidence if available

## References

- [CZII YOLO11+Unet3D-Monai LB.707](https://www.kaggle.com/code/hideyukizushi/czii-yolo11-unet3d-monai-lb-707)

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…