UNPKG

major-ai-skills

Version:

Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.

157 lines (123 loc) 8.92 kB
--- name: 3d-slicer description: "Automate 3D Slicer research workflows with MRML, VTK/ITK, DICOM data, and Segment Editor. Use for software workflows, not clinical interpretation." category: medical risk: safe source: self source_type: self date_added: "2026-08-26" tags: ["3d-slicer", "mrml-scene", "dicom-processing", "vtk-itk", "segment-editor", "medical-imaging", "claude"] tools: ["claude", "cursor", "gemini", "codex"] --- # 3D Slicer Medical Image Computing AI Skill Guide (Claude) ## Overview & Engine Architecture 3D Slicer is the premier open-source platform for medical image informatics, clinical visualization, and surgical planning. Built upon **VTK (Visualization Toolkit)**, **ITK (Insight Segmentation and Registration Toolkit)**, and **Qt**, 3D Slicer organizes all volumetric scans, label maps, surface models, and transforms in a unified **MRML (Medical Reality Modeling Language) Scene Graph (`slicer.mrmlScene`)**. Slicer embeds a full **Python 3 environment (`PythonSlicer.exe`)**, provides a programmatic **Segment Editor framework**, and executes headless batch workflows via CLI. Claude operates as a Principal Medical Informatics Architect and Biomedical Software Engineer, specializing in **MRML scene manipulation**, **automated DICOM batch ingestion**, **ITK threshold & watershed segmentation**, and **headless Slicer CLI automation**. ### 3D Slicer MRML & VTK/ITK Architecture ``` ┌─────────────────────────────────────────────────────────────┐ 3D Slicer System Architecture Presentation & MRML Scene Layer ├── MRML Scene Graph (`slicer.mrmlScene` Node Hierarchy) ├── 3D Viewport & 2D Slices (Red/Axial, Green/Coronal, Yellow/Sagittal)│ └── Volume Rendering Display Nodes (GPU Ray Casting Shaders│ Segmentation & Image Processing Pipeline ├── Segment Editor Engine (`vtkMRMLSegmentEditorNode`) ├── ITK Image Filters (Curvature Flow, Otsu Threshold) └── VTK Surface Extractors (Flying Edges / Marching Cubes) Data & DICOM Database Layer ├── CTK DICOM Database (`ctkDICOMDatabase` SQLite Engine) └── Volume Formats (`.nrrd`, `.nii.gz`, Multi-Frame DICOM) └─────────────────────────────────────────────────────────────┘ ``` --- ## Operational Capabilities & Agent Directives 1. **MRML Scene Automation via Python**: Author Python scripts interacting with `slicer.mrmlScene`, querying nodes by class (`slicer.util.getNodesByClass('vtkMRMLScalarVolumeNode')`), and managing transform hierarchies. 2. **Automated Segment Editor Scripting**: Construct automated segmentation routines using thresholding, masking, and island removal effects to extract anatomical structures (bones, lungs, vessels). 3. **3D Surface Model Generation & STL Export**: Convert segmented labelmaps into smoothed polygonal surface models (`vtkMRMLModelNode`) and export to STL/OBJ for surgical guide 3D printing. 4. **Headless CLI Execution**: Orchestrate batch clinical image pipelines using `Slicer.exe --no-splash --no-main-window --python-script <script.py>`. --- ## Production Python Automation: Automated Bone Segmentation & STL Exporter (`3D Slicer`) Save this script as `batch_segment_bone.py` and run via `Slicer.exe --no-splash --no-main-window --python-script batch_segment_bone.py`: ```python """ 3D Slicer Headless Python Automation: Automated Bone Segmentation & STL Export Loads a CT volume (.nrrd / DICOM), segments bone (Hounsfield threshold), and exports STL. """ import sys import os import slicer def process_ct_volume(input_volume_path: str, output_stl_path: str, min_hu: float = 200.0, max_hu: float = 3000.0): print(f"--- [3D SLICER MEDICAL IMAGE PROCESSING PIPELINE] ---") print(f"Loading CT Volume: {input_volume_path}...") # 1. Load Volume into MRML Scene volume_node = slicer.util.loadVolume(input_volume_path) if not volume_node: print("Error: Failed to load scalar volume into MRML scene.") slicer.app.exit(1) # 2. Create Segmentation Node and Setup Segment Editor segmentation_node = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentationNode") segmentation_node.CreateDefaultDisplayNodes() segmentation_node.SetReferenceImageGeometryParameterFromVolumeNode(volume_node) # Add 'Bone' Segment bone_segment_id = segmentation_node.GetSegmentation().AddEmptySegment("Bone") # Initialize Segment Editor Logic segment_editor_widget = slicer.qMRMLSegmentEditorWidget() segment_editor_widget.setMRMLScene(slicer.mrmlScene) segment_editor_node = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentEditorNode") segment_editor_widget.setMRMLSegmentEditorNode(segment_editor_node) segment_editor_widget.setSegmentationNode(segmentation_node) segment_editor_widget.setMasterVolumeNode(volume_node) # 3. Apply Threshold Effect for Bone (HU: 200 - 3000) print(f"Applying Thresholding Filter (HU: {min_hu} - {max_hu})...") segment_editor_widget.setActiveEffectByName("Threshold") effect = segment_editor_widget.activeEffect() effect.setParameter("MinimumThreshold", str(min_hu)) effect.setParameter("MaximumThreshold", str(max_hu)) effect.self().onApply() # 4. Generate Closed Surface 3D Representation print("Generating 3D Closed Surface Mesh (Flying Edges)...") segmentation_node.CreateClosedSurfaceRepresentation() # 5. Export 3D Mesh to STL print(f"Exporting 3D Mesh to: {output_stl_path}...") slicer.modules.segmentations.logic().ExportSegmentsClosedSurfaceRepresentationToFiles( output_stl_path, segmentation_node, [bone_segment_id], "STL" ) print("✅ Pipeline complete! STL exported successfully.") slicer.app.exit(0) if __name__ == "__main__": # Example test execution within Slicer input_file = "C:/Data/Sample_CT_Head.nrrd" output_dir = "C:/Data/Exported_Models" os.makedirs(output_dir, exist_ok=True) process_ct_volume(input_file, output_dir) ``` --- ## Technical Troubleshooting Matrix | Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway | | :--- | :--- | :--- | | **Volume Rendering Shows Blank Screen on Windows** | GPU ray casting shader fails on integrated graphics lacking OpenGL 4.5 capabilities. | 1. In Volume Rendering module $\rightarrow$ Set Rendering Method to **CPU Ray Casting**.<br>2. In Volume Display Node, adjust **Scalar Opacity Mapping** transfer curve window/level. | | **DICOM Import Skips Series: `Unrecognized SOP Class`** | Enhanced multi-frame DICOM IOD or Radiation Therapy (RTSTRUCT) object missing dedicated plugin. | In Extension Manager, install **QuantitativeReporting** and **SlicerRT** extensions $\rightarrow$ Re-import DICOM. | | **Headless Script Fails: `slicer.app.exit()` Freezes** | Script finished processing but background Qt event loop worker held an active timer. | Use `slicer.app.exit(0)` instead of `sys.exit(0)` to ensure clean Slicer application teardown. | | **Out-Of-Memory During High-Res Mesh Generation** | Generating un-decimated marching cubes surface from massive $512\times 512\times 1000$ voxel grid. | In Segmentation node representation settings, enable **Decimate Target Reduction = 0.5** and **Smoothing Factor = 0.5**. | --- ## Command Line Syntax & Batch Processing ```bash # 1. Run Headless Slicer Python Script "C:\Program Files\Slicer 5.6\Slicer.exe" --no-splash --no-main-window --python-script "C:\Scripts\batch_segment_bone.py" # 2. Run Standalone Python Interpreter Bundled with Slicer "C:\Program Files\Slicer 5.6\bin\PythonSlicer.exe" -m pip install pydicom scikit-image # 3. Launch Slicer and Load Volume Immediately Slicer.exe --volume "C:\Data\scan.nrrd" ``` ### Essential File Locations - **Slicer Preferences**: `%APPDATA%\NA-MIC\Slicer.ini` (Windows) or `~/.config/NA-MIC/Slicer.ini` (Linux) - **DICOM Database Root**: `~/Documents/SlicerDICOMDatabase/` --- ## Agent Operational Directive > **MANDATORY**: In headless 3D Slicer batch scripts, always exit using `slicer.app.exit(0)` rather than `sys.exit()` to avoid Qt event loop deadlocks and memory corruption.