In questa guida utilizziamo GX-TXT per ricavare informazioni quantitative da una microfotografia ottica di tessuto vegetale. L’esperimento comprende la calibrazione micrometrica, la digitalizzazione dei contorni di quattro stomi e la successiva analisi geometrica mediante l’editor Python integrato nel framework.

Il Curve Digitalizer si occupa esclusivamente dell’acquisizione delle coordinate. Il calcolo delle aree, dei perimetri e l’interpolazione dei contorni sono affidati a uno script Python che utilizza le API pubbliche GX-TXT.

1. Materiale e obiettivo

La microfotografia utilizzata proviene da un articolo pubblicato su Frontiers in Plant Science, DOI 10.3389/fpls.2025.1676435.

Abbiamo selezionato il pannello B, relativo a stomi di Borago officinalis, conservando la barra di riferimento da 50 µm.

Il file utilizzato per l’esperimento è borago_panel_B_complete.png, con dimensioni di 847 × 568 pixel.

Anteprima in GX-TXT della microfotografia ottica di stomi di Borago officinalis con barra di scala da 50 µm.
Figura 1 — Microfotografia ottica utilizzata nell’esperimento, con la barra micrometrica originale.

L’obiettivo consiste nel digitalizzare due contorni per ciascuno stoma: il limite esterno dell’apparato stomatico e quello dell’apertura centrale, o poro stomatico.

Da queste coordinate ricaveremo successivamente superfici e perimetri, distinguendo sempre i dati sperimentali dalle rappresentazioni matematiche interpolate.

2. Creazione della sessione e importazione

Dalla sezione Acquisition → Image importer abbiamo importato la microfotografia come Canonical Image Dataset, assegnandole l’identificativo borago_panel_b_complete.

Interfaccia di acquisizione GX-TXT con la microfotografia degli stomi inserita nella coda di importazione.
Figura 2 — Importazione della microfotografia attraverso la procedura standard di acquisizione GX-TXT.

Successivamente abbiamo aperto Viewers → Digitalizer, creato la configurazione stomi06 e associato esplicitamente il Dataset immagine.

La verifica dell’anteprima ha consentito di controllare l’integrità della sorgente prima di procedere con la calibrazione.

3. Calibrazione geometrica

Per convertire le coordinate dell’immagine in grandezze fisiche abbiamo utilizzato la barra micrometrica presente nella fotografia.

Nella scheda Calibration è stata selezionata la calibrazione dell’intera immagine, impostando entrambi gli assi come lineari e mantenendo l’asse Y crescente verso l’alto.

Con Scale bar → Endpoints sono stati individuati i due estremi della barra da 50 µm.

Curve Digitalizer durante la selezione dei due estremi della barra di riferimento da 50 µm.
Figura 3 — Selezione dei due estremi della barra di calibrazione nel Curve Digitalizer.

La distanza rilevata è stata:

$$d_{\mathrm{pixel}}=230{,}3352518\,\mathrm{px}$$

Da cui il fattore di conversione:

$$s=\frac{50}{230{,}3352518}$$
$$s=0{,}2170749\,\mathrm{\mu m/px}$$

La scala è stata applicata mediante Apply scale.

Pannello Calibration di GX-TXT dopo l'applicazione della conversione da pixel a micrometri.
Figura 4 — Applicazione della scala micrometrica al sistema di coordinate.

La misura di calibrazione è stata successivamente accettata, raggiungendo lo stato Active · accepted.

Curve Digitalizer con la misura micrometrica nello stato Active e accepted.
Figura 5 — Stato della calibrazione dopo l’accettazione.

La precisione numerica del fattore di conversione non deve essere confusa con l’accuratezza della misura. La selezione dei riferimenti sulla barra e la qualità dell’immagine introducono inevitabilmente incertezze.

4. Preparazione dell’immagine per la digitalizzazione

Prima di procedere alla digitalizzazione dei contorni, l’immagine è stata elaborata attraverso gli strumenti di Image Processing del Curve Digitalizer.

Lo scopo non era modificare le dimensioni delle strutture, ma migliorare la leggibilità dei bordi.

I parametri utilizzati sono stati:

ParametroValore
Brightness/contrastAttivo
Brightness0,0
Contrast39,0
Show processed previewAttivo
Altri filtri visibiliDisattivati
Pannello Image Processing con confronto Original e Processed, luminosità 0,0 e contrasto 39,0.
Figura 6 — Confronto fra immagine originale ed elaborata, insieme ai parametri utilizzati per migliorare la leggibilità degli stomi.

La possibilità di confrontare direttamente Original e Processed è particolarmente utile in questo esperimento.

La regolazione del contrasto rende più riconoscibili alcuni margini, ma non elimina le ambiguità della microscopia ottica. In particolare, le sfumature dei bordi cellulari possono rendere difficile identificare un contorno univoco.

Poiché la regolazione è fotometrica e non geometrica, la calibrazione spaziale conserva la propria validità.

5. Digitalizzazione degli stomi

Abbiamo selezionato quattro stomi sufficientemente distinguibili nell’immagine.

Per ciascuno sono stati acquisiti due contorni indipendenti:

StomaContorno esternoPoro stomatico
01stoma_01_outerstoma_01_pore
02stoma_02_outerstoma_02_pore
03stoma_03_outerstoma_03_pore
04stoma_04_outerstoma_04_pore

I contorni esterni rappresentano il limite selezionato dell’apparato stomatico; quelli interni seguono invece il margine dell’apertura centrale.

Microfotografia botanica nel Curve Digitalizer con quattro contorni esterni e quattro contorni dei pori.
Figura 7 — Contorni esterni e interni dei quattro stomi acquisiti dall’operatore mediante Curve Digitalizer.

Il dataset contiene complessivamente 450 punti:

  • Sette curve con 50 punti ciascuna.
  • Una curva, stoma_04_outer, con 100 punti.

L’ordine dei punti è quello di inserimento. Non è stata richiesta alcuna monotonicità.

Questa impostazione è necessaria perché un contorno chiuso non può essere descritto correttamente mediante il semplice ordinamento per ascissa.

La qualità dei contorni dipende dalla visibilità dei bordi e dall’interpretazione dell’operatore. Non è possibile garantire un tracciamento geometricamente perfetto.

6. Pubblicazione del dataset

Completata la digitalizzazione, nella scheda Publish abbiamo selezionato la calibrazione accettata e pubblicato i risultati.

Il Dataset generato è:

digitized.stomi06.measurement_1.curves

Scheda Publish del Curve Digitalizer con le curve degli stomi e la calibrazione selezionata.
Figura 8 — Preparazione della pubblicazione delle curve digitalizzate come Dataset numerico GX-TXT.

Il contratto del Dataset è table.generic.

Le colonne pubblicate sono:

ColonnaSignificato
xCoordinata X in µm
yCoordinata Y in µm
curve_idIdentificativo stabile della curva
curve_labelNome leggibile della curva
point_indexOrdine del punto nella curva
point_idIdentificativo del punto
pixel_xCoordinata X nell’immagine originale
pixel_yCoordinata Y nell’immagine originale

Sono quindi conservate sia le coordinate fisiche sia le coordinate nell’immagine sorgente.

7. Elaborazione con l’editor Python integrato

Per eseguire le analisi geometriche abbiamo utilizzato Python Script Workspace, già disponibile nel framework.

Lo script stomata_06_user_contours.py è stato registrato nella sessione con identificativo guida06stomi, versione 1.0.0.

L’accesso al Dataset avviene attraverso il client pubblico di GX-TXT:

from gxtxt import (
    gxtxt_context,
    gxtxt_api_require,
    gxtxt_api_call,
)

dataset_id = "digitized.stomi06.measurement_1.curves"

gxtxt_api_require("CANONICAL_DATASET_API_v2@2")

metadata = gxtxt_api_call(
    "CANONICAL_DATASET_API_v2",
    "describe",
    [dataset_id],
)

Per leggere i punti è possibile invocare read_range, utilizzando i Variable ID effettivamente associati alle coordinate e ai contorni.

Lo script raggruppa le coordinate per curva e le riordina secondo point_index.

Calcolo dell’area

Per un contorno poligonale chiuso viene applicata la formula di Gauss:

$$A=\frac{1}{2}\left|\sum_{i=1}^{n}(x_i y_{i+1}-x_{i+1}y_i)\right|$$

Calcolo del perimetro

Il perimetro è ottenuto sommando le distanze fra vertici consecutivi:

$$P=\sum_{i=1}^{n}\sqrt{(x_{i+1}-x_i)^2+(y_{i+1}-y_i)^2}$$

Lo script chiude numericamente il profilo collegando l’ultimo punto al primo, senza modificare il Dataset originale.

Per ciascuno stoma vengono quindi calcolati l’area esterna, l’area del poro, l’area per differenza e il rapporto fra le due superfici.

Risultati sperimentali

StomaArea esterna (µm²)Area poro (µm²)Area per differenza (µm²)Poro/esterno
01324,4322,29302,146,87%
02390,3524,94365,416,39%
03329,3824,99304,387,59%
04296,4924,49272,008,26%
Media335,1624,18—7,28%

I perimetri calcolati sono:

StomaEsterno (µm)Poro (µm)
0166,7034,75
0274,0835,26
0366,2027,00
0463,2728,15

La deviazione standard campionaria delle aree dei pori è 1,28 µm².

Questa grandezza descrive la dispersione delle misure fra i quattro contorni, non l’incertezza di ogni singola misura.

Grafico cartesiano in micrometri dei contorni esterni e delle aperture stomatiche ricavati dai punti digitalizzati.
Figura 9 — Rappresentazione dei contorni esterni e interni ottenuta dalle coordinate pubblicate.

L’esecuzione dello script nell’editor Python di GX-TXT è terminata con stato PASS e codice di uscita 0.

Interfaccia Python Script Workspace durante la procedura di esecuzione dello script di analisi degli stomi.
Figura 10 — Esecuzione e verifica dello script nell’ambiente integrato GX-TXT.

8. Interpolazione dei contorni mediante spline

Le curve digitalizzate rappresentano profili chiusi, per i quali non è generalmente appropriata una funzione del tipo \(y=f(x)\).

Abbiamo quindi utilizzato una rappresentazione parametrica:

$$x=x(t),\qquad y=y(t)$$

Il parametro \(t\) viene definito sulla base della lunghezza cumulativa delle corde fra i vertici.

Attraverso scipy.interpolate.CubicSpline sono state costruite spline cubiche periodiche che attraversano i punti acquisiti.

Questa elaborazione è contenuta nello script stomata_06_periodic_fit.py.

Quattro grafici di stomi con punti digitalizzati e spline cubiche periodiche dei contorni esterni e dei pori.
Figura 11 — Confronto fra punti digitalizzati e spline cubiche periodiche per i quattro stomi. Sono rappresentati separatamente i contorni esterni e quelli dei pori.

La rappresentazione interpolata permette di visualizzare i profili con maggiore continuità e di confrontare l’area del poligono originale con quella della curva interpolata.

StomaContornoArea poligono (µm²)Area spline (µm²)Differenza
01Esterno324,4279325,3744+0,29%
01Poro22,289322,4751+0,83%
02Esterno390,3491391,4748+0,29%
02Poro24,936825,1435+0,83%
03Esterno329,3790330,5078+0,34%
03Poro24,994425,1140+0,48%
04Esterno296,4921296,7113+0,07%
04Poro24,488124,6059+0,48%

Le differenze sono contenute fra +0,07% e +0,83%.

Questo confronto descrive l’effetto numerico dell’interpolazione. Non dimostra che la curva interpolata sia anatomicamente più accurata del contorno digitalizzato.

9. Utilizzare le API pubbliche da Python

Un aspetto interessante dell’esperimento è la possibilità di interrogare le informazioni scientifiche già pubblicate dal Curve Digitalizer.

Non è necessario conoscere anticipatamente la posizione delle colonne nel CSV o affidarsi esclusivamente ai loro nomi.

La documentazione di GX-TXT prevede una API pubblica specifica:

CURVE_DIGITIZER_DATASET_SCHEMA_API_v1

Questa API associa i ruoli semantici alle variabili effettivamente pubblicate.

Nella versione utilizzata essa è accessibile direttamente dall’ambiente Tcl del framework, ma non è ancora registrata come chiamata diretta nel Python Script Bridge.

Python può comunque recuperare indirettamente le informazioni pubblicate interrogando le API pubbliche del CORE.

Le API interessate sono:

  • DATASET_METADATA_API_v1
  • DATASET_VARIABLE_SCHEMA_API_v3
  • CANONICAL_DATASET_API_v2

Un esempio di interrogazione è:

from gxtxt import gxtxt_api_require, gxtxt_api_call

dataset_id = "digitized.stomi06.measurement_1.curves"

gxtxt_api_require("DATASET_METADATA_API_v1@1")
gxtxt_api_require("DATASET_VARIABLE_SCHEMA_API_v3@3")
gxtxt_api_require("CANONICAL_DATASET_API_v2@2")

metadata = gxtxt_api_call(
    "DATASET_METADATA_API_v1",
    "read",
    [dataset_id],
)

schema = gxtxt_api_call(
    "DATASET_VARIABLE_SCHEMA_API_v3",
    "list",
    [dataset_id],
)

description = gxtxt_api_call(
    "CANONICAL_DATASET_API_v2",
    "describe",
    [dataset_id],
)

Il Dataset del Curve Digitalizer contiene metadati che associano ruoli quali curve_key, curve_name e point_order agli effettivi Variable ID.

Una volta recuperate e validate queste associazioni, Python può leggere le colonne corrette tramite la Canonical Dataset API.

Il file stomata_06_api_discovery.py contiene un esempio esplorativo di questa procedura, ancora da validare attraverso un’esecuzione completa nell’editor.

Quality API

La CURVE_DIGITIZER_QUALITY_API_v2 è invece direttamente disponibile dal Python Script Bridge.

Permette di interrogare informazioni diagnostiche relative ai punti e alle curve pubblicate.

Per esempio:

from gxtxt import gxtxt_api_require, gxtxt_api_call
import json

gxtxt_api_require("CURVE_DIGITIZER_QUALITY_API_v2@2")

quality = gxtxt_api_call(
    "CURVE_DIGITIZER_QUALITY_API_v2",
    "diagnostics",
    [dataset_id],
)

report = json.loads(quality["report_json"])

for curve in report["curves"]:
    print(
        curve["curve_label"],
        curve["point_origins"],
    )

Questa API fornisce informazioni strutturali e diagnostiche, ma non certifica l’accuratezza dei contorni.

Image Processing API

La CURVE_DIGITIZER_IMAGE_PROCESSING_API_v1 consente di recuperare le operazioni di elaborazione e la provenienza di immagini elaborate e pubblicate come Dataset.

Nel nostro esperimento il contrasto è stato utilizzato principalmente come anteprima per facilitare la digitalizzazione. Non va quindi confusa questa regolazione visuale con la pubblicazione di un nuovo Dataset immagine elaborato.

Calibration API

La CURVE_DIGITIZER_CALIBRATION_API_v1 dispone di metodi pubblici Tcl per interrogare le calibrazioni e le trasformazioni geometriche.

Anche se non direttamente esposta nel Python Script Bridge della versione utilizzata, alcune informazioni di calibrazione pubblicate sono accessibili indirettamente mediante le API di metadata del CORE.

10. Limiti metrologici e interpretazione

L’esperimento mostra un percorso di acquisizione ed elaborazione numerica, ma non costituisce una misura morfometrica biologicamente validata.

I contorni dipendono dalla qualità della microfotografia, dalla visibilità dei bordi e dalle scelte dell’operatore durante la digitalizzazione.

Il miglioramento del contrasto facilita il lavoro, ma non recupera informazioni anatomiche assenti nell’immagine originale.

Anche l’interpolazione mediante spline rappresenta una scelta matematica: può produrre un contorno più continuo senza necessariamente aumentarne l’accuratezza fisica.

Quattro stomi selezionati nella stessa microfotografia non costituiscono repliche biologiche indipendenti.

Un’analisi più rigorosa richiederebbe un protocollo definito per individuare i margini, valutazioni ripetute e una stima dell’incertezza della calibrazione e del posizionamento dei punti.

La differenza fra area esterna e area del poro deve inoltre essere interpretata come area geometrica planare, non automaticamente come superficie anatomica reale delle cellule di guardia.

11. Materiale per riprodurre l’esperimento

Conclusione

La Guida 06 dimostra un processo completo di acquisizione e analisi:

Microfotografia ottica → preparazione dell’immagine → calibrazione micrometrica → digitalizzazione dei contorni → pubblicazione dei dataset → elaborazione Python → rappresentazione interpolata e analisi geometrica.

L’aspetto fondamentale è la separazione delle responsabilità: il Curve Digitalizer acquisisce e pubblica i dati, mentre l’editor Python e le API pubbliche di GX-TXT permettono di elaborarli scientificamente.

#analisi morfometrica #API pubbliche #Borago officinalis #botanica #calibrazione micrometrica #Curve Digitalizer #Dataset scientifici #digitalizzazione scientifica #elaborazione immagini #GX-TXT #microfotografia #microscopia ottica #Python #spline cubiche #stomi fogliari

Altre tappe del progetto

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *