Calibration board printing guide: why your square size is always wrong

When calibration is systematically biased and the reprojection error refuses to come down, the problem is often neither the camera nor the algorithm — it is the sheet of paper, which is about 4% smaller than you think.

The short version: never use a printed calibration board without verifying its physical size against a known length. The cheapest way to do that is to have the generator draw a 100 mm bar on the same sheet: measure it with a steel ruler, and if it is off by more than 0.5 mm, reprint.

Cause 1: the printer rescaled the page (most common)

Almost every printer driver and PDF viewer defaults to "Fit to page" / "Shrink to fit printable area". Without telling you, it outputs A4 content at 96–97%, because the driver believes the sheet has an unprintable margin.

The consequence is sneaky: calibration still runs, corners are still detected, but every physical dimension is scaled down by about 4%. Intrinsics computed from 20 mm squares actually correspond to 19.2 mm. For a single camera, part of that error is absorbed into the focal length, so it looks "fine". The moment you need true scale — multi-camera rigs, LiDAR–camera, hand-eye — it stops hiding: translations come out uniformly too small.

Fix: set scaling to 100% (or "actual size") in the print dialog and explicitly turn off "Fit to page".

Cause 2: selected paper does not match the loaded paper

The dialog says A4 but the tray holds Letter, or the reverse. The driver re-lays out the page for the paper it was told about, and since the physical sheets differ, the final size cannot be right. Letter is 5.9 mm wider and 17.6 mm shorter than A4, and importer printers often default to Letter.

Fix: make the paper in the dialog match the label on the tray; if unsure, measure the sheet.

Cause 3: printing directly from the browser

The browser print path adds another CSS-to-physical mapping, and often layers on headers, footers and automatic scaling. The same PDF printed from Acrobat is exact, while the browser is off by 2% — this is common.

Fix: download the PDF and print it from a real viewer (Acrobat, macOS Preview, Foxit) with headers and footers disabled.

Cause 4: humidity, warping, lamination

Plain paper stretches 0.1–0.3% with humidity, which is up to 0.4 mm across a 200 mm board. Worse is flatness: an unmounted sheet is not a plane, and the z=0 plane is the core assumption of the whole calibration. Laminating adds thickness and warping, and the gloss blows out highlights near corners, blurring the black/white boundary and degrading sub-pixel corner accuracy.

Fix: mount the print on a rigid board (aluminium, acrylic, foam board) and press all four corners flat. Do not laminate; if you need durability, use matte stock or a printed aluminium target.

How to verify: back out the scale factor

The reliable method is to put a ruler of known length on the sheet. Measure it after printing and you can compute the true scale factor:


            true square size = nominal square size × (measured bar / nominal bar)

e.g. nominal 20 mm, bar marked 100 mm, measured 96.2 mm
     → true size = 20 × 0.962 = 19.24 mm
     → 96.2% scale, reprint
          

If you cannot reprint right now, you can feed the true size back into OpenCV as squareSize (use 0.01924 instead of 0.02). That at least restores correct scale — but the squares are still not square, so treat it as a stopgap, not a solution.

How large should the squares be

The deciding factor is not "bigger is more accurate" but the balance between corner size in pixels and coverage. Squares need to be at least 20–30 pixels across for stable sub-pixel corner detection, and the corners must span the whole image — especially the four edges — or the distortion terms are extrapolated badly.

Use caseSquare sizeBoard size (9×6 corners)Paper
Intrinsics, normal lens20–25mm250×175mmA3
Intrinsics, wide-angle / fisheye25–30mm300×210mmA3
Robot hand-eye15–20mm150×105mmA4
Narrow FOV / microscopy5–10mm50×35mmHigh-precision print

Rule of thumb: 20 mm on A4 is a good starting point. If corners occupy fewer than 15 pixels in your images, the board is too small or the camera too far — use a bigger board, not finer squares.

Symptom table

SymptomSuspect firstHow to check
Everything uniformly ~4% too smallPrinter scalingMeasure the scale bar on the sheet
Tiny reprojection error but distances are wrongUncalibrated scale / wrong board sizeCheck squareSize units (metres vs millimetres)
Corners never detectedpatternSize set to the square countAn 8×6 board should be (7, 5)
Only the frame edges fail to detectStrong distortion / board not reaching edgesCapture a set with the board in each corner
Corner positions jitter a lotLamination glare, warped paper, uneven lightMatte paper, rigid mounting, diffuse light
Focal length differs a lot between distancesAll frames captured at one rangeCapture at two or three distances

Things people forget when capturing

  • Fill at least 60% of the frame and make sure corners appear in all four image corners, otherwise distortion is unobservable.
  • Spread the poses: tilts of 20–45° are what decouple focal length from the principal point. Do not just shoot head-on.
  • 15–25 frames is enough. More is not better: 50 near-duplicates lose to 15 well-spread poses.
  • Disable autofocus and stabilisation, or lock them before the session. Focus changes change the intrinsics.
  • Use raw images — never ones that already went through lens correction or resizing.

Need a board you can print right now? The board generator produces a vector PDF with a 100 mm scale check and gives you patternSize and squareSize ready to paste.

Related