Skip to content
Back to projects

Organ Disease Progression Visualizer: Imaging-Driven 3D Lung Model

A deterministic pipeline that turns chest CT images into a live, signal-driven 3D lung visualisation.

Role
Technical Lead, full system implementation (COMP8851 team project)
Stack
Python, OpenCV, PyVista, Trimesh, NumPy
Scope
8 clinical CT cases · scored 0.218–0.809
3D lung mesh rendered by the pipeline for Case 01: advanced disease, progression score 0.809, deep fibrotic red with strong deformation
3D lung mesh rendered by the pipeline for Case 01: advanced disease, progression score 0.809, deep fibrotic red with strong deformation

Can you tell what stage a lung disease is at just from a CT scan? Most people can't, so as technical lead on this Macquarie COMP8851 project I built a system that can, and that shows you exactly why. It's a deterministic Python pipeline that processes real chest CT images and maps quantitative signals directly onto an anatomical 3D lung mesh, with interactive case switching in the viewer.

From each scan the pipeline extracts three numbers: severity (mean pixel intensity), texture (standard deviation), and HDR, the proportion of pixels above a density threshold, standing in for dense lesion and fibrosis coverage. Those combine into one progression score: 0.65 × Severity + 0.20 × Texture + 0.15 × HDR. Every number on screen came from a pixel in the CT image.

That score then drives the 3D model: colour, lesion spread, surface roughness, and structural deformation all respond to it. I ran 8 clinical cases through the system, spanning 0.218 (near-healthy) through to 0.809 (advanced fibrosis), so the reference lung visibly deforms from smooth and light to darkened, volume-lost, and fibrotic as the disease advances.

Because this is a medical context, traceability was non-negotiable. Every run writes a JSON audit trail logging each pipeline decision: the extracted values, the weighting calculation, the disease-staging transition, and the exact count of affected mesh vertices. Eight cases, eight audit logs, every decision traceable back to the input.

Raw axial chest CT slice for Case 01 showing extensive honeycombing and fibrosis
The raw CT input for Case 01: extensive fibrosis, which the pipeline scores at 0.809.
3D lung render for Case 08, progression score 0.218, light pink and smooth
Case 08: near-healthy (0.218). Light colour, smooth surface, minimal deformation.
3D lung render for Case 02, progression score 0.668, moderate disease
Case 02: moderate (0.668). HDR-dominant, mild fibrotic texture emerging.
3D lung render for Case 04, progression score 0.754, advanced disease with strong deformation
Case 04: advanced (0.754). Strong deformation and darkening, HDR the dominant driver.
Raw axial chest CT slice for Case 08 showing clear lung fields
The raw CT input for Case 08: clear lung fields, scored near-healthy at 0.218.
PythonOpenCVPyVistaTrimeshNumPyView on GitHub