BlobBoards

Robust Markers for Accurate Pose

BMVC 2026

James Pritts, Till Sittart, Hendrik Sauer, Silja Janßen, Felix Seegräber, David Nakath, Kevin Köser

Marine Data Science, Kiel University

A cluttered scene with twenty-five BlobBoards at many distances and angles, each outlined in a distinct colour with its blob pattern re-projected onto the board.
All 25 BlobBoards in the image are detected, identified, and registered against a 50-board gallery — 25 of its entries are absent confusers, and identification is still perfect. Colour distinguishes detections; the overlaid pattern shows registration accuracy across large variations in scale, distance, and obliquity.

Abstract

We propose BlobBoards, a fiducial marker system comprising a dense, multi-scale field of Gaussian blobs and a feature-based pipeline for joint detection, identification, and pose estimation. Each board is registered from hundreds of blob features whose dense spatial coverage constrains pose, while multiple scales preserve detectability across large changes in focal length, distance, and obliquity. Learned local descriptors are matched to the reference pattern and spatially verified, so the correspondences determine pose and certify identity. Against motion-capture ground truth, BlobBoards achieve median translation errors of 3.6–5.0 mm, reducing AprilTag's median translation error by 89% on small boards and 70% on large ones. They also produce far fewer large-rotation failures than state-of-the-art tag systems. BlobBoards achieve the highest detection rate, 80% versus 74% for AprilTag and 58% for ArUco, with the largest margin on the smallest markers. Under 50% occlusion, they still detect 69% of boards with essentially unchanged median translation error, while AprilTag and ArUco detect none. In experiments BlobBoards give state-of-the-art detection rate, pose accuracy and occlusion robustness.

Install BlobBoards

Pick a language and an install method to get the recommended command.

Language
Method
$

For manual setup (Julia 1.12+, Ghostscript) and the GPU environment, see the installation section of the README.

Features

Everything from a seeded pattern to a verified board pose, in one package.

Deterministic multi-scale patterns

Patterns are rendered bit-exactly from a seeded PatternConfig. Blob scales follow a logarithmic distribution, so some subset of blobs is detectable at any viewing distance.

Patterns guide

Printable calibration boards

PDF boards with rulers, QR metadata, and a compact UID, specified in physical units (mm, inch, dpi) that are checked at compile time. Every board ships with a JSON sidecar that reproduces it.

Boards guide

Detection to pose

find_boards detects blobs, fits elliptical frames, describes canonical patches, matches them against a board gallery, and estimates pose by P3P or homography — every board in the image, each verified by spatial consistency and by the appearance of its own inliers.

Detection and pose

Backend-generic GPU pipeline

Detection, adaptation, canonicalization, and matching are written once against KernelAbstractions: threaded CPU by default, CUDA or any other KA backend by passing a device. Descriptors run through ONNX Runtime.

Backends

Tracking and training data

track_boards warm-starts each video frame from the last. build_tracks turns video with ground-truth homographies into .tracks files of canonicalized blob patches for training local descriptors.

Board tracks

Python interface

The blobboards package wraps the Julia core through juliacall: patterns and boards come back as NumPy arrays and dataclasses, and physical parameters accept Pint quantities.

Python package

Method

A board is registered from hundreds of blob features, not from four corners — that is where the accuracy and the occlusion robustness come from.

(a) detect

A photographed board with affine blob detections drawn as many small ellipses.

(b) adapt

The same board with detections refined to anisotropic ellipses in magenta; twelve pose inliers are coloured individually.

(c) canonicalize

The twelve inlier blobs as 64 by 64 log-polar patches, each bordered in its ellipse colour.

(d) match & verify

The reference pattern projected onto the board under the recovered pose, with reference blob centres in green.
Blob detection-to-pose pipeline on a detected board. (a) Affine detections from the ASIFT scale space. (b) IRLS adaptation to anisotropic ellipses, magenta except the twelve pose inliers, which are coloured individually. (c) Those inliers canonicalized to 64×64 log-polar patches, each bordered in its ellipse colour from (b). (d) Descriptors matched and spatially verified: the pattern is projected under the recovered pose, with reference blob centres in green at opacity proportional to their geometric consistency with it.
A square blob pattern: large soft Gaussian blobs packed with progressively smaller ones down to single dots.
Generate. A seeded pattern packs blobs from several octaves of scale into one field. The same seed reproduces the same board, in Julia or Python.
A stack of printed boards photographed obliquely; the top board has every blob outlined in teal with its fitted ellipse.
Adapt and register. Each detected blob gets a fitted elliptical frame, is canonicalized into a patch, and described by a learned log-polar network. Matches to the reference pattern are spatially verified, so the correspondences determine pose and certify identity.
A rig of BlobBoards on a tripod in a motion-capture lab, with pose axes drawn on each detected board.
Evaluate. Poses are scored against motion-capture ground truth on a rig of boards at a range of sizes, distances, and angles, alongside AprilTag and ArUco.

Results

Against motion-capture ground truth, compared with AprilTag and ArUco on the same rig.

80%
boards detected — AprilTag 74%, ArUco 58% — with the largest margin on the smallest markers
3.6–5.0mm
median translation error, small to large boards
−89%
AprilTag's median translation error on small boards (−70% on large ones)
69%
boards still detected at 50% occlusion, with essentially unchanged median translation error; AprilTag and ArUco detect none

Getting Started

  1. Install BlobBoards using the selector above (pixi brings Julia, Python, and Ghostscript with it), or follow the manual setup.

  2. Generate and print a board. The PDF is vector, carries rulers for checking the print scale, and comes with a JSON sidecar holding the full configuration and every blob's coordinates.

    using BlobBoards
    
    # A4 board at 300 dpi, smallest blob σ = 1 mm → board PDF + JSON in ./out
    blob_board("A4", 300dpi; min_scale = 1.0mm, seed = 0xBEEF, dir = "./out")
    
    # Or a pixel pattern for simulation and training
    blob_pattern(800, 600; min_scale = 3px, seed = 0x1234, dir = "./out")

    Print at 100% scale; pass board_size if your printer scales the page.

  3. Detect boards and estimate their pose. The bundled example runs both the calibrated (P3P) and uncalibrated (homography) paths on images fetched from Hugging Face through the package's artifact catalog — no dataset setup. It targets a CUDA GPU, so it runs from the dev environment; the pipeline itself defaults to the CPU.

    julia --project=dev -e 'using Pkg; Pkg.instantiate()'
    julia --project=dev examples/pipeline/find_boards.jl

    In your own code the whole chain is one call:

    accepted = find_boards(gray_image, boards, network;
                           board_bundles = bundles, config, device = CUDABackend())
    for (uid, pose, _, _) in accepted
        # pose.R, pose.t: board → camera
    end

Support

Please use the GitHub issue tracker for bug reports, questions, and feature requests. The examples directory has runnable Julia scripts for generation, detection, tracking, and building training tracks; python/examples covers the Python package.

Citation

BlobBoards is described in BlobBoards: Robust Markers for Accurate Pose, BMVC 2026 (PDF, with supplementary material). If you use this project for your research, please cite:

@inproceedings{pritts2026blobboards,
  author    = {Pritts, James and Sittart, Till and Sauer, Hendrik and
               Jan{\ss}en, Silja and Seegr{\"a}ber, Felix and
               Nakath, David and K{\"o}ser, Kevin},
  title     = {{BlobBoards}: Robust Markers for Accurate Pose},
  booktitle = {British Machine Vision Conference (BMVC)},
  year      = {2026},
}

The paper's LaTeX source, figures, and evaluation scripts live in bmvc2026/ in the repository.

Acknowledgments

BlobBoards is developed by James Pritts with Till Sittart, Hendrik Sauer, Silja Janßen, Felix Seegräber, David Nakath, and Kevin Köser at Marine Data Science, Kiel University.

James Pritts is funded by Kiel Training for Excellence, an EU Horizon Europe programme under the Marie Skłodowska-Curie Actions (MSCA), grant agreement No. 101081480. The motion-capture setup was funded through the project OP der Zukunft as part of the REACT-EU program and provided by the Kurt Semm Centre for laparoscopic and robot-assisted surgery at the University Hospital of Schleswig-Holstein.