"Give the solver total freedom over focal length and it will explain a normal face with a fisheye lens. Freedom isn't always a gift."
Focal and Distance Look the Same to One Face
There is a genuine ambiguity buried in a single portrait: a wide lens up close and a long lens far away produce almost the same image of a face. Move the camera back and zoom in and the face barely changes — this is the same trade-off filmmakers exploit in the dolly-zoom shot. To the geometry, focal length and camera distance are tangled together, and one face gives the solver only a weak grip on which is which. It's an ill-conditioned parameter: the data barely pins it down.
Let It Roam and It Lies
If you hand solvePnP an unbounded focal search, it does something technically correct and practically useless. It finds some focal that drives reprojection error to near zero — often an absurd, extreme wide-angle value — and pairs it with a distance that makes the numbers work. The reprojection error looks great. The recovered box converges like a fisheye, the head reads as violently turned, and the answer is nonsense. The math was satisfied; the perspective is a lie. A low error on a weakly-constrained parameter is not the same as a correct fit.
The Bounded Sweep
Loomis fixes this the honest way: it bounds the search. Focal length is swept only across a plausible portrait band — roughly a normal-lens range, not fisheye and not extreme telephoto — and the fit with the lowest error within that band wins. This is a prior in the plain-English sense: portraits are overwhelmingly shot with normal-ish lenses, so refusing to consider a fisheye explanation is not cheating, it's using real knowledge the single face can't supply. The bound is what keeps the recovered box's convergence sane.
The Escape Hatch
Priors should be overridable, and this one is. When a photo genuinely was shot wide — an arm's-length selfie, a real wide-angle lens — a human can set the focal directly and skip the sweep entirely. That manual override is the deliberate escape hatch for the one parameter geometry can't confidently recover from a face alone. It's a small, honest admission: the engine is deterministic where it can be, and hands the wheel to a human exactly where the data runs out.