# Measuring per-tooth displacement between serial intraoral scans - which modules?

**URL:** <https://discourse.slicer.org/t/measuring-per-tooth-displacement-between-serial-intraoral-scans-which-modules/47723>\
**Category:** Support\
**Tags:** extensions-manager, python, extensions, displacement-field\
**Created:** [July 23, 2026, 12:31pm UTC](https://discourse.slicer.org/t/measuring-per-tooth-displacement-between-serial-intraoral-scans-which-modules/47723 "2026-07-23T12:31:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alla\_Belova](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/alla_belova/32/79201_2.png) [@Alla\_Belova](https://discourse.slicer.org/u/Alla_Belova)\
**Post date:** [July 23, 2026, 12:31pm UTC](https://discourse.slicer.org/t/measuring-per-tooth-displacement-between-serial-intraoral-scans-which-modules/47723/1 "2026-07-23T12:31:26Z")

</div>

Hi all — I’m a dentist working on a PhD metrology project and I kindly ask for your help to build an efficient protocol for measuring tooth displacement in time.

**The data:** five surface meshes (STL) of the same mandibular arch, scanned intraorally at different timepoints (baseline, immediately after splinting, then 1, 3 and 6 months). The lower anterior segment (six teeth) is splinted, and I want to measure whether/how it moves over time while treating the posterior teeth as a stable reference.

**What I want to measure:**

- Rigid, whole-surface **best-fit superimposition** (no scaling), registered on the _posterior_ teeth as the stable region.
- **Per-landmark displacement** for six anterior points — signed components along vestibulo-oral / mesio-distal / vertical axes (ΔX, ΔY, ΔZ) and the 3D resultant ΔR — not just a scalar surface distance.
- Each point’s **perpendicular deviation from a curve** fitted through the six landmarks at baseline (landmarks: incisal-edge midpoints on the incisors, cusp tips on the canines).
- From 15 repeat scans my method noise is ~0.08 mm, so I’m working close to that limit.

**What I’m looking at in Slicer** (and where I’d love guidance):

- **Markups** for the points, and a Markups **Curve** for the anterior curve — is that the right way to trace and measure deviation from it?
- **Model Registration / SurfaceToolbox** vs. the **Model-to-Model Distance** extension — which gives me _signed per-axis_ displacement rather than only closest-point distance?
- **SlicerMorph** (and **ALPACA** ) for placing/transferring the landmarks consistently across the five timepoints — worth it here, or overkill for six points?

**Specific questions:**

1. How do I constrain the best-fit to register on the posterior sub-region while measuring the anterior segment?
2. What’s the cleanest way to get **per-axis (X/Y/Z) components** of each landmark’s movement between timepoints?
3. Automated landmark transfer across scans vs. manual picking — what would you recommend at this scale and precision?
4. Is there a way to automate the whole process (ex. write a code)?

Screenshot of the marked reference points and the traced anterior curve below.

 ![reference points_curve](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/7/5/758e5f13b756e84c8f24961503b068fe7c2bdcaa.jpeg)

 ![reference points](https://us1.discourse-cdn.com/flex002/uploads/slicer/original/3X/a/d/ade341cf8ab125f1beea897083b770bcc6259303.jpeg)  
Any help is appreciated. Many thanks!

---

<div class="post-metadata">

**Author:** ![drnoorfatima](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/drnoorfatima/32/81980_2.png) [@drnoorfatima](https://discourse.slicer.org/u/drnoorfatima)\
**Post date:** [July 25, 2026, 4:15pm UTC](https://discourse.slicer.org/t/measuring-per-tooth-displacement-between-serial-intraoral-scans-which-modules/47723/2 "2026-07-25T16:15:37Z")

</div>

> 🤖 This post contains AI-generated content.

Hi Alla,

This is very doable via a Python script inside 3D Slicer. Posterior-constrained registration, per-axis X/Y/Z displacement table for all five timepoints, and curve deviation, all automated, output straight to CSV.

I have built pipelines like this for medical imaging workflows. DM me if you want this handled.

---

<div class="post-metadata">

**Author:** ![drnoorfatima](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/drnoorfatima/32/81980_2.png) [@drnoorfatima](https://discourse.slicer.org/u/drnoorfatima)\
**Post date:** [July 25, 2026, 4:15pm UTC](https://discourse.slicer.org/t/measuring-per-tooth-displacement-between-serial-intraoral-scans-which-modules/47723/3 "2026-07-25T16:15:56Z")

</div>

[noorfatimacheema249@gmail.com](mailto:noorfatimacheema249@gmail.com)
