Skip to content

Shape Analysis

Wookjin Choi edited this page May 28, 2026 · 1 revision

Shape Analysis — qradiomics.shape

Python re-implementations of two published Choi-Lab pipelines. Used as a library (call as functions; see tests/shape/ for end-to-end usage on analytic shapes — sphere / spiked-sphere / phantoms).

2014 CMPB — AHSN pulmonary nodule detection

Choi WJ, Choi TS. Automated pulmonary nodule detection based on three-dimensional shape-based feature descriptor. CMPB 2014;113(1):37–54. doi

from qradiomics.shape import (
    surface_elements,    # Hessian eigendecomp + per-voxel normals (paper §2.2.1)
    detect_candidates,   # Multi-scale Sato/Li dot enhancement (§2.2.2)
    ahsn, AHSNConfig,    # Angular Histogram of Surface Normals (§2.3.1)
    wall_eliminate,      # Iterative wall detection / elimination (§2.3.2)
    make, make_all,      # Synthetic 3D lung phantoms for testing
)

The AHSN descriptor is 180-D (90 θ + 90 φ bins of the surface-normal angular histogram).

2021 CMPB — Spiculation quantification

Choi W, Nadeem S, Riyahi S, Deasy JO, Tannenbaum A, Lu W. Reproducible and Interpretable Spiculation Quantification for Lung Cancer Screening. CMPB 2021;200:105839. doi — companion to CIR.

from qradiomics.shape import (
    voxel_to_mesh,                # marching cubes → triangular mesh
    spherical_parameterization,   # cotangent-Laplacian → unit sphere
    area_distortion,              # per-vertex log-area distortion
    detect_peaks,                 # negative-distortion peaks = spike candidates
    spiculation_features,         # Na / Nl / Na_att / s1 / s2 features
    spiculation_from_voxel,       # one-shot mask → SpiculationFeatures
)

Source-map (paper section → module)

Module Paper Role
shape/hessian.py 2014 §2.2.1 Hessian + surface elements
shape/detection.py 2014 §2.2.2 multi-scale Sato/Li dot filter
shape/ahsn.py 2014 §2.3.1 AHSN descriptor
shape/wall_elim.py 2014 §2.3.2 iterative wall elimination
shape/mesh_utils.py 2021 voxel → mesh + geometry primitives
shape/spiculation.py 2021 spherical param + Na/Nl/Na_att/s1/s2
shape/phantoms.py synthetic 3D lung phantoms for testing

Reproduction numbers for both pipelines (validated against the LCSR MATLAB reference and the CIRDataset masks): Reproducibility.

Clone this wiki locally