Forensic dental biometrics · certified · open source

A face can be lost.
The teeth still know who you are.

ToothPrint reads a dental arch three ways — who it belongs to, whether it changed, and where its surface moved — and returns a certificate, not a guess. Every verdict carries a finite-sample false-alarm bound, and identity holds even when half the teeth are gone.

Rank-1 · 200 3D scans
0.995
Rank-1 · 50% tooth loss
0.87
Conformal false-match
≤ α

preprint · DOI 10.31224/7403 v1.0.0 · changelog PolyForm Noncommercial — free incl. hospitals

A genuine re-scan settles at 0.05 mm — a stranger's nearest fit floats 4.5 mm off the surfacematch vs no-match

The ledger

Held to the bar that matters — and honest about the rest

Measured on public single-timepoint data (Poseidon3D, Teeth3DS+, DenPAR, Figshare CBCT+IOS) with synthetic re-scans and crops, so the numbers are in-simulation ceilings. The one binding gate — real cross-session data — is stated plainly below.

Certificate of analysis · per capability
CapabilityResultStatus
Identity — 3D scansRank-1 0.995 · EER 0.005 · AUC 0.997 · open-set FNIR 0.030 · 0.05 mm fidelity✓ pass
Identity — partial overlapRank-1 0.87 at 50% tooth loss — ≈3.8× rigid GICP's 0.23 (learned correspondence)✓ pass
Identity — 2D radiographsRank-1 1.000 (N=400, EER 0), robust to jitter & magnification✓ pass
Identity — certified decisionFNIR@FMR=1% 0.00 full coverage; abstains under heavy tooth loss✓ pass
Dental-work biometricRank-1 0.93 CBCT · 0.91–0.99 radiograph (restoration pattern)✓ pass
Change — measurementrecall 0.98 at a true 0% false-progression rate✓ pass
Change — fully automatic0.91 end-to-end (YOLO26-pose detector; 0.98 measurement ceiling)◐ detector-limited
Surface certificatelocalized recall 0.99 vs 0.00 naive, to 0.4 mm noise, 0% false-change✓ pass
Reconstruction (photos → mesh)≈0.3 mm median 2DGS mesh, 38% better than 3DGS✓ pass

Specificity is the design target: the conformal false-positive rate is bounded by α in finite samples, and held a true 0 in most tests. All identity numbers come from public single-timepoint scans with synthetic re-scans/crops — read them as ceilings, not field performance.

01 · Who — identity

Recognise a person by their teeth — even half of them

A genuine re-scan settles onto its enrolled arch; a stranger's anatomy cannot. The hard case is a query missing teeth, where every rigid method collapses — ToothPrint recovers it with a learned point-correspondence matcher.

Score separation, CMC, conformal false-match tracking, and open-set decision behaviour across 200 Poseidon3D arches.
Full-coverage identity on 200 Poseidon3D arches — separation · CMC · conformal FMR · open-set DIRRank-1 0.995 · AUC 0.997
Detection-error-tradeoff curves per identity pillar — the first full DET curves reported for dental identity.
Detection-error-tradeoff curves per pillar — the first full DET reported for dental identityEER 0.5%
Rank-1 · 3D scans (N=200)0.995
EER · AUC0.005 · 0.997
Rank-1 · 2D radiographs (N=400)1.000
Open-set FNIR @ 1% FPIR0.030

Full coverage: best rigid fit to each arch (PCA-axis init → Generalized-ICP), smallest surface distance wins — shape, not pose. Partial overlap: CorrNet learns a descriptor per point and verifies a half-arch by mutual-nearest-neighbour correspondence plus a rigid Procrustes residual, lifting 50%-loss identity from 0.23 to 0.87.

02 · Whether — change

Did the bone level really change between visits?

Re-positioning, exposure, and detector error swamp a real sub-millimetre shift. ToothPrint measures it differentially — registering the bone-margin patch against a stationary crown reference — and certifies the change only when its conformal interval clears the clinical threshold.

Sub-pixel registration tracks a receding bone margin on a real radiograph — 16.2 px = 1.62 mmcertified changed
Measurement recall versus the conformal false-progression bound; the fully-automatic pipeline is detector-limited.
Measurement recall vs the conformal false-progression bound0.98 @ 0%
Measurement recall0.98
False-progression rate0.000
End-to-end (YOLO26-pose)0.91
Stable-pair noise floor0.1 px

YOLO26-pose localises the CEJ/bone-crest (median 18 px); sub-pixel template matching measures the margin shift against a stationary reference; a conformal certificate decides — and never certifies change it cannot distinguish from acquisition noise. The 0.91 ceiling is DenPAR label noise, shown not hidden: a 2× larger detector made it worse, so it is a data limit, not a method limit.

03 · Where — surface

Where did the 3D surface move?

From an intraoral scan or a handful of photos, ToothPrint certifies a surface change against the reconstruction's own error — so a real lesion is flagged, scanner noise is not, and the change is localized.

De-biasing extends usable reconstruction noise to 0.4 mm; a regional max statistic recovers a localized patch change a whole-surface average dilutes to zero, at zero false-change.
Localized recall vs reconstruction noise — regional max statistic vs whole-surface average0.99 vs 0.00
Localized surface change versus the M3C2 geomorphology-standard baseline.
Localized change vs the M3C2 geomorphology-standard baseline+ conformal bound
Localized recall0.99
Whole-surface average0.00
Usable recon noise0.4 mm
False-change rate0.000

De-biased (subtract the reconstruction-noise power a naive mean would rectify into false signal) → regional max displacement vs calibrated noise → conformal certificate that says where. Benchmarked against M3C2, the geomorphology-standard change distance; our complementary edge is the finite-sample false-change bound it lacks.

No scanner? · reconstruction

Photographs to a dentist-usable mesh

2D Gaussian-Splatting surfels lie on the surface, so meshing from the median (first-surface) depth is markedly sharper than 3DGS — a watertight arch from shaded photos, accurate enough to feed the surface certificate.

Shaded photos → 2DGS mesh → per-vertex error heatmap (ground-truth scan · reconstruction · error)≈0.3 mm median
Median mesh error≈0.3 mm
Improvement over 3DGS38%
Hardest arch2.4× sharper
Pipeline2DGS + TSDF

Oriented surfels + multi-view TSDF fusion rebuild a ~1 M-triangle mesh from shaded photos. Meshing from the median depth — the first-surface crossing, not the alpha-weighted mean that averages an arch's front and back walls — is what makes it sharp enough for the surface certificate.

The certificate, in your hands

A verdict fires only when the interval is sure

Drag the measured change. The conformal interval moves with it. The verdict turns changed only when the whole band clears the change threshold, stable only when it sits entirely below the stable threshold — and abstains everywhere between, on purpose.

verdictstable
measured
0.30 mm
interval
[0.19, 0.41]
conformal α
0.10
thresholds
0.35 / 0.75
stable
abstain
changed

interval = measured ± conformal radius · radius grows with reconstruction noise · scale 0–2.0 mm · thresholds: stable 0.35 mm / change 0.75 mm

Runs on your machine

ToothPrint Studio — a certificate of dental analysis

Drop in any scan, radiograph, or patient video (it plays in-place with play / pause / seek), run an examination, and log every finding with its conformal interval. Export the whole case as a self-contained PDF report. Files never leave the machine.

ToothPrint Studio during an examination: the patient's intraoral video plays in-place, the specimen is recorded, and each finding is logged with its conformal interval.
Studio — examination view, findings logged with intervalslocal-only
The exported ToothPrint PDF report: inputs, every finding, method, provenance, and limitations on one self-contained sheet.
Studio — exported PDF report: inputs · findings · method · limitsprovenance

Open the shell → studio.html renders the case-file interface in your browser; running examinations needs the local ToothPrint service (uvicorn api.main:app), so specimens never leave the machine.

What the numbers do not claim

The honest limits

A research tool earns trust by stating where it stops. None of these is hidden — each is in the paper, the README, and the committed result JSONs.

  • The binding gate — real cross-session data. Every identity number rests on synthetic re-scans of single-timepoint public data. No code closes this; it needs a real same-patient longitudinal dataset.
  • Open-set rejection collapses under heavy tooth loss. A half-arch fits many gallery arches, so beyond 50% loss the certified decision abstains rather than risk a false accept.
  • The learned matcher carries a cross-dataset gap. CorrNet trained on Poseidon3D drops 0.87 → 0.42 on a different real dataset (Teeth3DS+) — above chance and above rigid GICP, but not full transfer.
  • Change is detector-limited. End-to-end recall caps near 0.91 on DenPAR label noise, short of the 0.98 measurement ceiling.
  • Not a cleared medical device. Findings are advisory and expert-confirmed; the conformal guarantee holds only on the calibrated distribution.

The binding gate · open progress

Help wanted — real longitudinal data

Every identity number here is measured on single-timepoint public data with synthetic re-scans, so read them as ceilings. The one missing ingredient — real same-patient scans across two timepoints — sits behind academic data-use agreements. That gap is the whole distance between ToothPrint and a field-validated claim, and it is open: I'm looking for help.

  • Zenodo 113924061,060 real pre/post-orthodontic 3D intraoral pairs from 435 patients — our exact modality. Restricted record; access granted per-request under a Data Use Agreement.record ↗
  • PhysioNet Multimodal169 patients with multi-visit timestamps + CBCT + 16k periapical radiographs. Credentialed access (CITI training + PhysioNet license).record ↗

Can access either dataset, or know the maintainers? An introduction is worth as much as the data. Reach me at krishiattriwork@gmail.com — the DUA checklist lives in evaluation/DATA_GATE.md. Any contribution gratefully credited.

One signal, one stack

How it works

A real sequence: detect the dental geometry, register it, then certify — identity, change, or surface, or abstain.

in

Intraoral scan, periapical radiograph, CBCT mesh, or patient video.

detect

Teeth + landmarks (YOLO26-pose) or an arch point cloud.

register

Rigid best-fit (Generalized-ICP), learned point correspondence, or sub-pixel template matching.

certify

Conformal interval → identity · change · surface, or abstain.

Runs anywhere · no GPU for the certificates

Run it on your machine

The certification core depends only on numpy, scipy, opencv, open3d; the learned front-ends are optional. Reproducible from committed fixtures — no off-machine data.

# install — dev tools · file I/O · API · desktop Studio
pip install -e ".[dev,io,api,desktop]"

# the full test suite — 183 passing
python -m pytest -q

# end-to-end identity on committed fixtures, no off-machine data
TOOTHPRINT_FIXTURES=1 PYTHONPATH=. python evaluation/scripts/smoke_test.py
# -> Rank-1 1.000, SMOKE OK

# ToothPrint Studio — native window, falls back to the browser if headless
python -m desktop.app