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 Type | Examples | Description |
|---|---|---|
| Logical | px | Pixels (dimensionless) |
| Physical | mm, inch, cm | Real-world lengths |
| Density | dpi | Dots per inch |
Critical distinction:
blob_pattern():blob_sizesare disc diameters in logical units (px, e.g.(12px, nothing))blob_board():blob_sizesare 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 is2·cutoff·σ)
Coordinate Specifications
BlobBoards uses three types of coordinate specifications:
| Type | Values | Purpose |
|---|---|---|
| Image Origin | :colmap, :opencv, :julia | Pixel coordinate convention |
| Reference Frame | :pattern, :board, :canvas | Spatial origin on boards |
| Coordinate System | :logical, :physical, :world | Unit 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_boardsfor temporally warm-started video tracking
Tooling
- Training pipeline: detect, track, and extract canonicalized patches from video
- FileIO integration for
.tracksfiles (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
- Quick Reference
- Getting Started
- Pattern Generation
- Authoring a Board
- Coordinate Systems
- Board Training Tracks
- Python Interface
- Public API
- Types
- Pattern API
- Board API
- I/O API
Index
BlobBoards.PRINT_SIZESBlobBoards.short_sideBlobBoards.AdaptConfigBlobBoards.BoardBundleBlobBoards.BoardConfigBlobBoards.BoardGalleryBlobBoards.BoardPreambleBlobBoards.DescriptorNetworkBlobBoards.DetectConfigBlobBoards.EllipseNmsBlobBoards.FindBoardsConfigBlobBoards.GalleryIndexBlobBoards.HomographyGeometryBlobBoards.LogicalBoardSizesBlobBoards.MxmNmsBlobBoards.PatternBundleBlobBoards.PatternConfigBlobBoards.PoseGeometryBlobBoards.RadialHomographyGeometryBlobBoards.RulerOrientationBlobBoards.RulerSpecBlobBoards.RulerTickBlobBoards.ShortSideFractionBlobBoards.adaptBlobBoards.annotate_blobsBlobBoards.blob_boardBlobBoards.blob_patternBlobBoards.blobsBlobBoards.build_absolute_tracksBlobBoards.build_tracks_for_sequencesBlobBoards.calc_blob_scalesBlobBoards.canonical_config_jsonBlobBoards.canonicalizeBlobBoards.describeBlobBoards.detect_blobsBlobBoards.example_dataBlobBoards.find_boardsBlobBoards.group_by_resolutionBlobBoards.hash_configBlobBoards.is_videoBlobBoards.loadBlobBoards.load_boardBlobBoards.load_bundleBlobBoards.make_filebaseBlobBoards.media_resolutionBlobBoards.mm_per_pxBlobBoards.place_blobsBlobBoards.plot_tracksBlobBoards.prepare_image_featuresBlobBoards.px_per_mmBlobBoards.saddle_pointsBlobBoards.saveBlobBoards.save_tracksBlobBoards.track_boardsBlobBoards.walk_media
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.