Da Agatston a “PyCa”: un prototipo portable open-research che non necessita di workstation o cloud. Tutto in locale.
Un percorso storico, metodologico e pratico: dal primo lavoro su EBCT del 1990 fino all’integrazione dell’intelligenza artificiale in PyCa, lo strumento open-research sviluppato con AITeRTC.
Gli ultimi mesi sono stati abbastanza intensi e concentrati nello sviluppo di un nuovo progetto che ruota intorno a un’idea particolarmente particolarmente conosciuta nell’ambiente della radiologia cardio-vascolare e che negli ultimi anni è diventata uno strumento di quantificazione importantissimo.
Il termine calcium score è infatti entrato anche nel linguaggio comune, diventando una metodologia disponibile e da antesignano molto primitivo della radiomica, è una delle prime forme di dato quantitativo che ormai popola i protocolli diagnostici del mondo intero.
Cosa c’è dietro questo nome ? Come funziona ? Ma soprattutto, può essere possibile calcolare un calcium score senza l’utilizzo di una workstation ultrapotente e costosa evitando anche il cloud ?
Prima di rispondere a tutte queste domande, vorrei fare una premessa: io, il Calcium Score, lo adoro! E’ stata la mia prima forma di “ricostruzione” quando ho iniziato a lavore nell’ambito della TC cardiaca nel 2016; la prima forma di “segmentazione” prima ancora di imparare che cosa fosse un region growing e una label map. Lì, su quella workstation di acquisizione della Somatom Flash (Siemens Healthineers) ogni click mi faceva quotidinamente prendere confidenza con l’anatomia coronarica e penso sia stato uno dei migliori allenamenti per muovere i primi passi nella segmentazione e nel riconoscimento dell’anatomia.
“Ma cosa c’entra il calcium Score con Pyca?” e soprattutto, “Che diamine è Pyca?”
Queste domande si collegano a quelle precedenti e rispondono tutte a una necessità che negli ultimi tempi ho notato non essere più singola.
Sarebbe davvero comodo avere a disposizione un tool locale che permetta di calcolare il Calcium Score anche quando la supermegacalifragilistichespiralidosa workstation non sia immediatamente disponibile anche per una analisi di 5 minuti.
“Ma Vittorio, Horos e Osirix, avevano un plugin!“
Certo, lo hanno! Ma a me, almeno su Horos, il plugin non funziona granchè.
“E 3D Slicer invece? Non c’è un plugin?“
C’è, o meglio c’era! E’ improvvisamente diventato indisponibile e quello nella repo Github risulta incompatibile con le ultime rev.
Ho quindi pensato che siamo nell’era del vibe coding, in cui possiamo delegare stesure infinite di codice agli agent e quindi… Perchè non provare a crearsi una soluzione propria ?
It’s time! Ho cominciato con la creazione di un plugin per 3D Slicer e dopo due settimane, i risultati iniziavano a diventare tangibili e dopo tante imprec… Interazioni (questo è il termine giusto) ho un interscambio con un cardiologo che sognerebbe di avere il Calcium Score sul suo PC per fare delle analisi e penso, ma perchè usare uno strumento ultrapotente come 3D Slicer con tutte le sue richieste di sistema, per far girare solo un plugin?
Servirebbe qualcosa di piccolo, portatile, da inserire su un’anacronistica pennetta USB che parta solo al click, senza necessità di installazione, evitando di disturbare i permessi di amministrazione di Windows e che non sia avido di risorse. Un piccolo software, standalone, magari in PYthon con tutte le sue bellissime librerie, per il CAlcium score. PyCa era già nato e non me n’ero nemmeno reso conto.
Fast forward ad oggi, dopo 4 mesi, PyCa è alla sua versione 1.0 ed è disponibile con un’analisi del Calcium Score coronarico basata su IA e un’implementazione per le quantificazioni valvolari aortiche. Prima però di farvelo provare, credo che possa essere utile fare qualche digressione sullo spiegare cosa sia effettivamente il Calcium Score e come funziona Pyca, ma se volete evitare il mio monologo interiore, beh, no offence! I link sono in fondo alla pagina!
1. Le origini: l’idea di Agatston
Nel 1990 Arthur S. Agatston e i suoi collaboratori, lavorando su una piattaforma TC a fascio di elettroni (Electron Beam CT, EBCT) della GE Imatron, pubblicarono su Journal of the American College of Cardiology un metodo per quantificare il calcio coronarico direttamente dalle scansioni non-contrastografiche. L’idea era semplice: il calcio è iperdenso, lo si vede senza mezzo di contrasto, e la sua estensione correla con il carico aterosclerotico.
L’EBCT aveva tempi di acquisizione < 100 ms per slice e gating cardiaco intrinseco: era l’unica modalità a poter “congelare” le coronarie fino alla fine degli anni ’90. Seppur negli anni 2000 le TC multidetector con gating ECG abbiano preso il posto dell’EBCT, il metodo di calcolo è rimasto sostanzialmente immutato.

2. La base del punteggio Agatston
Il calcolo Agatston (che è ormai sinonimo di Calcium Score) si basa su quattro elementi di base:
- Soglia in Unità Hounsfield: ogni voxel con HU ≥ 130 è considerato candidato a calcio.
- Area minima per lesione: la lesione, valutata slice per slice tramite componenti connesse 2D, deve avere un’area ≥ 1 mm² (≈ 3 voxel su matrice 512×512, FOV cardiaco).
- Density factor: 1 per HU 130–199, 2 per 200–299, 3 per 300–399, 4 per ≥ 400, calcolato sul valore massimo della lesione nella slice.
- Normalizzazione di spessore: il punteggio standard Agatston è per definizione storica calcolato su slice da 3 mm senza gap. Spessori maggiori sottostimano a causa del volume parziale e minori, se non normalizzati, portano a una sovrastima.
Il calcolo può essere effettuato sia in modalità 2D slice-by-slice oppure su un volume 3D. Nel suo paradigma originale, ovviamente, per la scarsa disponibilità di dataset isotropici, la metodologia bidimensionale era quella da preferire.
Il punteggio finale per arteria è la somma di area × density factor per ciascuna lesione su ciascuna slice.
Il calcium score per antonomasia è quello coronarico e valutato sulle tre arterie principali (Tronco comune, IVA, circonflessa, destra) ma è possibile applicare il calcolo a qualsiasi altro distretto valvolare che abbia calcificazioni (come aorta e in particolar modo valvola aortica).

3. Dall’EBCT al MESA: la conferma epidemiologica
Negli anni 2000 il calcium score si è imposto come marcatore di aterosclerosi subclinica grazie a coorti longitudinali come MESA (Multi-Ethnic Study of Atherosclerosis, McClelland et al., 2006), che ha permesso di costruire percentili coronarici stratificati per età, sesso ed etnia. Quei percentili sono diventati il riferimento di fatto per contestualizzare il punteggio assoluto del paziente.
Il calcium score viene normalmente riportato in Agatston Units (AU), secondo questa stratificazione:
- 0 AU: assenza di calcio rilevabile, rischio cardiovascolare a 10 anni molto basso.
- 1–99 AU: calcio minimo, rischio basso-intermedio.
- 100–299 AU: calcio moderato, rischio aumentato.
- ≥ 400 AU: calcio severo, rischio elevato, indicazione potenziale a terapia farmacologica intensiva.
4. SCOT-Heart e la svolta clinica
Lo studio SCOT-Heart (Scottish Computed Tomography of the Heart, NEJM 2018) ha un po’ cambiato e sostanziamente confermato il paradigma: in pazienti con dolore toracico stabile, l’aggiunta di angio-TC coronarica alla valutazione standard ha ridotto del 41% l’incidenza di morte coronarica/IMA a 5 anni rispetto al solo standard of care. Se il ruolo della cardio-TC diventa predonimante nello screening di parzienti a rischio intermedio, Il calcium score è la prima informazione di quella catena diagnostica ed è la porta d’ingresso non-invasiva al rischio coronarico.
SCOT-Heart però portò a un’importante conclusione. Il Calcium Score da solo non è sufficiente per escludere fenotipi di placca avversi poichè il 14% dei pazienti con CACS = 0 presentava comunque una malattia coronarica con placche ateromasiche a bassa attenuazione, che si sono rilevate essere quelle più instabili.
Da SCOT-Heart in poi, le linee guida ESC 2024 sul dolore toracico cronico e quelle ACC/AHA 2018 sul colesterolo hanno integrato il calcium score come strumento decisionale per la prescrizione di statine in popolazioni di rischio intermedio, riducendo i fenomeni dell’overtreatment e underprescribment con followup costanti.
Nel tempo, il Calcium Score è diventato parte integrante dei protocolli TC cardiovascolari, sia come indagine complementare per stimare la quantità di calcio pre-acquisizione angio-TC (anche per ottimizzarne l’esecuzione), ma anche come tool diagnostico indipendente per screening low dose nei rischi medio-bassi date le dosi estremamente conservative e l’invasività pressocchè nulla.
5. Oltre le coronarie
Come detto, lo stesso principio HU ≥ 130 può essere applicato a strutture non-coronariche dove l’accumulo di calcio ha significato clinico autonomo:
- Valvola aortica
- Anulus tricuspidalico e mitralico
- Aorta
Fra queste strutture, il Calcium Score è diventato particolarmente efficace nello studio dell’area valvolare aortica perchè diventa quasi un game changer in caso di dubbio diagnostico con il solo esame ecocardiografico; tale circostanza si verifica spesso nei cosidetti casi low flow-low gradient, in cui l’ecografia, da gold standard, diventa dubbia e si verifica sia con frazioni di eiezione basse, sia con FE preservate ma con effetto paradosso in casi di fibrillazione atriale, insufficienza mitralica o tricuspidalica e con riscontro comune di aree valvolari < 1 cm² e gradiente medio < 40 mmHg.
Le linee guida ESC/EACTS 2021 sulla valvulopatia (Vahanian et al.) e i lavori di Pawade et al. 2018 hanno definito cutoff specifici di AVC per il sospetto di stenosi aortica severa nei casi ecograficamente dubbi:
- Uomini: AVC ≥ 2.000 AU altamente suggestivo, ≥ 3.000 conferma. Un cutoff < 1.200 esclude.
- Donne: AVC ≥ 1.200 AU altamente suggestivo, ≥ 1.600 conferma; un cutoff < 800 esclude.
In questi casi il calcium score valvolare aortico permette di distinguere tra stenosi reale e pseudo-severa.
6. Come si calcola il Calcium Score ?
Se sei un professionista dell’area radiologica avrai già incontrato qualche soluzione famosa come Smart Score, Syngo.via, Circle o tantissime altre. Moltissime delle workstation commerciali offrono moduli dedicati al calcium scoring, validati clinicamente e integrati nel flusso ospedaliero, oggi anche coadiuvati da reti neurali per velocizzare il workflow. Prodotti ottimi, intituivi, ma che hanno anche altre peculiarità:
- Richiedono licenze costose e spesso un’infrastruttura di rete dedicata senza user concorrenti;
- Non sono portatili o standalone;
- Black box: i passaggi di calcolo non sono accessibili;
- Hanno UI che spesso richiedono training diversi e spesso non sono facilmente disponibili per scopi didattici e di training.
PyCa è nato per rispondere a queste esigenze su un piano diverso.
Non è un tool diagnostico, non è validato clinicamente e non ha l’intenzione di essere un outsider, ma nasce per venire incontro a chi vuole imparare le basi della segmentazione in un ambiente diverso, senza la necessità di installare software perchè le rete aziendali spesso non lo consentono.
Pyca è una sperimentazione, è un tool di ricerca che cerca di adattarsi alle necessità di diversi professionisti che probabilmente non lavorano nemmeno quotidianamente nell’area radiologica, ma cerca di centralizzare il ruolo di questa metodica per essere una sorta di “coltellino svizzero” che possa essere utile alle necessità dell’utente finale.
7. Come funziona l’analisi in PyCa
Il flusso di lavoro è progettato per essere lineare, immaginato dal punto di vista di un TSRM, anche per chi si avvicina al calcium scoring per la prima volta.
Il software è stato sviluppato in Python e nel suo onefile exe include tutte le librerie necessarie al suo funzionamento. Tecnicamente, le caratteristiche di base sono le seguenti:
- Caricamento DICOM: parsing automatico delle serie, fix dei voxel con HU = -3024 (NaN) → -2048 con riconoscimento delle serie che più si avvicinano a quella target. L’algoritmo non scarta le immagini non CaSc ma inserisce un label nelle serie che si avvicinano ai criteri del calcium Score o lo riportano nel nome.
- Visualizzazione MPR e VRT: La schermata è divisa in 4 viewport (2 MPR, 1 MIP e 1 VRT). Il viewport assiale è quello principale. Quello coronale è MIP servono come riferimenti. E’ possibile applicare un tilting sul piano coronale per intercettare il piano valvolare e dissociare meglio le cuspidi.
Il viewport MIP ha la possibilità di funzionare su Slab e mostra le segmentazioni sovraimpresse a quello assiale. Il viewport MPR è collassibile e ha una cropbox per escludere colonna e gabbia toracica. - Segmentazione: Il cuore del software. Qui ho cercato di replicare il più fedelmente possibile l’algoritmo dalla maggior parte dei software specialistici che è un tallone di Achille di quelli Open Source finora utilizzati.
La tecnica Click&Grow permette la segmentazione solo su soglia preimpostata (che per definizione è 130 HU, ma può essere variata nei settings, se necessario).
Il Click and Grow è una metodologia che combina il click e un region growing per segmentare i chunk di calcio in una volta sola; sono però ovviamente presenti brush e gomma per ritocchi, oltre che un undo/redo applicabile con i tasti ctrl+z e ctrl+y.
E’ altresì presente una previsualizzazione dei voxel > 130 HU che però può essere disabilitata. - AI Analysis (opzionale): l’ultima introduzione del software e in stato sperimentale. E’ possibile la segmentazione automatica del calcio su Tronco comune, IVA, CX e CDX con il modello multi-task SEGMENT-CACS (Föllmer 2024). Full local con CPU (circa 4 minuti per analisi) o GPU (30 secondi) con riconoscimento di FOV > 220 mm e ROI cardiaca interattiva per evitare i falsi positivi.
L’AI analysis può produrre risultati inaspettati (quante volte avete letto questa frase?) - Calcium Score: calcolo Agatston per territorio + percentile MESA + stratificazione del rischio.
Per la valvola aortica: heatmap radiale dei tre lembi (RCC / LCC / NCC) e cutoff ESC. - Report PDF: layout con punteggi, percentile, screenshot e citazioni.
8. Il progetto PyCa: nato come strumento didattico
PyCa nasce all’interno del Comitato Scientifico AITeRTC con un obiettivo iniziale chiaro: fornire uno strumento didattico per spiegare il calcium scoring e farlo nel modo più chiaro e democratico possibile.
Da quel nucleo iniziale, il software è cresciuto:
- Percentile MESA nativo, con tabelle dello studio multicentrico, evitando dipendenza da fogli Excel esterni.
- Database paziente locale in SQLite, USB-friendly e con possibilità di salvataggio delle segmentazioni effettuate. Il software gira da chiavetta o comunque localmente. I dati non vanno a nessun server remoto, tutto in circa 300 Mb per la versione legacy e circa 600 Mb per quella IA.
8.1 L’integrazione dell’AI: SEGMENT-CACS
Nel 2024 è stato pubblicato SEGMENT-CACS (Föllmer et al., Insights into Imaging, doi:10.1186/s13244-024-01827-0), un modello multi-task U-Net 2D che segmenta a livello di segmento coronarico (LM, LAD prossimale/media/distale, CX, RCA) su TC non-contrast. Il modello è rilasciato sotto licenza Apache 2.0, condizione indispensabile per poterlo integrare in un progetto open-research come PyCa senza vincoli proprietari.
L’integrazione è stata progettata per massimizzare la portabilità:
- Conversione del modello da PyTorch a ONNX con un modello di soli 5.6 MB.
- Inferenza tramite ONNX Runtime con DirectML: gira su qualsiasi GPU Windows (NVIDIA, AMD, Intel) senza richiedere CUDA o cuDNN installati. Questa modalità permette di evitare di utilizzare le librerie PyTorch e di risparmiare circa 700 Mb. Non avete una GPU? No problems, il fallback alla CPU è automatico.
- Tempi tipici: ~30 secondi su GPU per 143 slice, ~4 minuti su CPU pura.
- ROI cardiaca interattiva per scan toraciche ampie: l’utente posiziona un cerchio sulla zona cardiaca e l’AI ignora coste/colonna fuori da quella regione (necessario perché il modello è addestrato su FOV small per CaScoring).
- Per scelta, il calcio è poi quantificato comunque con l’algoritmo Agatston nativo di PyCa: l’AI fornisce la segmentazione, non il punteggio.
L’integrazione è stata trattata come funzionalità sperimentale di default: l’utente è invitato a verificare visivamente la segmentazione e rifinire con Click&Grow o Brush/Eraser dove necessario, secondo la filosofia “human-in-the-loop”.
9. A chi si rivolge PyCa
- Tecnici Sanitari di Radiologia Medica (TSRM): per imparare il workflow del calcium scoring, capire i parametri di acquisizione, simulare casi.
- Specializzandi di radiologia e cardiologia: come tool didattico di quantificazione on the fly.
- Ricercatori: per analisi retrospettive su coorti di scan non-contrast, con report standardizzati ed esportabili in CSV, anche in batch.
10. Test d’uso e confronto con software vendor





11. Limiti e roadmap
Ovviamente, PyCa è esplicitamente non un dispositivo medico e non è validato per uso clinico. I limiti attuali noti includono:
- L’AI è addestrata su FOV small tipo cardiac; su TC torace ampi richiede ROI manuale per evitare falsi positivi su coste/colonna.
- Il modello AI non copre ancora la valvola aortica (AoV): la segmentazione valvolare resta manuale. E’ in roadmap la volontà di addestrare una rete ad hoc e pertanto, chi fosse interessato, è assolutamente benvenuto nella collaborazione!
- Non vi è ancora un sistema di aggiornamento OTA: i nuovi rilasci si scaricano dal sito. Anche questa novità è in Roadmap, evitando la necessità di riscaricare l’EXE.
La roadmap include altresì esportazione DICOM-SEG e l’utilissimo supporto Linux/macOS, che immagino sia cosa gradita a molti.
Allo stato attuale, nell’ottica della cooperazione e della bellissima esperienza con AITeRTC e il suo Comitato Scientifico (di cui sono onorato di far parte e ringrazio per il co-authoring e l’endorsement) ho deciso di fornire le licenze d’uso gratuitamente.
Per chi fosse interessato, il software è disponibile qui.
Non è necessaria alcuna installazione. Al primo avvio è richiesto un codice di licenza nominale che è generabile gratuitamente dalla pagina compilando il form.
Mi auguro che il software sia di vostro gradimento e che questo post sia stato interessante e non troppo noioso. A presto!
Tutte le informazioni dettagliate riguardo il software sono disponibili qui. Per l’attivazione è necessaria una licenza d’uso gratuita:
Se questo post o il software ti sono stati utili e ti va di offrirmi un caffè per tenermi sveglio durante le sessioni di coding notturne puoi tranquillamente visitare il link qui sotto.
Riferimenti
- Agatston AS et al. Quantification of coronary artery calcium using ultrafast computed tomography. J Am Coll Cardiol. 1990;15:827–832.
- McClelland RL et al. Distribution of coronary artery calcium by race, gender, and age: results from the Multi-Ethnic Study of Atherosclerosis (MESA). Circulation. 2006;113:30–37.
- SCOT-Heart Investigators. Coronary CT angiography and 5-year risk of myocardial infarction. N Engl J Med. 2018;379:924–933.
- Pawade T et al. Computed tomography aortic valve calcium scoring in patients with aortic stenosis. Circ Cardiovasc Imaging. 2018;11:e007146.
- Vahanian A et al. 2021 ESC/EACTS Guidelines for the management of valvular heart disease. Eur Heart J. 2022;43:561–632.
- Föllmer B et al. Automated segment-level coronary artery calcium scoring on non-contrast CT: a multi-task deep-learning approach. Insights into Imaging. 2024;15:225. doi:10.1186/s13244-024-01827-0
PyCa è uno strumento di ricerca, fornito “AS IS”. Non è un dispositivo medico, non è validato per uso clinico, non sostituisce in alcun caso il giudizio del medico. © 2026 Vittorio Censullo — AITeRTC ETS.
CREDITS E ENDORSEMENT
- AITeRTC ETS – Denisa Simona Zai, Chiara Martini, Luca Barbato e il Comitato Scientifico