Overview

Generate deterministic multi-scale blob patterns and printable calibration boards for computer vision.

Overview

BlobBoards.jl creates calibration targets with blob patterns that are:

  • Deterministic: Bit-exact reproducible via seeded configuration
  • Multi-scale: Logarithmically distributed blob sizes for scale-invariant detection
  • Print-ready: PDF output with rulers, QR codes, and metadata
  • Configurable: Physical units (mm, inch) with compile-time unit checking

Quick Start

using BlobBoards      # re-exports the units: mm, inch, px, dpi, …using CairoMakie      # loads the board-authoring extension (blob_board)# Generate a printable A4 calibration boardbundle = blob_board("A4", 300dpi; blob_sizes=(4.0mm, nothing), seed=0x1234, dir="./output")# Generate a pattern for training/simulation (core package only)pattern, discs, config = blob_pattern(800, 600; blob_sizes=(12px, nothing), seed=0x1234)# Extract blobs from saved filesbundle, _ = BlobBoards.load("blob_board.json")b = blobs(bundle, :pattern; units=mm)

CairoMakie is a weak dependency, so it cannot be loaded from the package's own --project=. environment; use the checkout's authoring/ companion env (julia --project=authoring) or add CairoMakie to your own environment. See Getting Started. Without it blob_board has no methods.

Key Concepts

Patterns vs Boards

  • Pattern (blob_pattern): A blob pattern image in pixel/logical units. Used for training, simulation, or embedding in custom layouts.
  • Board (blob_board): A complete calibration board with borders, rulers, QR code, and UID markers. Ready for printing.

Unit System

Units are enforced at compile-time via DynamicQuantities.jl, through VisualGeometryCore's VgcQuantity. BlobBoards re-exports mm, cm, inch, px, dpi, and friends, so using BlobBoards is all you need:

Unit TypeExamplesDescription
LogicalpxPixels (dimensionless)
Physicalmm, inch, cmReal-world lengths
DensitydpiDots per inch

Critical distinction:

  • blob_pattern(): blob_sizes are disc diameters in logical units (px, e.g. (12px, nothing))
  • blob_board(): blob_sizes are printed disc diameters in physical units (mm, inch, e.g. (4.0mm, nothing))
  • Both are stored as σ in px (min_scale/max_scale; a disc's diameter is 2·cutoff·σ)

Coordinate Specifications

BlobBoards uses three types of coordinate specifications:

TypeValuesPurpose
Image Origin:colmap, :opencv, :juliaPixel coordinate convention
Reference Frame:pattern, :board, :canvasSpatial origin on boards
Coordinate System:logical, :physical, :worldUnit system for transforms

See the Coordinates Guide for detailed documentation.

Features

Authoring

  • Deterministic patterns from seeded configurations
  • Physical units via DynamicQuantities (mm, inch, dpi, etc.)
  • Printable boards (PDF) or training images (PNG) with ruler, saddle, or blank frames
  • JSON serialization for exact reproduction
  • Blob extraction with multiple coordinate conventions
  • World coordinates for 3D calibration workflows

Detection and pose

  • find_boards — detect blobs, fit elliptical frames, canonicalize, describe, match against a board gallery, and estimate pose (P3P or homography)
  • Many boards located per image, each accepted on spatial consistency rather than quad segmentation, so partial occlusion is survivable
  • Backend-generic hot path (KernelAbstractions): CPU, CUDA, or any KA backend
  • track_boards for temporally warm-started video tracking

Tooling

  • Training pipeline: detect, track, and extract canonicalized patches from video
  • FileIO integration for .tracks files (HDF5 format)
  • Visualization helpers for Makie backends

Installation

With pixi (recommended):

git clone https://github.com/VisualGeometryToolkit/BlobBoards.jl
cd BlobBoards.jl
pixi install
pixi run julia --project=.

Manual setup: Requires Julia 1.12+ and Ghostscript (for PDF compression). See the Getting Started guide for detailed instructions, including the CairoMakie environment that board authoring needs.

Contents

Index

Role in the VisualGeometryToolkit stack

BlobBoards provides fiducial blob-board targets for the VisualGeometryToolkit stack: deterministic pattern generation, printable boards, detection, and calibration-grade correspondence ground truth. It consumes VisualGeometryCore.jl (geometry, units, blob detection) and RobustVisualGeometry.jl (robust correspondence/pose estimation).

All toolkit documentation is aggregated at the portal: https://visualgeometrytoolkit.github.io.