Skip to content
Back to skills

Center Z Slice Selection

ASecurity

Select a fixed number of Z-slices centered around the volume midpoint for memory-efficient 2.5D input from 3D CT/MRI stacks

  • 61 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
developmentpython

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill center-z-slice-selection --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Center Z Slice Selection?

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

Security grade badge for Center Z Slice Selection
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-center-z-slice-selection/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-center-z-slice-selection)

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-center-z-slice-selection
description: Select a fixed number of Z-slices centered around the volume midpoint for memory-efficient 2.5D input from 3D CT/MRI stacks
---

# Center Z-Slice Selection

## Overview

3D medical/scientific volumes often have 30-65+ slices, but loading all of them as input channels is memory-prohibitive. Selecting a fixed number of slices centered around the volume midpoint captures the most informative region (where the surface of interest typically lies) while reducing input channels from 65 to e.g. 6-12. This enables using standard 2D pretrained backbones with multi-channel input.

## Quick Start

```python
import cv2
import numpy as np

def load_center_slices(slice_dir, total_slices=65, n_channels=6):
    mid = total_slices // 2
    start = mid - n_channels // 2
    end = mid + n_channels // 2

    images = []
    for i in range(start, end):
        img = cv2.imread(f"{slice_dir}/{i:02d}.tif", cv2.IMREAD_GRAYSCALE)
        images.append(img)

    return np.stack(images, axis=-1)  # (H, W, n_channels)

volume = load_center_slices("fragment_01/surface_volume", n_channels=8)
# Feed to 2D model with in_channels=8
```

## Workflow

1. Determine total number of Z-slices in the volume
2. Compute center index: `mid = total // 2`
3. Select symmetric range: `[mid - n//2, mid + n//2)`
4. Load only those slices as grayscale images
5. Stack along channel dimension for 2D model input

## Key Decisions

- **n_channels**: 6-12 is typical; match to model's `in_channels` parameter
- **Center assumption**: works when the signal is near the volume center; adjust offset if not
- **Normalization**: 16-bit TIFFs → divide by 65535.0 for float32 [0, 1] range
- **vs all slices**: reduces memory 5-10x with minimal information loss for centered signals

## References

- [2.5d segmentaion baseline [inference]](https://www.kaggle.com/code/tanakar/2-5d-segmentaion-baseline-inference)
- [2.5d segmentaion baseline [training]](https://www.kaggle.com/code/tanakar/2-5d-segmentaion-baseline-training)

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…