E4D Technologies, now Planmeca · May 2022–present
Developing a commercial 3D scanner
Processing architecture, production calibration, and reconstruction software for a commercial intraoral scanner. The case studies cover the implementations and the measurements used to evaluate them.
One product with connected problems
A 3D scanner has to acquire images, turn them into measurements, estimate its motion, and reconstruct a surface. Here, each frame sees a tiny patch of teeth in a wet environment with moving soft tissue. My reconstruction estimates motion from geometry, without inertial input. Errors can originate anywhere along that path. The tools used to evaluate the result need to distinguish those mechanisms before a change can be trusted.
My work for E4D Technologies, now Planmeca, has spanned these parts of the scanner. I rebuilt calibration solvers, developed acquisition and reconstruction software, and built instruments to investigate accuracy. The case studies below describe my contributions within the wider product, including which implementations reached production and which were delivered for evaluation.
I joined E4D as an employee in May 2022 and moved to a dedicated remote contract in April 2023. The engagement continued through Planmeca's acquisition of E4D in May 2024.
Establishing the processing architecture
I reworked the C++/CUDA scanner's shared frame representation to make buffer ownership and CPU/GPU transfers explicit. The change also updated recorded-data replay to use the revised ownership rules.
I extended the registration implementation with shared computation and dispatch across alignment methods, then introduced a SLAM component that coordinated tracking, model updates, and refinement. I integrated that component into scanner services, moving the coordination out of the service's per-frame processing code.
Other engineers subsequently extended the SLAM component to support CPU-based alignment and revised the frame and buffer interfaces as the system evolved. These interfaces connected work across the team; their implementations continued to change as colleagues developed the scanner.
Making calibration dependable
My calibration work included camera-target detection, centroid refinement, decoded pattern-label validation, and the camera and pattern solvers. I corrected detection and model-conversion errors that caused failed fits. Working through the model also revealed a parameter that could not be determined from the available data.
Read the calibration case study →
Reconstructing through tracking loss
An intraoral scanner repeatedly loses sight of the surface. I developed a geometry-only SLAM architecture that can continue as separate fragments and reconnect them when overlap is found.
I also delivered an offline refinement engine for client evaluation. A replay study used the client's decoded frames and starting poses to compare the refined surfaces against industrial references across a corpus of model scans. The detailed study separates those surface results from the evaluation of tracking and trajectory correction.
Read the reconstruction case study →
Measuring the whole system
I built tools to compare recorded scans against industrial ground truth and separate calibration effects from registration and reconstruction errors. Those investigations also exposed limits in the measurement setup itself, including a periodic positioning error in the calibration station's translation stage that the usual sweep could not resolve.
Read the metrology case study →
The software around the algorithms
The same product required work on data acquisition, registration, and interfaces that let research and production use the same implementation:
- Acquisition runtime: a Rust driver and processing pipeline for streaming scanner data and turning it into depth measurements.
- Registration: a family of methods for point clouds and RGB-D frames, with different error models, correspondence searches, and confidence weights across CPU and GPU implementations.
- Research and production interfaces: Python bindings over the production C++/CUDA core, and a C interface that handles internal coordinate conventions, memory ownership, and failures for the client evaluating the Rust engine.
Client work for E4D Technologies, now Planmeca, described at a technical level. References are available on request.