Skip to content
Back to skills

Tumor Volume Ratio Features

ASecurity

Extract volumetric features from 3D segmentation masks including scan/tumor pixel ratios, tumor percentage, and tumor centroid coordinates

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

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill tumor-volume-ratio-features --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tumor Volume Ratio Features?

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

Security grade badge for Tumor Volume Ratio Features
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-tumor-volume-ratio-features/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-tumor-volume-ratio-features)

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-tumor-volume-ratio-features
description: Extract volumetric features from 3D segmentation masks including scan/tumor pixel ratios, tumor percentage, and tumor centroid coordinates
---

# Tumor Volume Ratio Features

## Overview

3D segmentation masks contain rich structural information beyond the mask itself. Extracting volumetric features — total scan pixels, tumor pixels, tumor-to-scan ratio, and tumor centroid coordinates — creates tabular features that complement image-based models. These features capture tumor size, location, and relative volume that CNNs may struggle to learn directly.

## Quick Start

```python
import numpy as np
from skimage.morphology import binary_closing

def extract_volume_features(scan, segmentation, mask_idx=1):
    """Extract volumetric features from a 3D scan and its segmentation."""
    scan_filled = np.stack([binary_closing(scan[i] > 0) for i in range(scan.shape[0])])
    scan_px = scan_filled.sum()
    tumor_mask = (segmentation == mask_idx) | (segmentation == 4)
    tumor_px = tumor_mask.sum()
    total_px = np.prod(scan.shape)

    z, x, y = tumor_mask.nonzero()
    if len(z) > 0:
        centroid = [np.median(x) / scan.shape[1],
                    np.median(y) / scan.shape[2],
                    np.median(z) / scan.shape[0]]
    else:
        centroid = [0.5, 0.5, 0.5]

    return {
        'scan_ratio': scan_px / total_px,
        'tumor_ratio': tumor_px / total_px,
        'tumor_to_scan': tumor_px / max(scan_px, 1),
        'centroid_x': centroid[0],
        'centroid_y': centroid[1],
        'centroid_z': centroid[2],
    }

features = extract_volume_features(volume, seg_mask, mask_idx=1)
```

## Workflow

1. Binarize the scan with morphological closing to fill holes
2. Count total scan pixels and tumor pixels from the segmentation mask
3. Compute ratios: tumor/total, tumor/scan, scan/total
4. Find tumor centroid via median of nonzero coordinates (normalized to [0,1])
5. Use as tabular features alongside CNN predictions

## Key Decisions

- **binary_closing**: fills small holes in the brain mask for accurate volume estimation
- **Median centroid**: more robust to outlier voxels than mean
- **Normalization**: divide coordinates by volume dimensions for scale invariance
- **Multiple tumor classes**: combine relevant segmentation labels (e.g., necrotic + enhancing)

## References

- [Brain Tumor - Understanding the Data](https://www.kaggle.com/code/susant4learning/brain-tumor-understanding-the-data)

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.