Goal
Detect inner X-junction corners of an unknown number of planar checkerboard patterns in a single grayscale camera image, with subpixel accuracy. Output: per-board corner sets at subpixel coordinates, ready for use as input to a calibration pipeline (Zhang's planar method, multi-camera bundle adjustment, or single-shot camera-to-range calibration). The defining property is that the number of squares per board is not required as input — the structure-recovery stage discovers all visible checkerboards and grows the grid graph from seed corners.
Algorithm
The detector runs in three stages: per-pixel response, per-corner refinement, and per-board structure recovery.
Stage 1 — Corner likelihood (§III-A)
Two prototype filters cover the two canonical X-junction orientations: axis-aligned (/) and -rotated. Each prototype is composed of four quadrant kernels around a candidate corner. For an ideal X-corner two diagonal quadrants should be on the bright side (above the four-quadrant mean ) and the other two on the dark side, or vice versa. The corner likelihood at a pixel is
with
and . The two prototypes give two responses each; the two operations within each deliberately suppress responses where any one quadrant is weak — a non-checkerboard corner with three strong quadrants and one missing scores low.
Conservative non-maximum suppression follows (parameters , ). Surviving candidates are then gradient-verified: a 32-bin orientation histogram of Sobel responses is computed in a local neighbourhood, the two dominant modes are found by mean shift, and an expected gradient template is constructed. The final score is the product times , thresholded at .
The whole pipeline is repeated at three fixed window sizes — , , — and the per-pixel maximum of the three scores is taken. This is the multi-scale strategy: not a full pyramid, just three discrete scales chosen empirically.
Stage 2 — Subpixel + orientation refinement (§III-B)
Given an integer candidate , the subpixel position is the point at which gradients at neighbouring pixels are orthogonal to :
Closed-form solution over an neighbourhood:
Gradient magnitudes weight the sum automatically — pixels with strong gradients dominate, low-gradient pixels contribute little. Edge orientation vectors are refined separately by minimising the squared deviation of gradient normals (Eq. 4); the solution is the eigenvector of the scatter matrix corresponding to the smallest eigenvalue.
Stage 3 — Structure recovery (§III-C)
The checkerboard structure minimises an energy
rewards explaining more corners; measures how well triples of consecutive corners along each row and column satisfy the collinearity / spacing constraint (Eq. 7). The discrete optimisation is greedy: from each seed corner, expand a initial hypothesis by adding one row or column at a time, picking the expansion that reduces the most. Apply this to each seed; merge duplicates greedily. The result is a list of all visible checkerboards in the image — recovered without any prior on — which is the single-shot property.
Implementation
Open source: libcbdetect (C++) at cvlibs.net, maintained by the original authors at Karlsruhe Institute of Technology. The toolbox also implements the camera-to-range calibration pipeline (§IV of the paper). MATLAB and Python ports exist downstream.
Remarks
- Single-shot is the practical contribution. The structure-recovery energy function discovers an unknown number of checkerboards in one image without the user specifying for each board — making the detector well-suited to calibration rigs that place multiple targets in the scene at different orientations.
- Three fixed scales is the limitation. The , , window sizes are chosen empirically; severe blur peaking between these scales degrades detection. The pyramidal blur-aware detector (Abeles 2021) addresses this by computing the response at every level of a full image pyramid and selecting per corner the level that maximises intensity-per-resolution.
- Distinct from ChESS and ROCHADE. Unlike ChESS (16-pixel ring sampling), Geiger uses two full quadrant-kernel convolutions per scale. Unlike ROCHADE (gradient-magnitude centreline graph), Geiger detects per-pixel and grows the grid greedily from seed corners.
- Subpixel refinement neighbourhood is large. The window in Eq. 3 integrates over 121 pixels — significantly larger than Harris's typical 5–9 px or ROCHADE's cone window ( with –). Larger neighbourhood reduces single-pixel noise sensitivity but can cross checkerboard edges on small fields.
- Used downstream by GP enhancement. GP checkerboard enhancement (Hillen et al. 2023) consumes Geiger's partial board outputs and learns a Gaussian process from grid-coordinate to pixel-coordinate to fill in missing corners, predict UV for occluded grid positions, and globally smooth all detected corner positions. Geiger is the canonical upstream detector in that pipeline; the GP wrapper compensates for Geiger's structure-recovery limitation under heavy occlusion and is the workhorse for Hillen 2023's low-resolution endoscopic, multispectral, and thermal IR benchmarks.
- Empirical accuracy. Mean reprojection error 0.18 px across 10 calibration settings (Table I of paper); F1 = 0.92 on the abeles 2021 benchmark — second-best after the pyramidal detector at 0.97 (the abeles paper notes Geiger has "many more logical branches making it expensive to compute" but credits it as the foundational design).
- Calibration-target-only. The four-quadrant likelihood is specifically tuned to X-junctions; it is not a general-purpose corner detector. For non-checkerboard scenes use Harris, Shi-Tomasi, or FAST.
When to choose Geiger over Pyramidal
Pyramidal blur-aware X-corner (Abeles 2021) is the direct successor to Geiger in the per-pixel X-corner detector family. It improves on Geiger in two ways: a full image pyramid (replacing Geiger's three fixed scales) and a simpler xscore (replacing Geiger's four-quadrant likelihood with a 16-sample template that the paper notes is cheaper to compute).
| Geiger (2012) | Pyramidal (2021) | |
|---|---|---|
| Per-pixel response | four-quadrant prototype, 4 quadrant convolutions per scale | xscore from 16 ring samples, single template per level |
| Multi-scale strategy | 3 fixed window sizes (, , ); per-pixel max | full image pyramid (4–6 levels); per-corner level selection |
| Structure recovery | greedy energy-minimisation grid growing | blur-aware edge intensity score with level-dependent spacing |
| Per-pixel cost | higher (4 convolutions × 3 scales + gradient verification) | lower (single template, accumulated across pyramid levels) |
| F1 on abeles benchmark | 0.92 | 0.97 |
| Open source | libcbdetect (Karlsruhe; C++) | implementation distributed with the paper |
Choose Geiger when (1) the image is in focus and the corner sizes fall within the three preset window scales — the simpler 3-scale pipeline is well-tuned for the standard indoor calibration case and avoids the per-corner level-selection bookkeeping; (2) you need the single-shot multi-board structure recovery — Geiger's energy-minimisation finds an unknown number of checkerboards in one image, useful for calibration rigs with multiple targets; (3) the libcbdetect C++ implementation is the reference — many downstream tools (Kalibr, ROS calibration packages, Hillen GP enhancement) consume Geiger output as their de-facto upstream baseline.
Choose Pyramidal when (1) the image has heavy blur or large variation in corner size (close-range plus long-range targets in the same scene) — the full-pyramid level selection compensates for blur far better than three fixed scales; (2) you need the per-corner pyramid-level metadata for downstream uses (autofocus diagnostics, per-corner uncertainty estimates); (3) F1 matters more than the libcbdetect ecosystem — the pyramidal detector outperforms Geiger by 5 percentage points in F1 on the standard ROCHADE benchmark.
References
- A. Geiger, F. Moosmann, Ö. Car, B. Schuster. Automatic Camera and Range Sensor Calibration using a single Shot. IEEE ICRA 2012. pdf
- C. Harris, M. J. Stephens. A Combined Corner and Edge Detector. Alvey Vision Conference, 1988. (Baseline detector that Geiger explicitly improves upon.)
- J. Shi, C. Tomasi. Good Features to Track. IEEE CVPR, 1994. (Cited as a common pre-Geiger junction-localisation choice.)
- L. Lucchese, S. K. Mitra. Using saddle points for subpixel feature detection in camera calibration targets. IEEE Asia-Pacific Conference on Circuits and Systems, 2003. (Cited [20] as motivation for subpixel-accurate corner localisation.)
- M. Rufli, D. Scaramuzza, R. Siegwart. Automatic Detection of Checkerboards on Blurred and Distorted Images. IROS 2008. (Cited [7] as an OpenCV-checkerboard-detector extension that Geiger notes only returns a single checkerboard per image.)
- Z. Zhang. A Flexible New Technique for Camera Calibration. IEEE TPAMI 22(11)–1334, 2000. (Cited [24] as the calibration framework Geiger feeds.)
- F. Abeles. A Pyramidal Blur-Aware X-Corner Detector. IEEE ICCAR 2021. (Direct successor; benchmarks Geiger as second-best F1 = 0.92.)